我正在開發一個用戶可以組裝瑜伽課程組件的項目。它分佈在多個文件中,因此太大而無法放在這裏。我遇到的麻煩是在一種方法中,我需要遍歷從MySQL數據庫返回僅一行的結果集的水平列。MySQL - 迭代結果集中的列
我知道我必須將光標放在結果集的第一行(我相信我正在做)。由於在結果集中只有一行(我的變量是rset),因此我應該只使用rset.next()一次,對嗎?然後我應該可以使用一個簡單的循環遍歷每一列並將值附加到我的String Builder。我想跳過第一列並追加每個後續值,直到循環到達具有空值的列。我找不到爲什麼我的代碼不斷返回「結果集開始之前」異常。
任何人都可以發現任何錯誤?
我將發佈該方法以及由此方法調用的方法。 (我在一個不同的問題張貼了這個,但我相信我的問題的性質發生了變化,所以用不同的標題,我重新發布此。)
// Query that returns the poses within a specific section
public String listPosesInSection(String tableName, String sectionName) {
String strList;
StringBuilder strBuilderList = new StringBuilder("");
// Run the query
try {
statement = connection.createStatement();
// Query will collect all columns from one specific row
rset = statement.executeQuery("SELECT * FROM " + tableName + " WHERE " + tableName + "_name = '" + sectionName + "'");
rset.next();
System.out.println("Column count is " + countColumnsInTable(tableName));
for (int i = 2; i <= countColumnsInTable(tableName); i++) {// First value (0) is always null, skip first column (1)
System.out.println("test");
strBuilderList.append(rset.getString(i) + "\n"); // This is line 126 as indicated in the exception message
}
} catch (SQLException e) {
e.printStackTrace();
}
strList = strBuilderList.toString();
return strList.replaceAll(", $",""); // Strips off the trailing comma
}
// Method for getting the number of columns in a table using metadata
public int countColumnsInTable(String sectionType) {
int count = 16;
try {
statement = connection.createStatement();
rset = statement.executeQuery("SELECT * FROM " + sectionType);
rsMetaData = rset.getMetaData();
count = rsMetaData.getColumnCount();
} catch (SQLException e) {
e.printStackTrace();
}
return count;
}
這裏是例外的第一部分消息:就像你重新使用兩種方法之間的rset
Column count is 26
java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5773)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5693)
at YogaDatabaseAccess.listPosesInSection(YogaDatabaseAccess.java:126)
at YogaSectionDesigner$5.actionPerformed(YogaSectionDesigner.java:231)
這樣做了!非常感謝! –