1

将java表单中的数据插入个人表中的MySql数据库详细信息

但我收到错误列计数与第 1 行的值计数不匹配

我正在使用 Netbeans 6.9、MySql 5.6

我已将 ID 声明为带有主键的 int,Phone 和 mobile 声明为 int,所有其他声明为 char。

 import java.sql.*;
 import javax.swing.*;

  public class Personal_Details extends javax.swing.JFrame{

   Connection conn;
   String url;
   Statement stmt;
   ResultSet rs;

  public javax.swing.table.DefaultTableModel tableview;
    public Personal_Details() {
    initComponents();
          tableview= new javax.swing.table.DefaultTableModel();
          jTable1 = new javax.swing.JTable(tableview);
           tableview.addColumn("ID");
           tableview.addColumn("Name");
           tableview.addColumn("Address");
           tableview.addColumn("Gender");
           tableview.addColumn("Education");
           tableview.addColumn("Phone");
           tableview.addColumn("Mobie");
           tableview.addColumn("DOB");
           jScrollPane1.setViewportView(jTable1);
      try{
      url = "jdbc:mysql:///Details";
      Class.forName("com.mysql.jdbc.Driver");
      conn = DriverManager.getConnection(url,"root","anand");
      stmt = conn.createStatement();

        }catch(Exception e){
     JOptionPane.showMessageDialog(null,e);
    }
    }

    private void btnSubmitActionPerformed(java.awt.event.ActionEvent evt) {                                          
    {
    try{
    stmt.executeUpdate("insert into
    personal(ID,Name,Address,Gender,Education,Phone,Mobile,DOB) values
    ("+tfIDNo.getText()+
         ",'"+tfName.getText()+"','"+tfAddress.getText()+"','"+tfGender.getText()+"','"
         +                                                                        
      "','"+tfEducation.getText()+"',"+tfPhone.getText()+","+tfMobile.getText()+",'"+
     tfDob.getText()+"')");


   rs = stmt.executeQuery("select * from personal where ID="+tfIDNo.getText()+" and   
   Name='"+tfName.getText()+"' and Addess='"+tfAddress.getText()+"'"
         + "' and Gender='"+tfGender.getText()+"' and  
    Education='"+tfEducation.getText()+"' and phone="+tfPhone.getText()+" "
         + " and Mobile="+tfMobile.getText()+" and DOB='"+tfDob.getText()+"'");
    }catch(Exception e){
   JOptionPane.showMessageDialog(null,e);
   }
   }
   }

   public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Personal_Details().setVisible(true);
        }
    });
}

// Variables declaration - do not modify
private javax.swing.JButton btnClear;
private javax.swing.JButton btnClose;
private javax.swing.JButton btnSubmit;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JLabel lblAddress;
private javax.swing.JLabel lblDob;
private javax.swing.JLabel lblDobFormat;
private javax.swing.JLabel lblEducation;
private javax.swing.JLabel lblEnterYourDetails;
private javax.swing.JLabel lblGender;
private javax.swing.JLabel lblIDNo;
private javax.swing.JLabel lblMobile;
private javax.swing.JLabel lblName;
private javax.swing.JLabel lblPhone;
private javax.swing.JTextField tfAddress;
private javax.swing.JTextField tfDob;
private javax.swing.JTextField tfEducation;
private javax.swing.JTextField tfGender;
private javax.swing.JTextField tfIDNo;
private javax.swing.JTextField tfMobile;
private javax.swing.JTextField tfName;
private javax.swing.JTextField tfPhone;
}


  Database - ID, Name, Address, Gender, Education, Phone, Mobile, DOB.
4

2 回答 2

1

用这个更正你的INSERT陈述:

String s = "insert into 
            personal(ID, Name,Address, Gender, Education, Phone, Mobile, DOB) 
            values (" + "'" + t.getText() + "','" + t.getText() + "','" 
            + t.getText() + "','" + t.getText() + "','" + t.getText() + "','"
            + t.getText() + "','" + t.getText() + "','" + t.getText() + "')";

用你的替换我t.getText()的,现在它应该可以工作了。


注意:但我建议您使用PreparedStatementisteadStatement和使用 placeholders ?。这个解决方案更干净、更安全!( SQL injection) 并且更易于阅读。

于 2013-02-17T20:06:00.410 回答
0

@Prince 使用 PreparedStatement 而不是简单的 Statement,因为这会提高程序的性能。像这样:

PreparedStatement Pstatement=Your_Connection_Object.prepareStatement("insert 
into mydb.Stock values(?,?,?,?,?,?,?,?)");

            //Specifying the values of it's parameter
Pstatement.setString(1,tfIDNo.getText());
Pstatement.setString(2,tfName.getText());
Pstatement.setString(3,tfAddress.getText());
Pstatement.setString(4,tfGender.getText());
Pstatement.setString(5,tfEducation.getText());
Pstatement.setString(6,tfPhone.getText());
Pstatement.setString(7,tfMobile.getText());
Pstatement.setString(8,tfDob.getText());

Pstatement.executeUpdate();
         

如您所见,我们正在为值传递参数 (?)。它的值将通过调用 PreparedStatement 的 setter 方法来设置。

于 2021-10-23T09:02:17.780 回答