如何将 SQLite 与 Java 连接起来?

Posted

技术标签:

【中文标题】如何将 SQLite 与 Java 连接起来?【英文标题】:How to connect SQLite with Java? 【发布时间】:2010-12-04 06:29:32 【问题描述】:

我正在使用一个简单的代码从 Java 应用程序访问 SQLite 数据库。 我的代码是

 import java.sql.Connection;  
 import java.sql.DriverManager;  
 import java.sql.ResultSet;  
 import java.sql.Statement;  
 public class ConnectSQLite 
   
  public static void main(String[] args) 
    
     Connection connection = null;  
     ResultSet resultSet = null;  
     Statement statement = null;  

     try 
       
         Class.forName("org.sqlite.JDBC");  
         connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");  
         statement = connection.createStatement();  
         resultSet = statement  
                 .executeQuery("SELECT EMPNAME FROM EMPLOYEEDETAILS");  
         while (resultSet.next()) 
           
             System.out.println("EMPLOYEE NAME:"  
                     + resultSet.getString("EMPNAME"));  
           
      
     catch (Exception e) 
       
         e.printStackTrace();  
     
     finally 
       
         try 
           
             resultSet.close();  
             statement.close();  
             connection.close();  
          
         catch (Exception e) 
           
             e.printStackTrace();  
           
       
   
  

但是这段代码给出了一个例外,比如

java.lang.ClassNotFoundException: org.sqlite.JDBC

我该如何解决这个问题,请帮助我。

【问题讨论】:

我猜你没有把 SQLite jar 放在类路径中 【参考方案1】:

您的类路径中需要有一个 SQLite JDBC 驱动程序。

Taro L. Saito (xerial) 分叉了 Zentus 项目,现在以 sqlite-jdbc 的名义维护它。它捆绑了主要平台的原生驱动程序,因此您无需单独配置它们。

【讨论】:

我正在使用这个驱动程序,并且工作正常。但是为什么它在创建时没有压缩数据库。使用 FireFox sqlite 插件数据库从 11.5MB 压缩到 11.3MB。如何用 java 做到这一点。 @Dyapa 你需要定期运行VACUUM;因为 JDBC 实际上并没有解释 SQL(出于非常充分的理由),所以只需将其发送过来。或者对每个连接使用编译指示以在自动真空模式下运行。 @DonalFellows 可以解释一下如何通过 java 运行 VACUUM。 对于 Tomcat 遇到此问题的用户,需要将此 jar 放入相应 Tomcat 版本的 lib 文件夹中。 Tomcat 也需要重新启动。在 Web 应用程序中,jar 也需要放入 WEB-INF lib 文件夹中。您不需要将其添加到构建路径中,因为将其放在 WEB-INF lib 文件夹中会自动将其放置在那里。 @androidAddict 谢谢兄弟,你节省了我的时间 :)【参考方案2】:

如果您使用的是 netbeans 下载 sqlitejdbc driver 右键单击 Project 窗口中的 Libraries 文件夹,然后选择 Add Library , 然后点击创建按钮输入库名称(SQLite)并点击确定

您必须将 sqlitejdbc 驱动程序添加到类路径中,单击 添加 Jar/Folder.. 按钮并选择您之前下载的 sqlitejdbc 文件 点击确定,您就可以开始了!

【讨论】:

因为这个问题我很挣扎。我是 Java 新手并使用 Netbeans。这是一种挫败感。最后,你的回答拯救了我的一天。【参考方案3】:

如果您使用Netbeans,则使用Maven 添加库更容易。我尝试过使用上述解决方案,但没有成功。

<dependencies>
    <dependency>
      <groupId>org.xerial</groupId>
      <artifactId>sqlite-jdbc</artifactId>
      <version>3.7.2</version>
    </dependency>
</dependencies>

我添加了Maven 依赖,java.lang.ClassNotFoundException: org.sqlite.JDBC 错误消失了。

【讨论】:

【参考方案4】:

我正在使用 Eclipse,我复制了您的代码并得到了同样的错误。然后我打开了项目属性-> Java 构建路径-> 库-> 添加外部 JAR... c:\jrun4\lib\sqlitejdbc-v056.jar 像魅力一样工作。如果您刚刚复制了 .jar 文件,您可能需要重新启动 Web 服务器。

【讨论】:

【参考方案5】:
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.swing.JOptionPane;
    import org.sqlite.SQLiteDataSource;
    import org.sqlite.SQLiteJDBCLoader;

    public class Test 

        public static final boolean Connected() 
            boolean initialize = SQLiteJDBCLoader.initialize();

            SQLiteDataSource dataSource = new SQLiteDataSource();
            dataSource.setUrl("jdbc:sqlite:/home/users.sqlite");
            int i=0;
            try 
                ResultSet executeQuery = dataSource.getConnection()
                        .createStatement().executeQuery("select * from \"Table\"");
                while (executeQuery.next()) 
i++;
                    System.out.println("out: "+executeQuery.getMetaData().getColumnLabel(i));

                



             catch (SQLException ex) 
                JOptionPane.showMessageDialog(null, ex);
            

            return initialize;

        

【讨论】:

我使用的是dataSource.setDatabaseName(...),但它不起作用。现在我看到我需要使用dataSource.setUrl(...)。谢谢。 :-)【参考方案6】:

您必须下载 SQLite JDBC 驱动程序并将其添加到您的类路径中。 你可以从这里下载https://bitbucket.org/xerial/sqlite-jdbc/downloads

如果你使用 Gradle,你只需要添加 SQLite 依赖:

dependencies 
    compile 'org.xerial:sqlite-jdbc:3.8.11.2'
 

接下来要做的是初始化驱动程序:

try 
    Class.forName("org.sqlite.JDBC");
 catch (ClassNotFoundException eString) 
    System.err.println("Could not init JDBC driver - driver not found");

【讨论】:

【参考方案7】:
connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");

而不是这个放

connection = DriverManager.getConnection("jdbc:sqlite:D:\\testdb");

【讨论】:

【参考方案8】:

嘿,我在 youtube 上发布了一个关于此的视频教程,你可以检查一下,你可以在这里找到示例代码:

http://myfundatimemachine.blogspot.in/2012/06/database-connection-to-java-application.html

【讨论】:

它有很多不相关的代码来了解一个相对具体的问题。不是说它的视频/代码不好,但不是针对这个问题。【参考方案9】:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;   


public class Connectdatabase 

        Connection con = null;

        public static Connection ConnecrDb()

            try
                //String dir = System.getProperty("user.dir");
                Class.forName("org.sqlite.JDBC");
                Connection con = DriverManager.getConnection("jdbc:sqlite:D:\\testdb.db");
                return con;
            
            catch(ClassNotFoundException | SQLException e)
                JOptionPane.showMessageDialog(null,"Problem with connection of database");
                return null;
            
        

    

【讨论】:

以上是关于如何将 SQLite 与 Java 连接起来?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何将子表与父表 Sqlite 连接起来

如何将 SQLite 数据库与片段结合起来?

如何将 SQlite 数据库连接到 devcpp? [关闭]

如何将postgresql与jmeter连接起来

如何将SQLite3 创建的数据库与android 程序连接

如何修复:Jooq 代码不会从 sql 脚本为内存 db 中的 sqlite 生成 java 代码