将java中的文本条目(char)转换为要在java数据库中使用的整数



我正在为学校项目(matrix PAT)制作数据库系统,我必须在java中制作数据库(为此我使用netbeans),然后我必须创建一个连接到数据的java程序,并能够执行特定的任务,如更改数据库中的数据,显示数据等

我正在创建一种添加新条目的方法,我已经制作了一个Jframe表单(GUI),我正在使用它来做条目,到目前为止一切都很好,除了,当我试图添加条目时,它说我不能将字符变量类型放入具有整数变量类型的列中。我觉得我什么都试过了,但我不知道如何解决这个问题。

这是我的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。sqlsyntaxerroreexception:类型为INTEGER的列不能保存类型为CHAR的值。"

您在语句中放入的一些值被单引号包围。例如,这一行:

            + " '"+PostalCode_field.getText()+"', '"+Charge_field.getText()+"',"

不是所有的数据库都接受用单引号括起来的值作为整数/数字的有效值,所以这应该是:

            + " '"+PostalCode_field.getText()+"', "+Charge_field.getText()+","

但是我强烈建议你使用预备语句。构建这样的语句很容易发生SQL注入,并且使代码难以阅读和调试。预处理语句还会根据值的类型为您处理单引号。

我注意到的第一件事是你在单引号中将PatientID_field.getText()传递给MySQL,而它被声明为INTEGER。你可能在其他领域也有同样的问题;我没有费心去找所有这类问题。我建议您在使用Query之前打印出它的值。然后,您可以看到您在哪里提供了一个字符串,而INSERT语句需要一个整数。

相关内容

  • 没有找到相关文章

最新更新