使用自定义方法插入到我的 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();
}
}
我认为你这里有两个问题:
您在使用 statement.execute(userStatement)
创建 table 之前调用 patientModel.insertIntoPatientTable
。如果 table 在您尝试插入之前确实不存在,则 insertIntoPatientTable
将抛出异常,但您正在捕获异常而不显示它。尝试用 ex.printStacktrace()
替换 ex.getMessage()
如果insertIntoPatientTable
,它会关闭连接,但是你在insertIntoPatientTable
returns之后尝试重新使用createConnection
中的连接].
因此,请确保记录所有异常,并且在真正完成之前不要关闭连接。
如果您第二次 运行 创建 table,您可能还会遇到问题,因为 table 已经存在。
最后,如果 table 不存在,您需要在尝试访问它之前创建,而不是之后。
已修复。问题出在 get 消息上,我立即打印了 stackTrace,我发现它抛出了 getMessage() 没有选择的错误。显然这是我在 table.
中的数据类型的问题
使用自定义方法插入我的 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();
}
}
我认为你这里有两个问题:
您在使用
替换statement.execute(userStatement)
创建 table 之前调用patientModel.insertIntoPatientTable
。如果 table 在您尝试插入之前确实不存在,则insertIntoPatientTable
将抛出异常,但您正在捕获异常而不显示它。尝试用ex.printStacktrace()
ex.getMessage()
如果
insertIntoPatientTable
,它会关闭连接,但是你在insertIntoPatientTable
returns之后尝试重新使用createConnection
中的连接].
因此,请确保记录所有异常,并且在真正完成之前不要关闭连接。
如果您第二次 运行 创建 table,您可能还会遇到问题,因为 table 已经存在。
最后,如果 table 不存在,您需要在尝试访问它之前创建,而不是之后。
已修复。问题出在 get 消息上,我立即打印了 stackTrace,我发现它抛出了 getMessage() 没有选择的错误。显然这是我在 table.
中的数据类型的问题