You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java编写MySQL数据插入测试类运行正常但数据库无变更求助

排查Java写入MySQL无数据的问题

嘿,作为MySQL新手遇到这种情况很正常,我帮你梳理几个关键问题,应该能解决你的问题:

1. 事务未提交(最可能的原因)

JDBC默认情况下,数据库连接的autoCommit属性是false,也就是说你执行完插入语句后,如果不手动提交事务,数据库会自动回滚这个操作,导致你看不到数据。

你需要在st.execute()之后添加一行代码提交事务:

st.execute();
conn.commit(); // 加上这行提交事务
conn.close();

2. SQL语句的语法错误

你的SQL语句里用了value,但MySQL的标准插入语法应该是values(复数形式),虽然有些情况下可能兼容,但这是潜在的语法问题,建议修正:

insert into cxinvoice.invoice_list (number, company, date, payment, quantity, subtotal_five, cgst_five, sgst_five, subtotal_twelve, cgst_twelve, sgst_twelve, total, items)
values (?,?,?,?,?,?,?,?,?,?,?,?,?) -- 把value改成values

3. 数据库连接URL的问题

你的连接URL写的是jdbc:mysql://localhost:3306/cxinvoice.invoice_list,这里的cxinvoice.invoice_list是「数据库名.表名」,但URL里只需要指定数据库名即可,表名应该在SQL语句里指定,所以URL应该修正为:

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/cxinvoice","admin","admin");

4. 资源关闭的最佳实践

为了避免数据库连接泄漏,建议使用try-with-resources语法自动关闭资源,这样即使出现异常,连接和PreparedStatement也能被正确关闭,修改后的完整代码如下:

package climaxinvoice;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Calendar;

public class InsertValues {
    public static void main(String args[]) throws ClassNotFoundException, SQLException {
        // 使用try-with-resources自动关闭连接和PreparedStatement
        try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cxinvoice", "admin", "admin");
             PreparedStatement st = conn.prepareStatement("insert into invoice_list (number, company, date, payment, quantity, subtotal_five, cgst_five, sgst_five, subtotal_twelve, cgst_twelve, sgst_twelve, total, items) values (?,?,?,?,?,?,?,?,?,?,?,?,?)")) {
            
            Class.forName("com.mysql.jdbc.Driver");
            Calendar cdr = Calendar.getInstance();
            java.sql.Date startDate = new java.sql.Date(cdr.getTime().getTime());
            
            st.setInt(1,1);
            st.setString(2,"Climax Exclusive");
            st.setDate(3,startDate);
            st.setString(4,"CASH");
            st.setString(5,"5");
            st.setString(6,"1000");
            st.setString(7,"250");
            st.setString(8,"250");
            st.setString(9,"2000");
            st.setString(10,"750");
            st.setString(11,"750");
            st.setString(12,"3000");
            st.setString(13,"a|b|c|d");
            
            st.executeUpdate(); // 推荐用executeUpdate执行DML语句,返回受影响行数,方便排查
            conn.commit(); // 提交事务
        } catch (Exception e) {
            e.printStackTrace(); // 不要只打印message,打印完整堆栈信息更容易排查问题
        }
    }
}

额外排查点

  • 确认Workbench连接的是同一个本地MySQL实例,并且选中的是cxinvoice数据库
  • 检查表结构是否和你插入的字段匹配,比如number字段是否是INT类型,date是否是DATE类型等

内容的提问来源于stack exchange,提问作者sanjulgupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:35:15