Я работаю над проектом, в котором пользователь может собрать компоненты класса йоги. Он распространяется по нескольким файлам и, следовательно, слишком велик, чтобы все это здесь. Проблема, с которой я столкнулся, заключается в одном методе, когда мне нужно перебирать горизонтальные столбцы результирующего набора, возвращающего только ОДИН ROW из базы данных 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;
}
А вот первая часть, за исключением сообщение:
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)
Это сделало это! Спасибо! –