【发布时间】:2017-01-14 10:40:46
【问题描述】:
我正在尝试从 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: Column 'ID' is either not in any table in the FROM list... 但是这个专栏肯定是存在的。错误的原因是什么?
【问题讨论】:
-
无关,但是:请学会使用
PreparedStatement正确。不要将值连接到 SQL 字符串中。请改用占位符 (?)。 -
您的意思是如果新创建的
Users记录的用户ID 为42,您希望photo的值是'42.jpg'?如果是这样,那么您需要一个更新语句在插入返回新 ID 给您,或者您需要在触发器中执行。 -
请参阅stackoverflow.com/questions/1915166/… 了解如何获取生成的 id,然后在后续语句中使用该值。
-
是的,这是我现在使用的代码。此外,我还必须在下一个 SQL 语句中使用此 ID 来将文件路径添加到照片字段中。但它看起来太复杂了,我希望它应该是更方便的决定。