Установка
Я использую JDBC SQLite
для базы данных моего сервера.Как проверить наличие ценности/почему ResultSet закрыт в SQLite?
То, что я пытаюсь сделать
Я хочу, чтобы проверить, если значение (например, ID
или username
) уже существует в таблице.
Мой код
PreparedStatement preparedStatement = connection.prepareStatement("select * from " + tableName + " where " + columnName + "=? limit 1");
preparedStatement.setString(1, value);
ResultSet resultSet = preparedStatement.executeQuery();
resultSet.next();
try { // this was just for testing and is dumb because it prints an error every time the value does not exist.
// my code actually wasn't wrong. I just tested it badly ..
// it's replacable with if (resultSet.next())
resultSet.getString(1);
System.out.println("check true");
return true;
} catch (Exception e) {
e.printStackTrace();
System.out.println("check false");
return false;
}
Здесь я хочу, чтобы проверить, является ли конкретный value
уже существует в моем column(Name)
в моем table
.
Проблемы
Этот код всегда будет бросать SQLException
: "ResultSet закрыто" в resultSet.getString(columnName)
. Не имеет значения, существует ли значение в таблице или нет. Мой запрос также может быть неправильным, потому что я не получаю то, что должен положить после select
. У меня тогда был 1
, но все использовали *
для «все», и он ничего не изменил. Я серьезно не понимаю this, потому что это слишком сложно для меня, и я просто хотел бы знать, что делает аргумент после select
..
Подходы
Я пробовал много вещей, и прочитал много потоков, но Единственное, с чем я столкнулся, это то, что мне нужно сначала позвонить resultSet.next()
и что ResultSet
не выбрасывает исключение ResultSet closed
, но ничего не изменило. Если есть лучший способ проверить, существует ли значение в таблице, скажите, пожалуйста.
Визуализация
У меня есть таблица здесь (в NULL
«s не имеет значения, они могут быть какие-то случайные величины), и я хочу, чтобы проверить ggffvgvg
существует или нет.
Полная StackTrace
java.sql.SQLException: ResultSet closed
at org.sqlite.core.CoreResultSet.checkOpen(CoreResultSet.java:69)
at org.sqlite.core.CoreResultSet.markCol(CoreResultSet.java:96)
at org.sqlite.jdbc3.JDBC3ResultSet.getString(JDBC3ResultSet.java:436)
at Database.check(Database.java:50)
at ClientHandler.run(ClientHandler.java:72)
Вы ввели свое имя столбца в одинарные кавычки, превратив его в строковый литерал. –
до этого у меня возникло исключение «column columnName», хотя оно и есть – creativecreatorormaybenot
Я бы всегда завернул вызов ResultSet.next() в if. Он возвращает true, если на самом деле есть новая строка, которая была прочитана. Только после этого прочитайте значения из набора результатов –