Java 数据库连接 - Sqlite

Java 数据库连接 - Sqlite

复制代码
PS:
1. 连接依赖库:[sqlite-jdbc-xxx.jar](https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc)(根据连接的数据库版本选择)
2. 支持一次连接执行多次sql语句;
3. 仅本地连接;



使用说明:
java 复制代码
public static void main(String[] args) {
    SqliteManager dbManager = SqliteManager.getInstance();
    dbManager.connectDB();
    //执行的sql语句:数据表得存在
    String sql = "select * from M3u8Task";
    test(dbManager.exeQuery(sql));
    //...可执行多条 sql 语句
    //执行完后记得关闭连接
    dbManager.closeDB();
}

//遍历打印返回数据表属性及数值
private static void test(ResultSet rs) {
    ResultSetMetaData rsmd;
    try {
        rsmd = rs.getMetaData();//获取属性名
        String[] arr = new String[0];
        if (rsmd != null) {
            int count = rsmd.getColumnCount();//统计属性个数
            arr = new String[count];
            for (int i = 1; i <= count; i++) {
                arr[i - 1] = rsmd.getColumnName(i);//把属性名输入arr
                System.out.print(rsmd.getColumnName(i) + "  ");//输出属性名
            }
        }
        System.out.println();
        while (rs.next()) {
            for (String s : arr) {
                System.out.print(rs.getString(s) + "  ");
            }
            System.out.println();//控制格式
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
SqliteManager.java
java 复制代码
package util;

import java.sql.*;

/**
 * sqlite 数据库连接控制器
 * sqlite-jdbc-3.32.0.1.jar
 */
public class SqliteManager {
    // 静态成员 支持单例模式
    private static SqliteManager instance = null;
    private Connection connection = null;//连接数据库
    private Statement statement = null;//用于执行sql命令
    private String path;//数据库文件路径
    private boolean isConnected;//连接状态

    // 单例模式
    public static SqliteManager getInstance() {
        if (instance == null) {
            synchronized (SqliteManager.class) {
                if (instance == null) {
                    instance = new SqliteManager();
                }
            }
        }
        return instance;
    }

    public SqliteManager() {
        isConnected = false;
        try {
            Class.forName("org.sqlite.JDBC");//加载数据库驱动
        } catch (Exception e) {
            e.printStackTrace();
        }

        //默认地址:程序打包后访问路径有变化
        this.path = Constants.BOOL.IS_RELEASE ? "db/M3u8.sqlite" : "./MFrame/res/db/M3u8.sqlite";
    }

    //1. 连接数据库
    public boolean connectDB() {
        if (CommonUtil.isEmpty(path)) {
            return false;
        }
        if (isConnected) {
            return true;
        }
        try {
            String url = "jdbc:sqlite:" + path;   //定义连接数据库的url(url:访问数据库的URL路径)
            connection = DriverManager.getConnection(url);    //获取数据库连接
            statement = connection.createStatement();//得到Statement实例
            CommonUtil.printLog("数据库连接成功...");
        }
        //捕获异常信息
        catch (SQLException e) {
            e.printStackTrace();
            statement = null;
            isConnected = false;
        }
        return isConnected;
    }

    //2. 关闭连接
    public void closeDB() {
        try {
            if (statement != null) {
                statement.close();
                statement = null;
            }
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        isConnected = false;
        CommonUtil.printLog("关闭数据库连接!");
    }

    //3. 查询操作 -> 返回查询结果
    public ResultSet exeQuery(String sql) {

        ResultSet rs = null;
        try {
            if (statement != null) {
                rs = statement.executeQuery(sql);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }

    //4. 更新操作 -> 返回查询结果
    //return: (1) the row count for SQL Data Manipulation Language (DML) statements
    //		  (2) 0 for SQL statements that return nothing
    public int exeUpdate(String sql) {
        int result = 0;
        try {
            if (statement != null) {
                result = statement.executeUpdate(sql);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return result;
    }
}
相关推荐
SelectDB技术团队2 分钟前
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
大数据·数据库·数据仓库·人工智能·ai·数据分析·湖仓一体
冷凝女子2 分钟前
【QT】获取文件路径中的文件名,去掉后缀,然后提取文件名中的数字
开发语言·数据库·qt
Y第五个季节4 分钟前
Redis - HyperLogLog
数据库·redis·缓存
ChinaRainbowSea17 分钟前
1. 初始 RabbitMQ 消息队列
java·中间件·rabbitmq·java-rabbitmq
Allen Bright26 分钟前
【MySQL基础-20】MySQL条件函数全面解析:提升查询逻辑的利器
数据库·mysql
lmryBC4926 分钟前
golang接口-interface
java·前端·golang
ゞ 正在缓冲99%…27 分钟前
leetcode75.颜色分类
java·数据结构·算法·排序
橘猫云计算机设计39 分钟前
基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·考研·django·毕业设计
时光呢44 分钟前
JAVA常见的 JVM 参数及其典型默认值
java·开发语言·jvm
Justice link1 小时前
企业级NoSql数据库Redis集群
数据库·redis·缓存