yohpopsMedlem sedan feb. 20011 198 inlägg Nu har jag en ny fråga.
Det handlar om samma sak som min förra.
http://www.webforum.nu/showthread.php?s=&threadid=100435&forumid=166
Nu får jag inte ut någon data.
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection cn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=invoice_archive", "uid", "pwd");
Statement st = cn.createStatement() ;
String sql = "select * from getFiles " + strWhere + " " + strOrder;
ResultSet rs = st.executeQuery(sql);
rs.getFetchSize() blir alltid 0.
Vad är det för fel?
mvh
yohpops
SPiNMedlem sedan mars 20007 896 inlägg Kastas inget Exception? Då låter det som att något villkor i din SQL-fråga utesluter all data. Testa med en bas-fråga, "SELECT * FROM tbl" och se om du får något resultat.
ViktorMedlem sedan aug. 20021 752 inlägg Tråd flyttad från "Java 2 Enterprise Edition".
/Viktor
ViktorMedlem sedan aug. 20021 752 inlägg Så här beskrivs getFetchSize i Java doc
Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed for this ResultSet object. If the fetch size specified is zero, the JDBC driver ignores the value and is free to make its own best guess as to what the fetch size should be. The default value is set by the Statement object that created the result set. The fetch size may be changed at any time.
Jag kör alltid med 0 när jag kör min SQL och det fungerar perfekt :)
Om du inte får ut någon data så beror det nog på något annat än FetchSize. Har du provat rs.next() för att se om det finns någon data i resultset?
/Viktor
yohpopsMedlem sedan feb. 20011 198 inlägg Nej inget fel.
Och jag får ingen data om jag skriver rs.next().
Får fel när jag kör.
String filename = rs.getString("filename");
Typ method not allowed in current state.
mvh
yohpops
Visa lite mer kod så är det lättare att se vad som är fel.
yohpopsMedlem sedan feb. 20011 198 inlägg Lite kod
// Fetching the result from the database
String DBFileName;
String DBInvoice;
String DBCustNo;
String DBFileSize;
String DBDate;
// If no files where found, let the user know
if (rs.getFetchSize()>0 ||true) // Eftersom getFetchSize alltid är 0
{
// Create a filelist from the database
int i = 0;
//while (i<rs.getFetchSize())
while (i<100) // Eftersom getFetchSize alltid är 0
{
i++;
DBFileName = rs.getString("FileName"); // Felet uppstår här.
DBInvoice = rs.getString("Invoice");
DBCustNo = rs.getString("CustNo");
DBFileSize = rs.getString("FileSize");
DBDate = rs.getString("Date");
// Change the rows backgroundcolor every other time
if (bgcolor=="")
{
bgcolor="#DDDDDD";
}
else
{
bgcolor="";
}
// Print a row
out.print("<tr bgcolor='"+ bgcolor +"'><td onclick=\"openFile('"+ DBFileName +"')\" style=\"cursor:hand;\">" + DBInvoice + "</td>");
out.print("<td onclick=\"openFile('"+ DBFileName +"')\" style=\"cursor:hand;\">" + DBCustNo + "</td>") ;
out.print("<td onclick=\"openFile('"+ DBFileName +"')\" style=\"cursor:hand;\">" + DBFileSize + " kb</td>") ;
out.print("<td onclick=\"openFile('"+ DBFileName +"')\" style=\"cursor:hand;\">" + DBDate + "</td>") ;
out.println("</tr>") ;
rs.next();
}
out.println("<tr><td colspan=\"4\"><hr></td></tr>" );
}
else
{
if (MvxLanguage.equals("SE"))
{
out.println("<tr><td colspan=\"4\"><b>Inga träffar...</b></td></tr>" ) ;
}
else
{
out.println("<tr><td colspan=\"4\"><b>No hits...</b></td></tr>" ) ;
}
}
Felet är mer korrekt.
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.
Har ni några idéer?
SPiNMedlem sedan mars 20007 896 inlägg Du loopar hundra gånger, men det är inte säkert att det finns 100 poster i resultatet, och tydligen finns det inte det om man ska tolka det Exception som kastats. Varför kunde du inte använda 'i < rs.getFetchSize()' i din while-loop? Säger du att det alltid returnerar 0? Låter märkligt.
yohpopsMedlem sedan feb. 20011 198 inlägg Det finns hundra.
Frågan ska resultera minst 500 rader.
Jar la bara till i<100 för att jag inte kunde använda getFetchSize().
SPiNMedlem sedan mars 20007 896 inlägg Hmm, använda 'rs.next()' istället för 'i < 100' i din while-loop:
while( rs.next() ) {
...
yohpopsMedlem sedan feb. 20011 198 inlägg Det verkar funka.
Tack för det.
mvh
Johan
SPiNMedlem sedan mars 20007 896 inlägg Man måste alltid börja med att anropa metoden next() för det ResultSet man har data i, för att få fram första posten. Vill du ändå bara loopa 100 poster, anropar du bara next() innan du plockar ut data - istället för efter:
while( i < 100 ) {
i++;
rs.next();
myStr = rs.getString( "fld" );
...
}
ViktorMedlem sedan aug. 20021 752 inlägg Eller,
while(rs.next()) {
if(++i>100)
break;
myStr = rs.getString( "fld" );
...
}
för att vara på den säkra sidan att det alltid finns 100 postar :)
/Viktor
BoorgMedlem sedan okt. 2004409 inlägg Är rs.next likadant som re.eof som betyder att den loopar igenom tills databasen är tom?
ViktorMedlem sedan aug. 20021 752 inlägg re.eof vet jag inte vad det är för något men rs.next gör mer än att bara titta om den är i slutet av "filen", den laddar nästa rad i resultatet och gör det tillgängligt, om det finns fler rader så retunerar den true, annars false.
/Viktor