我構建的代碼使用Spring和Java從標準數據對象訪問數據庫。爲了簡單起見,我的本地安裝程序使用MySQL安裝。我已經能夠使用我的代碼執行插入操作,但我無法從選擇操作中獲取數據...使用Java/Spring的MySql的結果集是空的,它不應該是
我在MySql中有一個表。數據庫被稱爲jonathan,該表稱爲Project,並在其中包含一個id列。
最初有一行,但我現在在表中插入了三行,這些行已經使用我的java/spring-code插入。
我已經單獨列出了我的問題,並在此處壓縮了特定問題的測試,我已經刪除了任何where子句以確保沒有涉及參數映射問題。我調試了代碼以確保我確實收到了一個數據源。
public class TestDb extends MappingSqlQuery {
public TestDb() {
super(StorageFactory.getDataSource(), "Select id from jonathan.Project");
}
@Override
protected Object mapRow(ResultSet arg0, int arg1) throws SQLException {
System.out.println(arg1+" rows");
for(int i=0;i<arg1;i++) {
System.out.println(i+": "+arg0.getString(i));
}
return null;
}
}
當我測試這個
public static void main(String[] args) {
TestDb t = new TestDb();
t.execute();
System.out.println("Test done");
}
我得到
0 rows
Test done
我嘗試了多種不同的外殼上表名也。
解決方案: 我證實,我可以只使用JDBC選擇數據,所以這個問題是我如何訪問的結果。
我發現以下工作:
public class TestDb extends MappingSqlQuery {
public TestDb() {
super(StorageFactory.getDataSource(), "Select id from jonathan.project");
}
@Override
protected Object mapRow(ResultSet arg0, int arg1) throws SQLException {
System.out.println(arg1 + " rows?");
boolean b=arg0.first();
while (b) {
System.out.println(arg0.getInt(1));
b=arg0.next();
}
return null;
}
}
打印表示 0行?
100000
100001
100002
Test done
我仍然不知道什麼ARG1應該給我,因爲據我可以告訴它總是說0。我希望它保持選定的行數。 另外,對於結果集的文件說
一個結果光標最初 位於第一行之前;首先調用 的方法接下來使 當前行的第一行;第二次調用 使當前行的第二行爲 ,依此類推。
給我的想法我可以通過整個ResultSet next(),但如果我先做()然後next()它似乎工作得很好。
我編輯了我的答案帖子。 – LaGrandMere 2010-12-13 10:33:36