java sql插入时间戳java.sql.SQLSyntaxErrorException

java sql插入时间戳java.sql.SQLSyntaxErrorException,java,sql,database,jdbc,derby,Java,Sql,Database,Jdbc,Derby,我试图将时间戳插入到我的数据库中,但我一直得到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:

我试图将
时间戳
插入到我的数据库中,但我一直得到
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连接添加投票失败 java.sql.SQLSyntaxErrorException:语法错误:在遇到“20” 第1行,第94栏


您不应该用简单的引号将TimeStamp变量括起来吗

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

你应该像这样把你的时间放在
''
之间:

"VALUES ('" + Candidate_Name + "','" + ssn + "', ' " + TimeStamp + "')";
但这还不够安全,必须使用PreparedStatement来避免任何SQL注入

例如:

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();
}