#java #sql
#java #sql
Вопрос:
Я написал этот код, чтобы добавить материал в базу данных, однако, когда я пытаюсь запустить его, он не работает, я искал способы сделать это, но, похоже, я просто не могу найти решение, кто-нибудь может помочь?
String mySQL ="INSERT INTO Measurement (Level, Time, Date, TankID)" "VALUES (textField1, currentTime,currentDate,(SELECT TankID FROM Tanks WHERE TankName = '2' AND Site_ID = '1'))";
stmt.executeUpdate(mySQL);
Комментарии:
1. Пожалуйста, предоставьте текст исключения SQL
2. Что такое ошибка? Можете ли вы прикрепить вывод журнала?
3. Здесь, в Stack Overflow, вы найдете бесчисленные примеры использования JDBC для вставки строки в базу данных. Пожалуйста, выполните тщательный поиск перед публикацией.
Ответ №1:
Как ваш SQL, так и подготовленный оператор неверно сформированы. Попробуйте использовать INSERT INTO ... SELECT
здесь:
String sql = "INSERT INTO Measurement (Level, Time, Date, TankID) ";
sql = "SELECT ?, ?, ?, TankID ";
sql = "FROM Tanks ";
sql = "WHERE TankName = '2' AND Site_ID = '1'";
stmt.setString(1, textField1);
stmt.setString(2, currentTime); // not sure about the type here
stmt.setString(3, currentDate); // also not sure about the type
stmt.executeUpdate();
Обратите внимание, что я не уверен в типах привязки столбцов Java и SQL для currentTime
и currentDate
. Если не строка, то приведенное выше должно быть немного изменено.
Ответ №2:
Вы должны использовать PreparedStatement
, чтобы правильно установить первый параметр запроса вставки и проверить документацию вашего сервера БД, чтобы использовать существующие функции для получения текущего времени и даты.
Например, MySQL имеет функции CURDATE()
и CURTIME()
String query = "INSERT INTO Measurement (Level, Time, Date, TankID) "
"VALUES (?, CURTIME(), CURDATE(), (SELECT TankID FROM Tanks WHERE TankName = '2' AND Site_ID = '1'))";
try (PreparedStatement statement = connection.prepareStatement(query)) {
statement.setString(1, textField1); // could be textField1.getText() or textField1.getValue()
statement.executeUpdate();
}
Комментарии:
1. Ваш синтаксис вставки даже не будет выполняться в некоторых базах данных SQL, и, кроме того, это, вероятно, не та логика, которую здесь хочет OP (если только этот подзапрос действительно не вернет только одну запись). запись).
Ответ №3:
В зависимости от типа вашей базы данных измените сведения о подключении
Перейдите по этой ссылке для создания соединения JDBC и вставки данных
Если вы выполнили вышеуказанные шаги, пожалуйста, проигнорируйте это..