JDBC传数据时出错

用JDBC向MySQL数据库中插入数据时出错,我插入的是stu2的数据,实际却变成了stu3

  studentDao studentDao = new studentDao();
        Student stu = new Student(1,"hehe");
        Student stu1 = new Student(2,"wuhu");
        Student stu2 = new Student(3,"lala");
        Student stu3 = new Student(4,"qifei");

       //studentDao.addStudent(stu);
        studentDao.addStudent(stu2);

addStudent代码

 public static  boolean addStudent(Student stu){
        boolean flag = false;
        PreparedStatement pstmt = null;
        Connection conn = JDBCUtil.getConnection();

        String sql = "insert into students values(?,?)";

        try {
            pstmt = conn.prepareStatement(sql);

            pstmt.setInt(1,stu.getId());
            pstmt.setString(2,stu.getName());

            int count = pstmt.executeUpdate();
            if(count > 0){
                System.out.println("insert succesfuly!");
                flag = true;
            }
     } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCUtil.release(conn,pstmt);
        }

        return flag;
    }

同时在这之前我尝试同时添加stu2和stu3的数据之后报错
[](


```java

//studentDao.addStudent(stu2);
        studentDao.addStudent(stu3);

JDBCutil

```java
public class JDBCUtil {

    private static String url = "jdbc:mysql://localhost:3306/joe";
    private static String username = "root";
    private static String password = "123456";
    private static Connection conn = null;

    static {

        try {
             conn = DriverManager.getConnection(url, username, password);
             if (conn != null){
                 System.out.println("Connection Succeseful!");
             }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    public static Connection getConnection(){
        return conn;
    }

    public static void release(Connection conn, PreparedStatement pstmt, ResultSet res){

        if(res != null){
            try {
                res.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            res = null;
        }

        release(conn,pstmt);

    }

    public static void release(Connection conn,PreparedStatement pstmt){

        if(pstmt != null){
            try {
                pstmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            pstmt = null;
        }

      if(conn != null){
          try {
              conn.close();
          } catch (SQLException throwables) {
              throwables.printStackTrace();
          }
          conn = null;
      }
    }

}

img

连续插入stu2和stu3的数据时,stu2的数据并没有被成功插入,而是直接插入了stu3的数据。

解决方法:在插入数据之前先执行一条删除语句,清空表中的数据。可以在addStudent方法中的try块的开头加入如下代码:

String deleteSql = "delete from students";
pstmt = conn.prepareStatement(deleteSql);
pstmt.executeUpdate();

【以下回答由 GPT 生成】

问题分析:

根据提供的代码,我们可以看出在插入数据时,数据并没有被改变,而是插入了错误的数据。同时,在插入stu3的数据后,发生了错误。

解决方案:

  1. 确保数据库连接正常:首先要检查数据库连接是否正常,可以测试连接是否成功。如果连接失败,可以检查数据库是否启动,并检查连接字符串、用户名和密码是否正确。

  2. 检查数据类型和参数:确认表结构和插入参数是否一致。表中的数据类型与插入参数的数据类型必须匹配。可以通过使用数据库客户端或查询数据库表结构的方式确认。

  3. 检查SQL语句是否正确:确认SQL语句是否正确。可以通过输出SQL语句进行检查,确保字段名称、表名和语法正确。

  4. 检查Java对象是否创建正确:确保Java对象的创建和赋值正确。可以在代码中打印对象的值,确认对象的值是否正确。

  5. 检查数据库自增字段设置:如果数据库表中的id字段是自增的,可以尝试将插入语句中的id字段移除,让数据库自动生成唯一的id值。

  6. 检查数据库事务:如果使用了数据库事务,需要确认事务的提交或回滚是否正确。

  7. 检查并修复错误处理:在代码中的catch块中,需要添加更详细的错误处理,可以输出或记录错误信息。同时,可以在finally块中添加释放资源的代码,以确保连接和资源能够正确释放。

代码修改建议:

在studentDao类的addStudent方法中,将SQLException的异常信息打印或记录下来,以便更好地排查错误。同时,将调用JDBCUtil类的getConnection方法和release方法的代码放到try-catch-finally块中,确保资源的正常释放。

public static boolean addStudent(Student stu) {
    boolean flag = false;
    PreparedStatement pstmt = null;
    Connection conn = null;

    String sql = "insert into students values(?,?)";

    try {
        conn = JDBCUtil.getConnection();
        pstmt = conn.prepareStatement(sql);

        pstmt.setInt(1, stu.getId());
        pstmt.setString(2, stu.getName());

        int count = pstmt.executeUpdate();
        if (count > 0) {
            System.out.println("插入成功!");
            flag = true;
        }
    } catch (SQLException throwables) {
        throwables.printStackTrace();
        // 添加更详细的错误处理,如记录日志
    } finally {
        JDBCUtil.release(conn, pstmt);
    }

    return flag;
}

补充建议:

当插入操作出错时,可以尝试打开MySQL数据库的错误日志,查看是否有相关的错误信息。同时,可以在代码中打印或记录更详细的错误信息,以便更好地定位和解决问题。

完成上述修改后,重新运行代码,如果问题仍然存在,请提供错误信息以便进一步分析和解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^