【问题标题】:java sql insert timestamp java.sql.SQLSyntaxErrorExceptionjava sql 插入时间戳 java.sql.SQLSyntaxErrorException
【发布时间】:2017-09-04 17:33:58
【问题描述】:

我正在尝试将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 列。

【问题讨论】:

    标签: java sql database jdbc derby


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 2021-07-27
        相关资源
        最近更新 更多