java sql insert timestamp java.sql.SQLSyntaxErrorException

时间:2017-04-09 18:12:14

标签: java sql database jdbc derby

我正在尝试将timestamp插入我的数据库但我不断获得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栏。

2 个答案:

答案 0 :(得分:2)

你应该把时间安排在''之间:

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

答案 1 :(得分:1)

你不应该用简单的引号括起TimeStamp变量吗?

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