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 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号