使用PreparedStatement插入.如何自动递增ID?

gra*_*aci 17 java mysql prepared-statement mysql-connector

我有一个PreparedStatement,例如:

 PreparedStatement preparedStatement = connect.prepareStatement("INSERT into employee (id, time, name" + "(?,?,?)",Statement.RETURN_GENERATED_KEYS);
 ResultSet tableKeys = preparedStatement.getGeneratedKeys();
 preparedStatement.executeUpdate();
 tableKeys.next();
 int autoGeneratedID = tableKeys.getInt(1);
 preparedStatement.setInt(1,autoGeneratedID);
 preparedStatement.setTimestamp(2, new java.sql.Timestamp(new java.util.Date().getTime()));                           
 preparedStatement.setString(3, "Test");
 preparedStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud)

如您所见,Employee表具有自动递增的ID.我需要基本上使用preparedStatement自动添加它.谁能告诉我哪里出错了并纠正我?现在它只是给我一个与Statement相关的错误.

lc.*_*lc. 30

将列完全INSERT语句中删除.它将由数据库引擎生成.您的查询应该是:

INSERT INTO employee (time, name)
VALUES (?, ?)
Run Code Online (Sandbox Code Playgroud)

其次,您必须先执行插入,然后从结果中获取密钥.

我相信你的代码应该是:

PreparedStatement preparedStatement = 
    connect.prepareStatement("INSERT into employee (time, name) VALUES (?,?)", 
    Statement.RETURN_GENERATED_KEYS);

preparedStatement.setTimestamp(1, 
    new java.sql.Timestamp(new java.util.Date().getTime()));                           
preparedStatement.setString(2, "Test");

preparedStatement.executeUpdate();

ResultSet tableKeys = preparedStatement.getGeneratedKeys();
tableKeys.next();
int autoGeneratedID = tableKeys.getInt(1);
Run Code Online (Sandbox Code Playgroud)

请注意,此示例不检查已执行语句的成功或返回键的存在.