2016-07-14 4 views
0

У меня возникла проблема с хранением значений в базе данных sql, которую я создал в Netbeans.Хранение метки времени в базе данных SQL

String bladeSerial; 
String bladeType; 
LocalTime startTime1; 

private void startButton2ActionPerformed(java.awt.event.ActionEvent evt) {            


    Connection conn = null; 
    Statement st = null; 
try { 
    conn = DriverManager.getConnection ("jdbc:derby://localhost:1527/db01", "Administrator", "admin"); //run procedure getConnection to connect to the database - see below 
    st = conn.createStatement(); //set up a statement st to enable you to send SQL statements to the database. 
} catch (SQLException ex) { 
    Logger.getLogger(FormTwo1.class.getName()).log(Level.SEVERE, null, ex); 
} 


     System.out.println ("Successful Connection"); 


String query = "insert into TB01(SERIAL,BLADETYPE,STARTT1) values ('+bladeSerial+', '+itemText+', '+(String.valueOf(startTime1))+')"; 
try (PreparedStatement pstmt = conn.prepareStatement(query)) { 
    pstmt.setString(1, bladeSerial); 
    pstmt.setString(2, bladeType); 
    pstmt.setString(3, String.valueOf(startTime1)); 
    pstmt.executeUpdate(); 
} catch (SQLException ex) { 
    // Exception handling 
    Logger.getLogger(FormTwo1.class.getName()).log(Level.SEVERE, null, ex); 
} 

Переменная startTime1 сохраняется в формате HH:mm:ss.SSS. При выполнении кода, я получаю ошибку:

java.sql.SQLSyntaxErrorException: Syntax error: Encountered ":" at line 1, column 65.

Ошибка относится к толстой кишке в то время, но я не знаю, как обойти эту проблему.

SERIAL является VARCHAR(5), BLADETYPE является VARCHAR(80), STARTT1 является VARCHAR(12). Все столбцы находятся в таблице DATA.

+3

* Никогда * строить вставки строк с конкатенации. – meskobalazs

+0

Похож на то, что маленькие таблички Бобби поймали тебя. см. http://bobby-tables.com/ –

+0

BTW Точная ошибка вызвана не ссылкой на строки с одинарными кавычками ('' '). – meskobalazs

ответ

4

PreparedStatement Используйте вместо этого, и не задавать параметры с set* методами:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS"); 
String query = "insert into DATA(SERIAL,BLADETYPE,STARTT1) values (?, ?, ?)"; 
try (PreparedStatement pstmt = conn.prepateStatement(query)) { 
    pstmt.setString(1, bladeSerial); 
    pstmt.setString(2, bladeType); 
    pstmt.setString(3, startTime1.format(formatter)); 
    pstmt.executeUpdate(); 
} catch (SQLException e) { 
    // Exception handling 
} 
+2

Замечательно, что вы указываете использование 'PreparedStatement', но в общем случае вы не должны использовать' String' для установки поля даты, времени или отметки времени. Вместо этого используйте 'java.sql.Date',' java.sql.Time' или 'java.sql.Timestamp'. Обратите внимание, что конкретный случай этого вопроса (столбцы - «VARCHAR (12)») требует использования 'setString'. –

+0

Спасибо. Я скорректировал код теперь с вашими изменениями, но получаю эту ошибку - java.sql.SQLException: Позиция столбца «1» вне диапазона. Количество столбцов для этого ResultSet равно «0». – Will

Смежные вопросы