ユーザーがヨガクラスのコンポーネントを組み立てることができるプロジェクトに取り組んでいます。複数のファイルに分散しているため、大きすぎてすべてをここに置くことはできません。私が抱えている問題は、MySQL データベースから 1 行だけを返す結果セットの水平方向の列を反復処理する必要がある 1 つの方法にあります。
結果セットの最初の行にカーソルを配置する必要があることを理解しています(そうしていると思います)。結果セット (私の変数は rset) には 1 つの行しかないので、rset.next() は 1 回だけ使用する必要があります。そして、単純なループを使用して各列を反復処理し、値を String Builder に追加できるはずです。ループが null 値を持つ列に到達するまで、最初の列をスキップして後続の各値を追加したいと考えています。コードが「結果セットの開始前」例外を返し続ける理由がわかりません。
誰でも何か間違ったことを見つけることができますか?
メソッドと、このメソッドによって呼び出されるメソッドを投稿します。(これは別の質問に投稿しましたが、質問の性質が変わったと思うので、別のタイトルで再投稿します。)
// 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;
}
例外メッセージの最初の部分は次のとおりです。
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)