使用自定义方法插入到我的 table 中不起作用,但如果我放入创建连接方法,它就可以正常工作

Inserting into my table using a custom method is not working, but if I put in the create connection method it works fine

使用自定义方法插入我的 table 无效,但如果我放入创建连接方法,它就可以正常工作。

这是我写的插入到table的方法,这个方法在不同的文件中,调用者方法也在不同的文件中。 调用该方法时,它什么都不做,只是停止程序执行而没有错误。

void insertIntoPatientTable(@NotNull Connection conn){
   System.out.println("inside the insert");
   final String insertStatement =
           "INSERT INTO Patients(FIRST_NAME, LAST_NAME, AGE, " +
           "PHONE_NUMBER, NEXT_OF_KIN_NAME, NEXT_OF_KIN_PHONE_NUMBER)" +
           "VALUES( ? , ? , ? , ? , ? , ?)" ;
   try{
       System.out.println("inside try block");
       System.out.println(conn.isClosed());
       PreparedStatement preparedStatement = conn.prepareStatement(insertStatement);
       preparedStatement.setString(1, "John");
       preparedStatement.setString(2, "Doe");
       preparedStatement.setInt(4, 24);
       preparedStatement.setString(3, "will");
       preparedStatement.setInt(5, 34);
       preparedStatement.setInt(6, 14);
       preparedStatement.execute();
       System.out.println("executed");
   }catch (SQLException ex){
           ex.printStackTrace();
   }
}

这是调用它的方法。每次我调用这个方法,它似乎什么也没做:

void createConnection() {
    setPASSWORD(" ");
    try{
        setConn(DriverManager.getConnection(getUrlString().concat(getTIMEZONE()), getUSER(), getPASSWORD()));
        Connection dbConnection = getConn();
        CRUD_Statements patientModel = new CRUD_Statements();

        Statement statement = dbConnection.createStatement();
        String userStatement = patientModel.createPatientTable();
        patientModel.insertIntoPatientTable(dbConnection);
        statement.execute(userStatement);

        List<PatientModel> patient = new ArrayList<>();
    }catch(SQLException ex){
       ex.printStackTrace();
    }
}

我认为你这里有两个问题:

  1. 您在使用 statement.execute(userStatement) 创建 table 之前调用 patientModel.insertIntoPatientTable。如果 table 在您尝试插入之前确实不存在,则 insertIntoPatientTable 将抛出异常,但您正在捕获异常而不显示它。尝试用 ex.printStacktrace()

    替换 ex.getMessage()
  2. 如果insertIntoPatientTable,它会关闭连接,但是你在insertIntoPatientTable returns之后尝试重新使用createConnection中的连接].

因此,请确保记录所有异常,并且在真正完成之前不要关闭连接。

如果您第二次 运行 创建 table,您可能还会遇到问题,因为 table 已经存在。

最后,如果 table 不存在,您需要在尝试访问它之前创建,而不是之后。

已修复。问题出在 get 消息上,我立即打印了 stackTrace,我发现它抛出了 getMessage() 没有选择的错误。显然这是我在 table.

中的数据类型的问题