如何在SQL语句中使用生成的id?

时间:2017-01-14 10:40:47

标签: java sql derby

我正在尝试从Derby数据库向表中添加新记录。我需要在其中一个字段中使用记录号。例如。我需要在照片字段中保存图像的路径。并且图像的名称必须与其ID相对应。例如1.jpg。我正在尝试这个语句(在这个例子中没有使用文件扩展名):

PreparedStatement pstmt = conn.prepareStatement("INSERT INTO Users (name, lastname, email, address, password, photo, lastvisit, status) VALUES ('" + name + "','" + lastname + "','" + email + "','" + address + "','" + DigestUtils.toMd5(password) + "', id, '" + now + "','user')");

但是我收到一个错误:java.sql.SQLSyntaxErrorException:列'ID'要么不在FROM列表的任何表中...... 但是这个专栏肯定存在。错误的原因是什么?

1 个答案:

答案 0 :(得分:1)

简短的回答imho是你不能在SQL中那样做。 在您的表Users中,我猜您的id列是一个自动递增的主键。您可以做的是插入您的记录,然后获取为此insert语句生成的最后一个id。然后,您必须执行更新查询以设置照片列的值。

顺便说一句,一定要学习在预备语句中使用占位符

我不是Derby的专家,但浏览文档我发现如何获取生成的列。

pstmt.execute(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet keys = pstmt.getGeneratedKeys();
keys.next();
int id = keys.getInt();