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

Java 如何在SQL语句中使用生成的id?,java,sql,derby,Java,Sql,Derby,我正试图从Derby数据库向表中添加一条新记录。我需要在其中一个字段中使用记录编号。例如,我需要在照片字段中保存图像的路径。图像的名称必须与其id相对应。例如1.jpg。我正在尝试以下语句(本例中不使用文件扩展名): 但是我得到一个错误:java.sql.SQLSyntaxErrorException:列“ID”不在FROM列表中的任何表中。。。 但这个专栏确实存在。错误的原因是什么?简单的回答是,在SQL中无法做到这一点。 在表Users中,我猜id列是一个自动递增的主键。您可以做的是插入记录

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

但是我得到一个错误:java.sql.SQLSyntaxErrorException:列“ID”不在FROM列表中的任何表中。。。
但这个专栏确实存在。错误的原因是什么?

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

顺便说一下,一定要学会在准备好的语句中使用占位符

我不是Derby的专家,但在浏览文档时,我发现了如何获得生成的列

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

无关,但:请学会正确使用
PreparedStatement
。不要将值连接到SQL字符串中。改为使用占位符(
)。您的意思是,如果新创建的
用户
记录的用户ID为42,您希望
照片
的值为
'42.jpg'
?如果是这样,那么您需要在insert向您返回新ID后使用update语句,或者需要在触发器中执行该操作。请参阅如何获取生成的ID,然后在后续语句中使用该值。是的,这就是我现在使用的代码。此外,我还必须在下一个SQL语句中使用这个id,将文件路径添加到photo字段,从而做更多的工作。但这看起来太复杂了,我希望这应该是一个更方便的决定。
pstmt.execute(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet keys = pstmt.getGeneratedKeys();
keys.next();
int id = keys.getInt();