将文本条目 (char) 转换为 java 中的整数以在 java 数据库中使用
Converting a text entry(char) to an integer in java to be used in a java database
我正在为一个学校项目 (Matric PAT) 创建一个数据库系统,我必须在 java 中创建一个数据库(为此我使用的是 netbeans),然后我必须创建一个 java 连接到数据并能够执行特定任务的程序,例如更改数据库中的数据、显示数据等。
我正在创建一种添加新条目的方法,我制作了一个 Jframe 表单 (GUI),我用它来做条目,到目前为止一切正常,除了当我尝试添加条目时它说我不能将 char 变量类型放入变量类型为整数的列中。我觉得我已经尝试了一切,但我不知道如何解决这个问题。
这是我用来为我正在处理的数据库生成 table 的 SQL 语句:
CREATE TABLE tblPatients
(
Patient_ID integer NOT NULL,
First_Name varchar(25) NOT NULL,
Last_Name varchar(25) NOT NULL,
Date_Of_Birth date,
Sex varchar (6),
Address varchar(25),
City varchar(25),
PostalCode varchar (4),
Charge integer,
Paid BOOLEAN,
Doctor_ID integer NOT NULL,
PRIMARY KEY (Patient_ID),
FOREIGN KEY (Doctor_ID) REFERENCES tblDoctors(Doctor_ID)
)
这是我用来向数据库添加条目的代码:
private void btnAddPatientActionPerformed(java.awt.event.ActionEvent evt) {
try
{
String url = "jdbc:derby://localhost:1527/PAT_DB";
//Only use these if the database has a username or password
//String username = "";
//String password = "";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String Query = "INSERT INTO TBLPATIENTS (PATIENT_ID, FIRST_NAME, LAST_NAME, DATE_OF_BIRTH, SEX, ADDRESS, CITY, "
+ "POSTALCODE, CHARGE, PAID, DOCTOR_ID) VALUES ('"+PatientID_field.getText()+"', "
+ "'"+FirstName_field.getText()+"', '"+LastName_field.getText()+"', "
+ "'"+day_field.getSelectedItem()+month_field.getSelectedItem()+year_field.getSelectedItem()+"',"
+ " '"+Sex_field.getSelectedItem()+"', '"+Address_field.getText()+"', '"+City_field.getText()+"',"
+ " '"+PostalCode_field.getText()+"', '"+Charge_field.getText()+"',"
+ " '"+Paid_field.getSelectedItem()+"', '"+DoctorID_field.getText()+"')";
stmt.execute(Query);
JOptionPane.showMessageDialog(null, "Patient added to the database.");
PatientID_field.setText(null);
FirstName_field.setText(null);
LastName_field.setText(null);
day_field.setSelectedItem("00");
month_field.setSelectedItem("00");
year_field.setSelectedItem("0000");
Sex_field.setSelectedItem("0");
Address_field.setText(null);
City_field.setText(null);
PostalCode_field.setText(null);
Charge_field.setText("0");
Paid_field.setSelectedItem(0);
DoctorID_field.setText(null);
}
catch(SQLException ex)
{
JOptionPane.showMessageDialog(null, ex.toString());
}
}
我会添加我的 GUI 的图片和我收到的错误消息,但我还没有足够的代表,但这是错误消息:"java.sql.SQLSyntaxErrorException: Columns of type 'INTEGER' cannot hold values of type 'CHAR'."
您在语句中输入的某些值用单引号括起来。例如,这一行:
+ " '"+PostalCode_field.getText()+"', '"+Charge_field.getText()+"',"
并非所有数据库都接受用单引号括起来的值作为 integers/numbers 的有效值,所以这应该是:
+ " '"+PostalCode_field.getText()+"', "+Charge_field.getText()+","
但我必须强烈建议您改用 prepared statement。构建这样的语句很容易 SQL 注入,并使代码难以阅读和调试。准备好的语句还会根据值的类型为您处理单引号。
我注意到的第一件事是您在单引号中将 PatientID_field.getText()
传递给 MySQL,而它被声明为 INTEGER
。你可能有其他领域有同样的问题;我没有费心寻找所有此类问题。我建议你在使用它之前打印出 Query
的值。然后您可以看到您在哪里提供字符串,其中 INSERT
语句需要一个整数。
我正在为一个学校项目 (Matric PAT) 创建一个数据库系统,我必须在 java 中创建一个数据库(为此我使用的是 netbeans),然后我必须创建一个 java 连接到数据并能够执行特定任务的程序,例如更改数据库中的数据、显示数据等。
我正在创建一种添加新条目的方法,我制作了一个 Jframe 表单 (GUI),我用它来做条目,到目前为止一切正常,除了当我尝试添加条目时它说我不能将 char 变量类型放入变量类型为整数的列中。我觉得我已经尝试了一切,但我不知道如何解决这个问题。
这是我用来为我正在处理的数据库生成 table 的 SQL 语句:
CREATE TABLE tblPatients
(
Patient_ID integer NOT NULL,
First_Name varchar(25) NOT NULL,
Last_Name varchar(25) NOT NULL,
Date_Of_Birth date,
Sex varchar (6),
Address varchar(25),
City varchar(25),
PostalCode varchar (4),
Charge integer,
Paid BOOLEAN,
Doctor_ID integer NOT NULL,
PRIMARY KEY (Patient_ID),
FOREIGN KEY (Doctor_ID) REFERENCES tblDoctors(Doctor_ID)
)
这是我用来向数据库添加条目的代码:
private void btnAddPatientActionPerformed(java.awt.event.ActionEvent evt) {
try
{
String url = "jdbc:derby://localhost:1527/PAT_DB";
//Only use these if the database has a username or password
//String username = "";
//String password = "";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
String Query = "INSERT INTO TBLPATIENTS (PATIENT_ID, FIRST_NAME, LAST_NAME, DATE_OF_BIRTH, SEX, ADDRESS, CITY, "
+ "POSTALCODE, CHARGE, PAID, DOCTOR_ID) VALUES ('"+PatientID_field.getText()+"', "
+ "'"+FirstName_field.getText()+"', '"+LastName_field.getText()+"', "
+ "'"+day_field.getSelectedItem()+month_field.getSelectedItem()+year_field.getSelectedItem()+"',"
+ " '"+Sex_field.getSelectedItem()+"', '"+Address_field.getText()+"', '"+City_field.getText()+"',"
+ " '"+PostalCode_field.getText()+"', '"+Charge_field.getText()+"',"
+ " '"+Paid_field.getSelectedItem()+"', '"+DoctorID_field.getText()+"')";
stmt.execute(Query);
JOptionPane.showMessageDialog(null, "Patient added to the database.");
PatientID_field.setText(null);
FirstName_field.setText(null);
LastName_field.setText(null);
day_field.setSelectedItem("00");
month_field.setSelectedItem("00");
year_field.setSelectedItem("0000");
Sex_field.setSelectedItem("0");
Address_field.setText(null);
City_field.setText(null);
PostalCode_field.setText(null);
Charge_field.setText("0");
Paid_field.setSelectedItem(0);
DoctorID_field.setText(null);
}
catch(SQLException ex)
{
JOptionPane.showMessageDialog(null, ex.toString());
}
}
我会添加我的 GUI 的图片和我收到的错误消息,但我还没有足够的代表,但这是错误消息:"java.sql.SQLSyntaxErrorException: Columns of type 'INTEGER' cannot hold values of type 'CHAR'."
您在语句中输入的某些值用单引号括起来。例如,这一行:
+ " '"+PostalCode_field.getText()+"', '"+Charge_field.getText()+"',"
并非所有数据库都接受用单引号括起来的值作为 integers/numbers 的有效值,所以这应该是:
+ " '"+PostalCode_field.getText()+"', "+Charge_field.getText()+","
但我必须强烈建议您改用 prepared statement。构建这样的语句很容易 SQL 注入,并使代码难以阅读和调试。准备好的语句还会根据值的类型为您处理单引号。
我注意到的第一件事是您在单引号中将 PatientID_field.getText()
传递给 MySQL,而它被声明为 INTEGER
。你可能有其他领域有同样的问题;我没有费心寻找所有此类问题。我建议你在使用它之前打印出 Query
的值。然后您可以看到您在哪里提供字符串,其中 INSERT
语句需要一个整数。