如何在msaccess中插入值以及自动生成的字段



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

当我写插入查询时,如果我取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());
            }

        }

    }             

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

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

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方法中的数字use use表示查询

中占位符的值

参见SQL INSERT INTO语句了解更多信息

您的表包含总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列,你没有在你的表的第一列输入一个值。这里col1, col2等是你的表列名,它们的值你应该插入。

相关内容

  • 没有找到相关文章

最新更新