【发布时间】:2020-03-02 14:43:34
【问题描述】:
我是一个新程序员,我被赋予了创建一个 Subject.java 类的任务,它会在其中询问学生他们正在学习多少科目,然后将科目信息存储到数据库中,但是我当前代码的问题是数据库中只更新了一行。我的代码如下,请帮助我。
System.out.print("\nEnter number of subject: ");
int sub = in.nextInt();
int i=0;
for (i=0; i<sub; i++)
{
System.out.print("\nCode: ");
this.setCode(in.next());
System.out.print("\nName: ");
this.setName(in.next());
System.out.print("\nCredit: ");
this.setCredit(in.nextInt());
// insert into database
ResultSet rs = null;
String sqlInsert = "INSERT INTO subject (code, name, credit) VALUES (?,?,?)";
try (Connection conn = MySQLDB.getConnection();
PreparedStatement pstmt
= conn.prepareStatement(sqlInsert);)
{
// assign parameters for statement
pstmt.setString(1, this.getCode());
pstmt.setString(2, this.getName());
pstmt.setInt (3, this.getCredit());
pstmt.addBatch();
if (pstmt.executeUpdate() == 1)
{
System.out.println("\nNew subject has been created succesfully!");
}
else
{
System.out.println("\nError");
}
}
catch (SQLException ex)
{
System.out.println(ex.getMessage());
}
【问题讨论】:
-
至少,您可能不应该为每一行关闭
Connection,您应该在循环之前打开它并重复使用它来插入每一行,然后一起执行更新。 -
我不明白 ????
-
您对每一行 行 执行
try (Connection conn = MySQLDB.getConnection();。这将连接到数据库并每次关闭它,因此要更新 100 行,您将连接到数据库 100 次并关闭它 100 次。要么就是你放错了},它不像这里出现的那样在你的for循环中。发布完整的方法。 -
为了帮助自己编程和调试,我建议你重构你的代码,遵循每个方法应该负责一个任务的原则。因此,在您的情况下,我建议您使用一种方法来运行并收集用户输入。一旦收集到这些(例如,在 ArrayList
中),然后运行这些输入并将它们添加到批处理中以进行插入。这将帮助您更轻松地缩小调试会话期间出现的问题。