webForumDet fria alternativet

ResultSet

15 svar · 571 visningar · startad av yohpops

yohpopsMedlem sedan feb. 20011 198 inlägg
#1

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

yohpopsMedlem sedan feb. 20011 198 inlägg
#2

Ingen som vet?

SPiNMedlem sedan mars 20007 896 inlägg
#3

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
#4

Tråd flyttad från "Java 2 Enterprise Edition".

/Viktor

ViktorMedlem sedan aug. 20021 752 inlägg
#5

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
#6

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

Aleph_OneMedlem sedan juni 2003372 inlägg
#7

Visa lite mer kod så är det lättare att se vad som är fel.

yohpopsMedlem sedan feb. 20011 198 inlägg
#8

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
#9

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
#10

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
#11

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
#12

Det verkar funka.
Tack för det.

mvh
Johan

SPiNMedlem sedan mars 20007 896 inlägg
#13

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
#14

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
#15

Är rs.next likadant som re.eof som betyder att den loopar igenom tills databasen är tom?

ViktorMedlem sedan aug. 20021 752 inlägg
#16

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

130 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)