我正在Netbeans中开发桌面应用程序。我试图将记录插入数据库。我遇到的一个非常奇怪的问题是当我按下保存按钮时没有发生错误,一切都很完美。但是当我检查我的数据库时,那里没有数据。但是当我尝试通过查询直接在 phpmyadmin 中插入数据时,它会在我尝试通过桌面应用程序保存数据之前生成的ID
(自动增量)之后插入记录。我知道这很难解释。让我再给你一些解释
例如我的数据库全部清除,我正在尝试保存我的第一条记录
通过桌面应用程序,我按下了保存按钮
当我检查数据库时,那里没有记录
上面如果数据已成功保存,则记录ID必须为1
但是现在我通过进入phpmyadmin并在sql选项卡中手动输入查询来插入记录
现在记录的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;
}
答案 0 :(得分:0)
尝试调试器,如果所有内容都按预期执行,请检查语句的autoCommit
属性(或连接我忘了它绑定的那个)
答案 1 :(得分:0)
正如你所说,由于自动增量似乎正在发生。看起来自动提交设置为false。您可以尝试通过调用connection.setAutoCommit(true)
在连接级别设置它,或者只能通过调用connection.commit()
为该事务执行此操作。