SQLite和Java:判断SQLite中某表是否存在

文本将介绍怎样通过 Java 代码判断在 SQLite 中某个表是否存在。

如果我们需要动态在 SQLite 中创建数据表,此时就需要判断该表在 SQLite 中是否存在。如果不存在,则可以动态创建该表。如果存在,则不创建,如果强制创建,会抛出表已经存在错误信息。

那么,我们要如何去实现判断某个表在 SQLite 数据库中是否存在?需要查询 SQLite 内置的 sqlite_master 表格,该表格结构如下图:

SQLite和Java:判断SQLite中某表是否存在

上图中,各个列的含义如下:

  • type  记录项目的类型,如:table(表格)、index(索引)、view(视图)、trigger(触发器)

  • name  记录项目的名称,如:表名、索引名等

  • tbl_name  记录所从属的表名,如索引所在的表名,对于表来说,该列就是表名本身

  • rootpage  记录项目在数据库页中存储的编号,对于视图和触发器,该列值为 0 或者 NULL

  • sql  记录创建该项目的 SQL 语句,如创建表格的 create table SQL 语句

示例

通过 SQLite 的 Java JDBC 驱动查询在 sqlite_master 表格中是否存在 t_user 表格。代码如下:

package com.hxstrive.sqlite;

import java.sql.*;

/**
 * 怎样判断某个表在 SQLite 中是否存在
 * @author hxstrive.com 2022/9/26
 */
public class SqliteTableExist {

    public static void main(String[] args) throws Exception {
        new SqliteTableExist();
    }

    public SqliteTableExist() throws Exception {
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            // 打开数据库
            Class.forName("org.sqlite.JDBC");
            connection = DriverManager.getConnection("jdbc:sqlite:sqlite_studio.db");
            System.out.println("Opened database successfully");

            // 创建用户表
            statement = connection.prepareStatement(
                    " select count(*) as table_count from sqlite_master " +
                            " where type='table' and name=?");
            statement.setString(1, "t_user");
            resultSet = statement.executeQuery();
            if(resultSet.next()) {
                int count = resultSet.getInt("table_count");
                if(count > 0) {
                    System.out.println("t_user 表存在");
                } else {
                    System.out.println("t_user 表不存在");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(null != resultSet) {
                resultSet.close();
            }
            if(null != statement) {
                statement.close();
            }
            if(null != connection) {
                connection.close();
            }
        }
    }

}

运行示例,输出如下:

Opened database successfully
t_user 表存在
不傲才以骄人,不以宠而作威。——诸葛亮
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号