0
Public void aMethod(String itemName, String theUsersName){  

preparedStatement = conn.prepareStatement("INSERT INTO items  (Owner_ID, Name, State)               VALUES         (?,?,?) ");
preparedStatement.setString(1, "(SELECT id FROM users WHERE username     = ' "+theUsersName+"')");
preparedStatement.setString(2, itemName); 
preparedStatement.setString(3, state);
preparedStatement.executeUpdate();

}

用户名表包含用户名和 id 在这里我给定了 theUsersName 并希望找到该用户名的 id,以设置 Item 表中新项目的 Owner_ID = theUsername 的 id。

4

4 回答 4

3

如果它没有抛出异常,请尝试一下,(否则我将删除它

String query =  "INSERT INTO items  (Owner_ID, Name, State) " +
                "SELECT ID, ? AS Name, ? AS State " +
                "FROM   users " +
                "WHERE  userName = ? " 
preparedStatement = conn.prepareStatement(query);
preparedStatement.setString(1, itemName);
preparedStatement.setString(2, state); 
preparedStatement.setString(3, theUsersName);
preparedStatement.executeUpdate();
于 2013-04-22T06:08:52.067 回答
1

通过将其插入到原始INSERT语句中:

INSERT INTO items (Owner_ID, Name, State)
VALUES (SELECT id FROM users WHERE username = ?, ?,?)

并将第一个参数替换为实际值:

preparedStatement.setString(1, theUsersName);
于 2013-04-22T06:09:01.437 回答
1

你可以这样做:使用INSERT INTO SELECT..

INSERT INTO items  (Owner_ID, Name, State)
SELECT id,?,? FROM users WHERE 
username = ?

或者像这样使用子查询:

INSERT INTO items (Owner_ID, Name, State)
VALUES ((SELECT id FROM users WHERE username = ? LIMIT 1),?,?)

在这里,您必须将限制设置为 1。

于 2013-04-22T06:09:36.067 回答
1

您首先必须从 users 表中获取 Id,然后才能传递它。看看:

preparedStatement = conn.prepareStatement("SELECT id FROM users WHERE username = ' "+theUsersName+"'");
ResultSet rs=preparedStatement.executeQuery();
 if(rs.next())
int id=rs.getInt(1);
preparedStatement.setString(1,id);
于 2013-04-22T06:12:39.140 回答