Есть такая таблица SQLite
col1 col2 col3 col4
row1 row1 row1 row1
row2 row2 row2 row2
row3 row3 row3 row3
row4 row4 row4 row4
row5 row5 row5 row5
И есть небольшая программка на Java NetBeans, которая должна считывать всю БД и записывать её в jTable. Но она делает это очень криво когда из БД удаляешь все строки, и выдаёт следующую ошибку когда в таблицу добавлены строки:
java.sql.SQLException: column 2 out of bounds [1,1]
at org.sqlite.core.CoreResultSet.checkCol(CoreResultSet.java:84)
at org.sqlite.core.CoreResultSet.markCol(CoreResultSet.java:97)
at org.sqlite.jdbc3.JDBC3ResultSet.getString(JDBC3ResultSet.java:436)
Код получения данных из БД:
public static String[] [] getAllData(Connection con) {
String[] [] res;
int i = 1;
int j = 1;
res = new String[countRows(con)] [columnNames(con).size()];
stmt = con.createStatement();
query = "SELECT * FROM class;";
rs = stmt.executeQuery(query);
rs.next();
while(i<columnNames(con).size()) {
while(j<countRows(con)) {
res [j] [i] = rs.getString(j);
j++;
}
i++;
}
return res;
}
Код для записи в таблицу:
int i = 1;
int j = 1;
String[] [] res = DBController.getAllData(con);
while(i<rows) {
while(j<cols) {
dtm.setValueAt(res [j] [i], j, i);
j++;
}
i++;
}
Пожалуйста, помогите хотя-бы понять чем эта ошибка вызвана.
У Вас неверная обработка данных в ResultSet.
Принятый паттерн обработки выглядит так:
public static String[][] getAllData(Connection con) {
int i = 0;
int j = 0;
String[][] res = new String[countRows(con)][columnNames(con).size()];
try (Statement stmt = con.createStatement();) {
String query = "SELECT * FROM class;";
try (ResultSet rs = stmt.executeQuery(query);) {
while(rs.next()) {
while (i < columnNames(con).size()) {
while (j < countRows(con)) {
res[j][i] = rs.getString(j + 1);
j++;
}
i++;
}
}
return res;
}
}
}
Вам необходимо проводить обработку только когда строки есть.
Очень полезный оригинальный материал
Так же информацию о столбцах можно получить методом
rs.getMetaData()
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На WebSphere развернуто приложениеИдентифицирующая среда - AD
Мне нужно показывать прогресс загрузки в элементе RecyclerViewЕстественно, как только я выйду в другую Activity или закрою эту, прогресс показываться...