Как вставить строку в базу данных?

#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 и вставки данных

Если вы выполнили вышеуказанные шаги, пожалуйста, проигнорируйте это..