【问题标题】:Trouble inserting data into a MySQL database将数据插入 MySQL 数据库时遇到问题
【发布时间】:2014-08-04 17:47:33
【问题描述】:

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

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

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

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

这里如果数据保存成功那么记录ID必须是1

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

  2. 现在记录的 id 应该是 1 但 id 是 2。

所以这意味着通过桌面应用程序数据正在保存但隐藏在某个我看不到的地方并且它正在记住 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;

    }

【问题讨论】:

  • [1] 检查您的代码如何提交到数据库并 [2] 发布堆栈跟踪(如果有)
  • @Leo 你是想让我展示我如何连接到数据库的代码吗?
  • user1,这个地方是为了理解问题而不是调试你的代码。你也必须谷歌并找到答案,Leo 告诉你关于提交 DB 的关键词是 autocommit,所以你必须谷歌“jdbc autocommit”并自己学习,我们可以为你提供指导而不是答案

标签: java mysql jdbc phpmyadmin


【解决方案1】:

尝试调试器,如果一切都按预期执行,请检查您的语句的autoCommit 属性(或者我忘记绑定到哪个连接)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2013-07-19
      • 2021-03-22
      • 1970-01-01
      • 2014-07-16
      • 1970-01-01
      相关资源
      最近更新 更多