Java 只向数据库表添加一次值
我必须在SpringMVC中创建一个购物车应用程序。 我在数据库中有这个carentries表,我在其中存储book\u id、id\u carentry和其他字段。我还有一个用户表,在那里我存储id\u user。我的cartentries中有类似的条目,当我单击checkout按钮时,这些条目必须加载到cart表中。 问题是我不知道如何将id_user字段存储到变量中,这样我就不必有这行代码:Java 只向数据库表添加一次值,java,spring,model-view-controller,Java,Spring,Model View Controller,我必须在SpringMVC中创建一个购物车应用程序。 我在数据库中有这个carentries表,我在其中存储book\u id、id\u carentry和其他字段。我还有一个用户表,在那里我存储id\u user。我的cartentries中有类似的条目,当我单击checkout按钮时,这些条目必须加载到cart表中。 问题是我不知道如何将id_user字段存储到变量中,这样我就不必有这行代码: while (resultSet2.next()) 这使得我的代码只执行一次,这样carten
while (resultSet2.next())
这使得我的代码只执行一次,这样cartentries中只有一个条目被加载到cart表中。这是因为resultSet2在表中找不到任何新用户,因为我已登录到单个用户。如何使cartentries中的所有数据进入cart表
这就是功能:
@RequestMapping("/checkout")
public void checkout(@RequestParam String username) {
System.out.println("this is checkout from book controller");
System.out.println("username is " + username);
Connection connection = ConnectToDatabase.createConnection();
try {
PreparedStatement preparedStatement = connection.prepareStatement("select * from cartentries");
ResultSet resultSet = preparedStatement.executeQuery();
PreparedStatement preparedStatement2 = connection.prepareStatement("select id_user from user where username='" + username + "'");
ResultSet resultSet2 = preparedStatement2.executeQuery();
while (resultSet.next()) {
while (resultSet2.next()) {
PreparedStatement preparedStatement1 = connection.prepareStatement("INSERT INTO cart(id_user,id_cartEntry,totalPrice)VALUES(?,?,?)");
preparedStatement1.setInt(1,resultSet2.getInt("id_user"));
preparedStatement1.setInt(2, resultSet.getInt("id_cartEntry"));
preparedStatement1.setInt(3, resultSet.getInt("totalPrice"));
preparedStatement1.executeUpdate();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
我已将您的代码更改为“存储”用户标识(如果找到)
try {
PreparedStatement preparedStatement = connection.prepareStatement("select * from cartentries");
ResultSet resultSet = preparedStatement.executeQuery();
PreparedStatement preparedStatement2 = connection.prepareStatement("select id_user from user where username=?");
preparedStatement2.setString(1, username);
ResultSet resultSet2 = preparedStatement2.executeQuery();
PreparedStatement preparedStatement1 = connection.prepareStatement("INSERT INTO cart(id_user,id_cartEntry,totalPrice)VALUES(?,?,?)");
Integer userId;
if (resultSet2.next()) {
// guess it found at least one user
userId = resultSet2.getInt("id_user");
}
if (userId != null) {
while (resultSet.next()) {
preparedStatement1.setInt(1, userId);
preparedStatement1.setInt(2, resultSet.getInt("id_cartEntry"));
preparedStatement1.setInt(3, resultSet.getInt("totalPrice"));
preparedStatement1.executeUpdate();
}
}
} catch (Exception e) {
e.printStackTrace();
}
我还将您的userid查询更改为使用setString而不是串联。参见SQLInjection
也许您可以将这些语句重构为单独的方法,以便更好地阅读代码
另外,不要忘记添加finally子句并关闭连接(或try with resources),以防止数据库服务器上的资源泄漏。如果找到了用户ID,我已将您的代码更改为“存储”
try {
PreparedStatement preparedStatement = connection.prepareStatement("select * from cartentries");
ResultSet resultSet = preparedStatement.executeQuery();
PreparedStatement preparedStatement2 = connection.prepareStatement("select id_user from user where username=?");
preparedStatement2.setString(1, username);
ResultSet resultSet2 = preparedStatement2.executeQuery();
PreparedStatement preparedStatement1 = connection.prepareStatement("INSERT INTO cart(id_user,id_cartEntry,totalPrice)VALUES(?,?,?)");
Integer userId;
if (resultSet2.next()) {
// guess it found at least one user
userId = resultSet2.getInt("id_user");
}
if (userId != null) {
while (resultSet.next()) {
preparedStatement1.setInt(1, userId);
preparedStatement1.setInt(2, resultSet.getInt("id_cartEntry"));
preparedStatement1.setInt(3, resultSet.getInt("totalPrice"));
preparedStatement1.executeUpdate();
}
}
} catch (Exception e) {
e.printStackTrace();
}
我还将您的userid查询更改为使用setString而不是串联。参见SQLInjection
也许您可以将这些语句重构为单独的方法,以便更好地阅读代码
另外,不要忘记添加finally子句并关闭连接(或try with resources),以防止数据库服务器上的资源泄漏。…为什么不使用JPA!!你可以一次完成shot@YCF_L我该怎么做?@YCF\L也许他是从Java开始的+1 Hibernate/JPA方式。@admlz635,我不知道如何使用它们,我只想要这个简单的东西。。。要获取用户名的id并将其存储到变量中,以便我可以将数据插入购物车表……为什么不使用JPA!!你可以一次完成shot@YCF_L我该怎么做?@YCF\L也许他是从Java开始的+1 Hibernate/JPA方式。@admlz635,我不知道如何使用它们,我只想要这个简单的东西。。。获取用户名的id并将其存储到变量中,以便我可以将数据插入购物车表中…谢谢@admlz635!在插入cart表之前,如何在cart表中检查重复项?在Carentries表中插入之前,您可以检查重复项吗?我的意思是,为什么你可以在那张表上有重复的条目?@admIz635,好吧,签出功能链接到一个按钮,这就是为什么它会在多次按下按钮时创建重复项。这就是为什么我需要在cart表中检查重复项的原因。我认为您可以在执行插入的函数/方法中进行检查,如果项目已经在cart中,则不执行任何操作,否则插入它。可能会添加一个数量字段(在Carentries上)?这样无论你按下按钮多少次,如果该商品在购物车中,只需在数量字段上执行+1即可。谢谢@admlz635!在插入cart表之前,如何在cart表中检查重复项?在Carentries表中插入之前,您可以检查重复项吗?我的意思是,为什么你可以在那张表上有重复的条目?@admIz635,好吧,签出功能链接到一个按钮,这就是为什么它会在多次按下按钮时创建重复项。这就是为什么我需要在cart表中检查重复项的原因。我认为您可以在执行插入的函数/方法中进行检查,如果项目已经在cart中,则不执行任何操作,否则插入它。可能会添加一个数量字段(在Carentries上)?这样无论你按下按钮多少次,如果商品在购物车中,只需在数量字段上执行+1即可。