mysql java: вставка строки с некоторыми параметрами не работает - PullRequest
1 голос
/ 19 мая 2011

Я пытаюсь выполнить этот запрос

window.requete ="INSERT INTO logfile VALUES(" + omsg.get_Creator() +","+ omsg.get_CreatorParent() +","+ omsg.get_SequenceNumber()+ ","+omsg.get_CreatorCost()+ ","+omsg.get_CreatorEnergy()+","+interval+","+lplinterval+ ","+omsg.get_Data()+"," + tmp2+")";

try { Statement stmt = window.connexion.createStatement();
    int resultat = stmt.executeUpdate(requete);
} catch (SQLException e1) {
    window.error("pb insert"); 
}

Я получаю исключение при вставке.Что-то не так в моем синтаксисе?

Моя таблица содержит:

| Creator(INT) | CreatorParent(INT) | SequenceNumber(INT) | CreatorCost(INT) | CreatorEnergy |
| Data(INT) | SampInterval(INT) | LplInterval(INT) | SampTime (DATETIME)|

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Строковые значения должны быть заключены в строку SQL.Но лучше использовать PreparedStatement.Тогда вам не нужно ни цитировать значения, ни спасаться от атак SQL-инъекций .

String sql = "INSERT INTO logfile VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)";

preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, logMessage.getCreator());
preparedStatement.setInt(2, logMessage.getCreatorParent());
preparedStatement.setInt(3, logMessage.getSequenceNumber());
preparedStatement.setInt(4, logMessage.getCreatorCost());
preparedStatement.setInt(5, logMessage.getCreatorEnergy());
preparedStatement.setInt(6, interval);
preparedStatement.setInt(7, lplinterval);
preparedStatement.setInt(8, logMessage.getData());
preparedStatement.setTimestamp(9, new Timestamp(tmp2.getTime())); // Assuming tmp2 is java.util.Date.
preparedStatement.executeQuery();

(и работать над вашими соглашениями по кодированию ,у вас это довольно ужасно, также не забывайте правильно закрывать ресурсы JDBC, вы, похоже, тоже это не учитываете)


Обновление : каксогласно комментариям tmp2 является String.Вот как вы можете преобразовать его в Date, чтобы использовать его в setTimestamp(), чтобы значение было должным образом сохранено в столбце типа DATETIME.Поскольку вы не упомянули, в каком формате даты находится tmp2, я просто возьму "yyyy-MM-dd HH:mm:ss" в качестве примера:

String datestring = "2011-05-19 12:34:56"; // Just an example. 
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(datestring);
Timestamp timestamp = new Timestamp(date.getTime());
// Store in SQL string by PreparedStatement#setTimestamp().
0 голосов
/ 19 мая 2011

Похоже, вам нужны кавычки вокруг вашего поля даты и времени., '"+ tmp2 +"') "

Вы получаете конкретное сообщение об ошибке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...