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

运行Java代码时出现ClassCastException类型转换异常求助

问题排查:java.lang.ClassCastException: org.sqlite.Conn 无法转换为 com.mysql.jdbc.Connection

错误信息

java.lang.ClassCastException: class org.sqlite.Conn cannot be cast to class com.mysql.jdbc.Connection (Connection are unnamed module)

核心原因

你的代码存在跨数据库驱动类型混用的问题:DbConnect.connect()方法实际返回的是SQLite数据库的连接实例(org.sqlite.Conn),但你试图将该连接配合MySQL的com.mysql.jdbc.PreparedStatement使用,不同数据库驱动的实现类无法互相强制转换,因此抛出类型转换异常。

另外代码还存在SQL注入风险,直接拼接字符串生成SQL语句是不安全的写法。

解决步骤

方案1:统一使用MySQL数据库

如果你的目标是连接MySQL数据库,按以下步骤修改:

  1. 检查DbConnect类,确保它使用MySQL的JDBC驱动:
    • 驱动类:com.mysql.cj.jdbc.Driver(新版)或com.mysql.jdbc.Driver(旧版)
    • 连接URL格式:jdbc:mysql://主机地址:端口/数据库名?useSSL=false&serverTimezone=UTC
  2. 替换PreparedStatement的导入为标准JDBC接口,避免依赖具体驱动实现:
    // 删除 import com.mysql.jdbc.PreparedStatement;
    import java.sql.PreparedStatement;
    
  3. 修复SQL注入问题,改用参数化查询:
    private void addbtnActionPerformed(java.awt.event.ActionEvent evt) {
        String name = namebox.getText();
        String sql = "INSERT INTO student(name) VALUES(?)";
        try {
            pst = conn.prepareStatement(sql);
            pst.setString(1, name); // 用参数替换字符串拼接
            pst.executeUpdate(); // 执行更新操作推荐用executeUpdate
            JOptionPane.showMessageDialog(null, "Inserted");
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }
    

方案2:统一使用SQLite数据库

如果你的目标是连接SQLite数据库,按以下步骤修改:

  1. 确认DbConnect类使用SQLite的JDBC驱动:
    • 驱动类:org.sqlite.JDBC
    • 连接URL格式:jdbc:sqlite:/本地数据库文件路径/xxx.db
  2. 同样替换PreparedStatement的导入为标准JDBC接口:
    import java.sql.PreparedStatement;
    
  3. 用参数化查询替代SQL字符串拼接(同方案1的SQL写法)。

关键注意事项

  • 永远基于标准JDBC接口(java.sql.Connection、java.sql.PreparedStatement等)编写数据库代码,不要直接使用具体驱动的实现类,避免类型冲突同时提升代码兼容性。
  • 必须杜绝SQL字符串拼接,参数化查询是预防SQL注入的标准做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:27:04