eof och int

Java

4 svar · 401 visningar · startad av AG

Medlem sedan mars 20001 266 inlägg
Trådstart#1

Har nu två problem att ta itu med.
Jag håller på och bygger upp ett inloggningsscript i java, arbetar mot en databas.

Det jag först försöker göra är att sätta in ett "int"-värde i en session, "user", enligt följande kod praxis:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
int id = rs.getInt(1);
String account = rs.getString(2);
session.setAttribute("user", id);

'Error
/login/inloggad.jsp:40: Incompatible type for method. Can't convert int to java.lang.Object.
session.setAttribute("user", id);

Har försökt på alla möjliga sätt utan att lyckas.

Kommer vi till problem nr2. Vid själva inloggningen kollar systemet om användaren finns i databasen. Om användaren inte finns skall systemet skriva ut ett meddelande, men så blir inte fallet.
Alltså hur skriver jag ut om rs är eof?
Kör med hela koden jag har för närvarande, så kanske folk har lust att förbättra o sånt :)
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
<%@ page language=java %>
<%@ page import='java.sql.*' %>
<%@ page import='javax.sql.*' %>
<%

if (session.getAttribute("user") == null){
String driverName="sun.jdbc.odbc.JdbcOdbcDriver";
String dbUrl="jdbc:odbc:login";

Class.forName(driverName);
Connection db =DriverManager.getConnection(dbUrl,"","");

Statement stmt = db.createStatement();
String query = "SELECT * FROM [login] WHERE [account] = '" + request.getParameter("account") + "' AND [password] = '" + request.getParameter("password") + "' ";
ResultSet rs = stmt.executeQuery(query);

while (rs.next())
{
int id = rs.getInt(1);
String account = rs.getString(2);
session.setAttribute("user", id);
%>
<%=id%><br>
<%=account%><br>
<%=session.getAttribute("user")%>
<%
}
stmt.close();
db.close();

}
else {
%>
Inloggad
<%
}
%>

Tackar
Andreas

[Redigerat av AG den 03 apr 2001]

Medlem sedan juni 20008 205 inlägg
#2

/login/inloggad.jsp:40: Incompatible type for method. Can't convert int to java.lang.Object

Du måste lagra int:en i en wrapperklass:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
session.setAttribute("user", new Integer(id));

Sen kan du plocka ut värdet med dinInteger.intValue().

Hur du kollar om ett ResultSet är tomt finns det flera svar på... den ballaste i min mening är:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
if(!rs.next()){
// Inga matchande rader
} else do {
// Bla bla bla..
} while(rs.next());

... sen så har även ResultSetMetaData lite jox som kan vara till hjälp också...

Medlem sedan mars 20001 266 inlägg
#3

Fungerade alldeles utmärkt, får tacka ödmjukast för det.
Nu över till ännu ett problem. Om man lägger in koden som spango visade i min kod så fungerar det fint när man kommer från sidan med textbox, men hur skall man inkludera sidan som kommer i vanliga fall, om session user har ett värde, koden måste ju skrivas på två ställen isf om man kör med else, eller?

Andreas

Medlem sedan juni 20008 205 inlägg
#4
if(personenÄrInloggad){
// blah blah
} else if(kommerFrånInloggningssidan){
// blaha blaha
} else {
// visa inloggningsformulär/redirecta
}
Medlem sedan mars 20001 266 inlägg
#5

Är ju just det problemet, det enda som skiljer emllan de två fälten när man är inloggad är sättet att hämta från databasen, allyså ena hämtar den där formulären stämemr öerens, på det andra där session user är samma som ett id, sen skall ju informationen presenteras som vanligt.

Andreas

634 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
130 ms — deklarationer (db)
126 ms — hämta statistik (db)
149 ms — hämta tråd, inlägg och bilagor (db)
356 ms — ändringar (db)