无法将数据插入MySQL数据库

时间:2014-06-14 07:29:17

标签: java mysql jdbc phpmyadmin

我正在Netbeans中开发桌面应用程序。我试图将记录插入数据库。我遇到的一个非常奇怪的问题是当我按下保存按钮时没有发生错误,一切都很完美。但是当我检查我的数据库时,那里没有数据。但是当我尝试通过查询直接在 phpmyadmin 中插入数据时,它会在我尝试通过桌面应用程序保存数据之前生成的ID(自动增量)之后插入记录。我知道这很难解释。让我再给你一些解释

例如我的数据库全部清除,我正在尝试保存我的第一条记录

  1. 通过桌面应用程序,我按下了保存按钮

  2. 当我检查数据库时,那里没有记录

  3. 上面如果数据已成功保存,则记录ID必须为1

    1. 但是现在我通过进入phpmyadmin并在sql选项卡中手动输入查询来插入记录

    2. 现在记录的id应为1,但ID为2.

    3. 所以这意味着通过桌面应用程序数据可以保存,但隐藏在某个地方,我无法看到,而且还记住了ID。我希望你能解决我的问题。

      如果我按了3次保存按钮,那么我在phpmyadmin中插入一些数据,该记录的ID为4.

      我不知道问题是什么?

      这是我的代码:

          public class DBConnectionManager {
      
          private static String DRIVER_NAME = "com.mysql.jdbc.Driver";
          private static String HOST_NAME = "localhost";
          private static String PORT_NUMBER = "3306";
          private static String DB_NAME = "sales";
          private static String USER_NAME = "root";
          private static String PASSWORD = "";
      
              public static Connection openConnection() throws Exception {
      
                  Class.forName(DRIVER_NAME);
      
                  String jdbcURL = "jdbc:mysql://"+HOST_NAME+":"+PORT_NUMBER+"/"+DB_NAME;
      
                  Connection connection =   DriverManager.getConnection(jdbcURL,USER_NAME,PASSWORD);
                  connection.setAutoCommit(false);    
                  return connection;
             }
          }
      
         public void addSupplierDetail() {
      
              String contact_name = txt_contactName.getText();
              String shop_name = txt_shopName.getText();
              String city = txt_city.getText();
              int phone = Integer.parseInt(txt_phone.getText());
              int mobileNo = Integer.parseInt(txt_mobile.getText());
              String address = txt_address.getText();
      
              Supplier supplier = new Supplier();
              supplier.setContactName(contact_name);
              supplier.setShopName(shop_name);
              supplier.setCity(city);
              supplier.setPhone(phone);
              supplier.setMobileNo(mobileNo);
              supplier.setAddress(address);
      
      
              connection = DBConnectionManager.openConnection();
              SupplierDAO dao = new SupplierDAO(connection);
              try {
      
                  if (dao.addSupplier(supplier)) {
      
                      connection.close();
                      JOptionPane.showMessageDialog(null, "data save");
                      // Dashboard dashboard = new Dashboard();
                      //dashboard.setVisible(true);
      
                  } else {
                      JOptionPane.showMessageDialog(null, "not saved");
      
                  }
      
      
              } catch (Exception e) {
                  JOptionPane.showMessageDialog(null, e);
      
              }
      
      
          }       
      
              public boolean addSupplier(Supplier supplier) throws Exception {
      
              String sql = "INSERT INTO suppliers"
                      + "(sup_name,sup_address,city,mobile_no,phone,shop_name)"
                      + "VALUES (?,?,?,?,?,?)";
      
              PreparedStatement ps = connection.prepareStatement(sql);
      
                      ps.setString(1, supplier.getContactName());
                      ps.setString(2, supplier.getAddress());
                      ps.setString(3, supplier.getCity());
                      ps.setInt(4, supplier.getMobileNo());
                      ps.setInt(5, supplier.getPhone());
                  ps.setString(6, supplier.getShopName());
                  System.out.println(ps);
                  int rowscount = ps.executeUpdate();
                      System.out.println("no of rows updated: " + rowscount);
                  ps.close();    
                  return rowscount > 0;
      
          }
      

2 个答案:

答案 0 :(得分:0)

尝试调试器,如果所有内容都按预期执行,请检查语句的autoCommit属性(或连接我忘了它绑定的那个)

答案 1 :(得分:0)

正如你所说,由于自动增量似乎正在发生。看起来自动提交设置为false。您可以尝试通过调用connection.setAutoCommit(true)在连接级别设置它,或者只能通过调用connection.commit()为该事务执行此操作。