我在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());
}
}
}
答案 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
列,而您没有在表格的第一列中输入值。
此处col1
,col2
等是您的表列名称,您希望插入其值。