2017-04-09 18 views
1

私は私のデータベースにtimestampを挿入しようとしていますが、私はjava.sql.SQLSyntaxErrorExceptionを得続ける:ここJavaのSQLのINSERTタイムスタンプjava.sql.SQLSyntaxErrorException

は私のコードここ

java.sql.Timestamp sqlDate = new java.sql.Timestamp(new java.util.Date().getTime()); 
System.out.println(sqlDate); 

DB

に挿入し、接続され
Connection conn = DriverManager.getConnection("jdbc:derby://localhost:1598/VotingDB", "app", "app"); 
    Statement st = conn.createStatement(); 
    String sql = "INSERT INTO VOTES (CANDIDATE_NAME,VOTER_SSN,TIMESTAMP) " 
      + "VALUES ('" + Candidate_Name + "','" + ssn + "'," + TimeStamp + ")"; 

    st.executeUpdate(sql); 
    st.close(); 
    conn.close(); 
} catch (SQLException ex) { 
    System.out.println("Connection failed adding vote " + ex); 
} 

エラー

2017-04-09 20:10:02.825 Connection failed adding vote java.sql.SQLSyntaxErrorException: Syntax error: Encountered "20" at line 1, column 94.

答えて

2

あなたはこのよう''の間であなたの時間を置くために必要があります。

"VALUES ('" + Candidate_Name + "','" + ssn + "', ' " + TimeStamp + "')"; 

しかし、これは十分に確保されていない、あなたは、任意のSQLインジェクションを避けるために、代わりにPreparedStatementを使用する必要があります。例えば

String sql = "INSERT INTO VOTES (CANDIDATE_NAME, VOTER_SSN, TIMESTAMP) VALUES (?, ?, ?)"; 

try (PreparedStatement stm = connection.prepareStatement(sql)) { 

    stm.setString(1, Candidate_Name); 
    stm.setString(2, ssn); 
    stm.setDate(3, TimeStamp); 

    stm.executeUpdate(); 
} 
1

TimeStamp変数を単純引用符で囲んではいけませんか?

String sql = "INSERT INTO VOTES (CANDIDATE_NAME,VOTER_SSN,TIMESTAMP) " 
    + "VALUES ('"+Candidate_Name +"','"+ssn +"','"+TimeStamp+"')";