跳转到内容

Java JDBC 使用 SQLite/连接

来自 Wikibooks,开放世界中的开放书籍

假设您的类路径已建立,并且您的 JDK 已准备好,我们可以快速且粗略地尝试创建一个非常简单的数据库,其中只有一个表。由于这是一种可抛弃的“HelloWorld”类固醇迷你应用程序,我们不妨称其为“HelloDatabase”。

您真正需要了解 JDBC 驱动程序的一件事是:它的注册驱动程序名称。对于 SQLite,它是

org.sqlite.JDBC

此值用于在 Java 中注册驱动程序。不同数据库实现的不同 JDBC 驱动程序具有不同的注册驱动程序名称。虽然完全有可能通过编程方式从包含的 jar 文件中发现驱动程序名称,但这超出了本文档的范围,并且可以在互联网上(例如在 [1])快速查找。

现在我们开始构建用于建立数据库连接的 URL 字符串。不同数据库类型的不同 JDBC 具有不同的 URL 定义;SQLite URL 字符串只需要知道它是一个类型为“sqlite”的 jdbc,以及我们要使用的目标数据库的名称。例如,如果我们希望连接到一个名为 _order.db_ 的新数据库,我们需要组成一个字符串,该字符串包含字符串“jdbc”,数据库类型名称(在本例中为“sqlite”)以及数据库的名称,用冒号分隔,即

jdbc:sqlite:order.db

其他示例

jdbc:sqlite://dirA/dirB/dbfile
jdbc:sqlite:/DRIVE:/dirA/dirB/dbfile
jdbc:sqlite:///COMPUTERNAME/shareA/dirB/dbfile

还提供了一个内存选项。


作为此迷你应用程序(以及大多数简单 JDBC 连接器)的最小导入集,您需要以下导入集,如以下代码所示。这两个 .*MetaData 导入很有用,通常在调试和调查目的中是必要的,并且对于抽象和最终减少程序所需的硬编码数量也很方便。

import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DatabaseMetaData;
 
public class HelloDatabase
{
    public static void main (String[] args) throws Exception
    {
        // register the driver 
        String sDriverName = "org.sqlite.JDBC";
        Class.forName(sDriverName);
 
        // now we set up a set of fairly basic string variables to use in the body of the code proper
        String sTempDb = "hello.db";
        String sJdbc = "jdbc:sqlite";
        String sDbUrl = sJdbc + ":" + sTempDb;
        // which will produce a legitimate Url for SqlLite JDBC :
        // jdbc:sqlite:hello.db
        int iTimeout = 30;
        String sMakeTable = "CREATE TABLE dummy (id numeric, response text)";
        String sMakeInsert = "INSERT INTO dummy VALUES(1,'Hello from the database')";
        String sMakeSelect = "SELECT response from dummy";
 
        // create a database connection
        Connection conn = DriverManager.getConnection(sDbUrl);
        try {
            Statement stmt = conn.createStatement();
            try {
                stmt.setQueryTimeout(iTimeout);
                stmt.executeUpdate( sMakeTable );
                stmt.executeUpdate( sMakeInsert );
                ResultSet rs = stmt.executeQuery(sMakeSelect);
                try {
                    while(rs.next())
                        {
                            String sResult = rs.getString("response");
                            System.out.println(sResult);
                        }
                } finally {
                    try { rs.close(); } catch (Exception ignore) {}
                }
            } finally {
                try { stmt.close(); } catch (Exception ignore) {}
            }
        } finally {
            try { conn.close(); } catch (Exception ignore) {}
        }
    }
 
}

您现在还应该发现工作目录中有一个名为 _hello.db_ 的文件(或者您在 URL 的数据库名称组件中为其命名的任何其他名称)。如果您尝试多次运行此代码,您将收到一个 SQL 异常错误,因为您将尝试创建一个已存在的表;您可以删除 .db 文件,或者使用 SQLite 删除该表,或者在尝试创建表之前,在其中插入一个包含删除表语句的新字符串,并使用 stmt.executeUpdate 运行删除字符串...

华夏公益教科书