Java 在多个更新查询中使用的textfield.getText在第二个查询中返回null

Java 在多个更新查询中使用的textfield.getText在第二个查询中返回null,java,sql,oracle,Java,Sql,Oracle,我在几个查询中使用的textField.getText()有问题,所以在第二个查询中,textField.getText()返回空值,不能保存在数据库中 这是我的“保存”按钮执行的操作代码 if (evt.getSource() == btn_save_project) { try{ Statement state = DBConnection.getInstance().createStatement();

我在几个查询中使用的textField.getText()有问题,所以在第二个查询中,textField.getText()返回空值,不能保存在数据库中

这是我的“保存”按钮执行的操作代码

if (evt.getSource() == btn_save_project) {
            try{
                Statement state = DBConnection.getInstance().createStatement();

                String query1 = "insert into projet values(pro_sequence.nextval,"
                + " '"+txt_projet.getText()+"', (select id_mission from mission "
                + "where nom_mission = '"+txt_mission.getText()+"'))";

                String query2 = "insert into date_etat values('"+txt_date.getText()+"')";

                String query3 = "insert into etat_de_projet values((select "
                + "pro_sequence.currval from dual), (select id_etat from etat where "
                + "nom_etat = '"+cmb_etat.getSelectedItem().toString()+"', '"+txt_date.getText()+"'";

                System.out.println(query1+"\n"+query2+"\n"+query3);

                state.executeUpdate(query1);
                state.executeUpdate(query2);
                state.executeUpdate(query3);

            }catch(Exception e){
                e.printStackTrace();
            }




        }
当我执行时,它在控制台中显示以下内容

insert into projet values(pro_sequence.nextval, 'random', (select id_mission from mission where nom_mission = 'Maintenance'))
insert into date_etat values('')
insert into etat_de_projet values((select pro_sequence.currval from dual), (select id_etat from etat where nom_etat = 'Debut', ''

java.sql.SQLIntegrityConstraintViolationException: ORA-01400: impossible d'insérer NULL dans ("MYPROJECT"."DATE_ETAT"."ETAT_DATE")
最后一行告诉我们不可能在date_etat中插入空值


有什么帮助吗?

嗯,txt\U日期是空的。用你发布的代码,我们无法说出更多。这段代码根本不安全(只要想想如果在其中一个文本字段中有一个引号会发生什么情况)。使用准备好的语句:。不要将数据库访问代码与GUI代码混用。把数据库访问代码放在一个单独的类中。谢谢@JB Nizet的建议我完全同意你将数据库代码与gui代码分开,但有时我们需要刚刚插入上一个命令中的文本,但只需稍加修改。即使文本字段显示文本,但它们是空的,那么如何在不重新键入所有文本字段的情况下将上一次插入使用到实际插入中?我不理解您的问题。hi@JB Nizet我的问题是假设我创建了一个表create table person(id数字(6)主键,名称varchar2(20),city varchar2(20))我将把gui中的数据插入数据库,这就是代码
插入个人值(seq.nextval,'textField1.getText()','textField2.getText()'))
假设第一个人和第二个人拥有相同的城市,因此我们不会在gui的下一次插入中更改城市名称,但问题是,在第一次插入文本字段后,文本字段变为空。文本字段本身不会变为空。插入一行不会清除文本字段。如果不希望在插入后清除文本字段,则不要清除它们。这与GUI和数据库代码的分离无关。