将数据库从 MySQL 更改为 SQLite 后出现 Java 项目错误

Posted

技术标签:

【中文标题】将数据库从 MySQL 更改为 SQLite 后出现 Java 项目错误【英文标题】:Java Project Error after changing database from MySQL to SQLite 【发布时间】:2013-12-02 16:12:48 【问题描述】:

我正在学习java 我使用 mysql 创建了简单的 (CRUD) java 程序,它工作正常

我想尝试使用相同的数据库切换到 SQLite(我已经将 mysql 数据库转换为 sqlite) 我正在使用这个 JDBC 驱动程序:https://bitbucket.org/xerial/sqlite-jdbc 但不知何故,netbeans 无法完成运行我的程序(尽管之前没有错误) 我在输出栏上有很多新错误:
java.lang.ClassNotFoundException: org.sqlite.JDBCException in thread "AWT-EventQueue-0" java.lang.NullPointerException
at tes.MainForm.Tampil(MainForm.java:46)
at tes.MainForm.<init>(MainForm.java:85)
at tes.MainForm$4.run(MainForm.java:329)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)`

我的 DBConnection 类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConnection    
Connection c = null;
Statement script;

public DBConnection()
    try
        Class.forName("org.sqlite.JDBC");
 //  Class.forName("com.mysql.jdbc.Driver");
   // c = DriverManager.getConnection("jdbc:ucanaccess://c:/asa.accdb");
 c = DriverManager.getConnection("jdbc:sqlite:C:/titit2.db");
   // c = DriverManager.getConnection("jdbc:mysql://localhost:3306/titit","root","root");
    script = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    System.out.println("Koneksi Sukses");
    catch(  SQLException | ClassNotFoundException ex)
    System.err.print(ex);
    


在我的 mainform 类中(第 23-46 行)

    private void Tampil()
    try
        int row = tabel.getRowCount();
        for(int i=0;i<row;i++)
            tabeldata.delete(0, row);
        
        String sql;
        sql = "SELECT * from asu";
            ResultSet rs = c.script.executeQuery(sql);

        while(rs.next())
            DataPegawai d = new DataPegawai();
            d.setNo(rs.getInt("no"));
            d.setNip(rs.getInt("nip"));
            d.setNama(rs.getString("nama"));
            d.setDivisi(rs.getString("divisi"));
            d.setLevel(rs.getInt("level"));
            tabeldata.add(d);
        
    catch(SQLException e)
        System.err.print(e);
    

【问题讨论】:

【参考方案1】:

ClassNotFoundException 是一个您可以在运行时遇到的异常。请参阅:http://docs.oracle.com/javase/7/docs/api/java/lang/ClassNotFoundException.html,其中说明了可能的原因:

当应用程序尝试通过其字符串名称加载类时抛出:

Class 类中的 forName 方法。 ClassLoader 类中的 findSystemClass 方法。 ClassLoader 类中的 loadClass 方法。

所以从我的角度来看,问题在于您没有将它正确地添加到 netbeans 到类路径中。

此外,您应该检查您是否使用了稳定发布的驱动程序版本。我建议使用:sqlite-jdbc-3.7.2.jar

【讨论】:

谢谢,我想我得到了错误的版本,但我得到了新的错误:java.sql.SQLException: SQLite only supports TYPE_FORWARD_ONLY cursorsException in thread "AWT-EventQueue-0" java.lang.NullPointerException at tes.MainForm.Tampil(MainForm.java:31) at tes.MainForm.&lt;init&gt;(MainForm.java:52) etc.. @Adamanusia 请为此提出新问题。因为这对我来说听起来很固定。

以上是关于将数据库从 MySQL 更改为 SQLite 后出现 Java 项目错误的主要内容,如果未能解决你的问题,请参考以下文章

将 Django 开发数据库从默认 SQLite 更改为 PostgreSQL

将 SQLite 数据库模式更改为读写

将 Django 数据库:SQLITE3 更改为 MARIADB

当我在 AWS 中从本地 Homestead 更改为 prod 时,Laravel 引发 SQLite 错误

NameError:设置更改为 mysql 后未定义名称“_mysql”

在新的 Rails 项目中从 SQLite 更改为 PostgreSQL