如何在msaccess

时间:2015-07-27 07:00:24

标签: java netbeans

我在Netbeans中创建了一个包含8列的jForm。我想在运行时插入2到7个字段的值,第一个字段值应该通过数据库自动递增。 我在ms访问中创建一个表,其中第一个字段具有自动编号数据类型。

当我编写插入查询时,如果我带7个问号,并从2传递值,则显示错误"数据库字段值不相同"。 如何做到这一点,第一个字段是自动增量的,下一个字段将插入值.. 这是我的代码......

Connection myconnection= null;
        String mydriver= "sun.jdbc.odbc.JdbcOdbcDriver";
        if((jTextField2.getText().length()==0)||(jTextArea1.getText().length()==0)||(jRadioButton1.getText().length()==0)||(jRadioButton2.getText().length()==0)||(jFormattedTextField1.getText().length()==0)||(jTextField3.getText().length()==0)||(jComboBox1.getSelectedIndex()==0)||(jFormattedTextField3.getText().length()==0)) {
            JOptionPane.showMessageDialog(rootPane, "Please fill all the details");
        }
        else
        {
            try
            {
                Class.forName(mydriver);
                myconnection=DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq= C:\\Documents and Settings\\Administrator\\My Documents\\NetBeansProjects\\DAV REHABILITATION\\Davdb.accdb; Uid=Admin; Pwd=;");
                try
                {
                    String myquery= "insert into Patients values(?,?,?,?,?,?,?)";
                    PreparedStatement mystatement= myconnection.prepareStatement(myquery);
                    mystatement.setString(2,jTextField2.getText());
                    mystatement.setString(3,jTextArea1.getText());
                    if(jRadioButton1.isSelected()) {
                        mystatement.setString(4, "Male");
                    } else if(jRadioButton2.isSelected()) {
                        mystatement.setString(4, "Female");
                    }
                    mystatement.setString(5, jFormattedTextField1.getText());
                    mystatement.setString(6, jTextField3.getText());
                    mystatement.setString(7, jComboBox1.getSelectedItem().toString());
                    mystatement.setString(8, jFormattedTextField3.getText());
                    mystatement.executeUpdate();
                    JOptionPane.showMessageDialog(rootPane,"Data Saved");
                    mainform obj=new mainform();
                    this.setVisible(false);
                    obj.setVisible(true);

                } 
             catch (Exception e)
             {
                    JOptionPane.showMessageDialog(rootPane, "Error in Query. " + e.getMessage());
                }


        }
            catch(Exception e)
            {
                JOptionPane.showMessageDialog(rootPane, " Error Occured.Connection wrong" + e.getMessage());
            }


        }



    }             

2 个答案:

答案 0 :(得分:1)

  

如何做到这一点,第一个字段是自动增量的,下一个字段将插入值

您不需要指定要插入的列(和顺序)

String myquery= "insert into Patients (column1, column2, column3, column4, column5, column6) values(?,?,?,?,?,?,?)";

mystatement.setString(1,jTextField2.getText());
mystatement.setString(2,jTextArea1.getText());
if(jRadioButton1.isSelected()) {
    mystatement.setString(3, "Male");
} else if(jRadioButton2.isSelected()) {
    mystatement.setString(3, "Female");
}
mystatement.setString(4, jFormattedTextField1.getText());
mystatement.setString(5, jTextField3.getText());
mystatement.setString(6, jComboBox1.getSelectedItem().toString());
mystatement.setString(7, jFormattedTextField3.getText());
mystatement.executeUpdate();

其中columnX是列的名称

setX方法中使用次数指示查询中占位符的值

有关详细信息,请参阅The SQL INSERT INTO statement

答案 1 :(得分:0)

您的表格中包含总共8列。

您的查询错误

String myquery= "insert into Patients values(?,?,?,?,?,?,?)";//only 7 indexes

您必须写respective column names,因为您没有在此处输入所有列值。

   String myquery= "insert into Patients(col1,col2,col3,col4,col5,col6,col7) values(?,?,?,?,?,?,?)";

由于您只将值传递到7列,而您没有在表格的第一列中输入值。 此处col1col2等是您的表列名称,您希望插入其值。