更新查询在java swing中不起作用

更新查询在java swing中不起作用,java,swing,ms-access-2007,database-connection,Java,Swing,Ms Access 2007,Database Connection,我正在用JavaSwing开发一个项目医院管理系统 在更新页面上,有各种文本字段、文本区域、组合框以及MS Access表中相应的各种列(名为patient) 数据库中只有三列接受数值,它们是roomno、contact和patid,从textField_2、textField_3和comboBox_2获取它们的值 现在的问题是,每当我填写完所有信息后按下更新按钮时,就会显示一条错误消息,如 java.sql.SQLException:[Microsoft][ODBC Microsoft Acc

我正在用JavaSwing开发一个项目医院管理系统

在更新页面上,有各种文本字段、文本区域、组合框以及MS Access表中相应的各种列(名为patient)

数据库中只有三列接受数值,它们是roomno、contact和patid,从textField_2、textField_3和comboBox_2获取它们的值

现在的问题是,每当我填写完所有信息后按下更新按钮时,就会显示一条错误消息,如

java.sql.SQLException:[Microsoft][ODBC Microsoft Access驱动程序]数据 条件表达式中的类型不匹配

执行ps.executeUpdate时

我已经检查了100次,但它仍然显示错误消息。请提前帮助和感谢

if (ae.getActionCommand()=="UPDATE")
        {
            str1=textField_2.getText();             // Room no.
            str2=textField_3.getText();             // Contact no.
            str3=""+comboBox_2.getSelectedItem();   //ID

            s1=textField.getText();     //name
            s2=textField_7.getText();   //address   
            s4=textArea.getText();      //history
            s3=""+comboBox.getSelectedItem();       // blood group
            s5=""+comboBox_1.getSelectedItem();     //type of room          

            s7=textField_4.getText();   //  date of addmission(doa)
            s8=textField_5.getText();   //  date of birth(dob)
            s9=textArea_2.getText();        //  current problem
            s10=textField_6.getText();  //  doctor
            if (str1.equals("") || str2.equals(""))
            {
                JOptionPane.showMessageDialog(null,"PLEASE COMPLETE THE FORM.");
            }
            else if (s1.equals("") || s2.equals("") || s4.equals("") || s5.equals("") || s6.equals("") || s7.equals("") || s8.equals("") || s9.equals("") || s10.equals(""))
            {
                JOptionPane.showMessageDialog(null,"PLEASE COMPLETE THE FORM.,");
            }
            else 
            {           
                try
                {                   
                    if (!(str1.matches("[0-9]+")) && !(str2.matches("[0-9]+")))
                    {
                        JOptionPane.showMessageDialog(null,"ROOM NO. AND CONTACT MUST CONTAIN DIGITS.");
                    }
                    else if (!(str1.matches("[0-9]+")))
                    {
                        JOptionPane.showMessageDialog(null,"ROOM NO. MUST CONTAIN DIGITS.");
                    }
                    else if (!(str2.matches("[0-9]+")))
                    {
                        JOptionPane.showMessageDialog(null,"CONTACT MUST CONTAIN DIGITS.");
                    }   
                    else if (str2.length() != 10)
                    {
                        JOptionPane.showMessageDialog(null,"PLEASE ENTER VALID MOBILE NUMBER.");
                    }
                    else 
                    {
                        Connection con;
                        PreparedStatement ps;
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                        con=DriverManager.getConnection("jdbc:odbc:hos_man");

                        ps=con.prepareStatement("update patient set sname='"+s1+"', address='"+s2+"', bloodgrp='"+s3+"', history='"+s4+"', roomtype='"+s5+"', roomno="+str1+", contact="+str2+", doa='"+s7+"', gender='"+s6+"', dob='"+s8+"', problem='"+s9+"', doctor='"+s10+"' where patid="+str3);

                        ps.executeUpdate();  //ERROR MESSAGE

                        con.close();
                        ps.close();
                        JOptionPane.showMessageDialog(null,"DATA MODIFIED SUCCESSFULLY.");

                        textField_2.setText("");
                        textField_3.setText("");            

                        textField.setText("");
                        textField_7.setText("");            
                        textArea.setText("");           

                        comboBox.setSelectedItem("A-ve");
                        comboBox_1.setSelectedItem("Deluxe");                   

                        rdbtnMale.setSelected(true);            

                        textField_4.setText("");
                        textField_5.setText("");
                        textArea_2.setText("");
                        textField_6.setText("");
                        comboBox_2.setSelectedIndex(0);
                    }
                }               
                catch (Exception e)
                {
                    System.out.println("Exception="+e);
                }                               
            }                       
        }

PreparedStatement用于为查询提供动态参数。使用语句代替PreparedStatement

如果您想使用准备好的语句,那么

ps=con.prepareStatement("update patient set sname=?, address=?, bloodgrp=?, history=?, roomtype=?, roomno=?, contact=?, doa=?.................);
ps.setString(1,s1);

...
..
.

ps.executeUpdate();

先用我没弄明白的。请详细说明。阅读链接教程,你没有按预期的方式使用Prepred语句……好的,我明白你的意思了。我知道数据库连接有几种方法。但关键是为什么我的代码显示错误消息,而另一个带有小数据库的更新程序正在成功执行。由于我是一个初学者,我不容易采用几种方法。如果您能更正此代码,我们将不胜感激。您如何知道是数值导致了错误,问题还在于日期值?简单的解决方案是设置一个测试,并分别测试每个参数,逐渐添加一个新参数,直到它出现故障……感谢您的帮助,但如果您能为我编写完整的查询,那就太好了。我试图根据此方法更新我的程序,但它不起作用。请帮助。ps=con.prepareStatementupdate患者集sname=?,地址=?,血型=?,历史=?,房间类型=?,房间号=?,联系人=?,doa=?,性别=?,dob=?,问题=?,医生=?其中patid=?;如果仍然出现错误,请发布您的错误。问题已解决。但由于我是一个初学者,我在一个大的两难境地,我应该使用哪种方法。第一个是我在问题中写的,从一开始我就一直在使用这个方法,或者是你今天告诉我的第二个方法。请帮助。请阅读此内容以了解何时使用哪个界面。