Java 数据库连接 - Sqlite

news2025/1/6 23:21:44

Java 数据库连接 - Sqlite

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用说明:
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
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;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2271383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

组网实训实现

小型单元网络实现 IP划分&#xff1a; 外网:172.1.1.0/24 172.1.2.0/24 内网&#xff1a;基于192.168.3.0/24的子网划分 综合办公楼&#xff1a;192.168.3.00 000000 /26&#xff08;192.168.3.0-192.168.3.63&#xff09; 综合一楼&#xff1a;192.168.3.0000 0000 /28&…

如何在 VSCode 中配置 C++ 开发环境:详细教程

如何在 VSCode 中配置 C 开发环境&#xff1a;详细教程 在软件开发的过程中&#xff0c;选择一个合适的开发环境是非常重要的。Visual Studio Code&#xff08;VSCode&#xff09;作为一款轻量级的代码编辑器&#xff0c;凭借其强大的扩展性和灵活性&#xff0c;受到许多开发者…

UE5动画蓝图

动画蓝图&#xff0c;混合空间&#xff0c;状态机&#xff0c;瞄准偏移&#xff0c;动画蒙太奇&#xff0c;动画混合&#xff0c;骨骼绑定&#xff0c;动画重定向&#xff0c;动画通知&#xff0c;Control Rig…… 虚幻动画模块是一个庞大的系统&#xff0c;大模块里又包含很多…

腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎

在当今数字化时代的汹涌浪潮中&#xff0c;数据已跃升为企业发展的关键要素&#xff0c;其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性&#xff0c;宛如一颗璀璨的明星&#xff0c;在交通、…

Flutter Android修改应用名称、应用图片、应用启动画面

修改应用名称 打开Android Studio&#xff0c;打开对应项目的android文件。 选择app下面的manifests->AndroidManifest.xml文件&#xff0c;将android:label"bluetoothdemo2"中的bluetoothdemo2改成自己想要的名称。重新启动或者重新打包&#xff0c;应用的名称…

USB 驱动开发 --- Gadget 设备连接 Windows 免驱

环境信息 测试使用 DuoS(Arm CA53&#xff0c; Linux 5.10) 搭建方案验证环境&#xff0c;使用 USB sniff Wirekshark 抓包分析&#xff0c;合照如下&#xff1a; 注&#xff1a;左侧图中设备&#xff1a;1. 蓝色&#xff0c;USB sniff 非侵入工 USB 抓包工具&#xff1b;2. …

java项目之读书笔记共享平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 读书笔记共享平台的主要使…

git知识点汇总

git init 初始化一个git仓库&#xff0c;后面可以加仓库名&#xff0c;在当前目录下创建指定名称的目录并在该目录下创建仓库&#xff0c;若不加则直接在当前目录下创建仓库。git仓库的三个区域&#xff1a;工作区&#xff08;当前目录&#xff09;、暂存区&#xff08;.git/in…

探索大型语言模型新架构:从 MoE 到 MoA

探索大型语言模型新架构&#xff1a;从 MoE 到 MoA 当前&#xff0c;商业科技公司纷纷投身于一场激烈的竞赛&#xff0c;不断扩大语言模型的规模&#xff0c;并为其注入海量的高质量数据&#xff0c;试图逐步提升模型的准确性。然而&#xff0c;这种看似顺理成章的发展路径逐渐…

单片机-静动态数码管实验

P0控制数码管 &#xff0c;P0低电平 P1,P2,P3高电平 1、静态数码管 需求&#xff1a;数码管显示0&#xff0c;即让p0端口输出数字0的段码0x3f(共阴) #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; //数码管显示数字的数组 共阴极 …

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…

细说STM32F407单片机轮询方式CAN通信

目录 一、项目介绍 二、项目配置 1、时钟、DEBUG、USART6、NVIC、GPIO、CodeGenerator 2、CAN1 &#xff08;1&#xff09;Bit Timings Parameters组&#xff0c;位时序参数 &#xff08;2&#xff09;Basic Parameters组&#xff0c;基本参数 &#xff08;3&#xff09…

linux装git

前言 以 deepin 深度系统为例&#xff0c;安装命 令行版 Git 非常简单。 安装 注意&#xff1a;需要输入账号密码&#xff0c;否则无法进行。 打开终端&#xff0c;执行如下命令即可。 sudo apt-get install git成功 如下图所示&#xff0c;输入 git &#xff0c;命令识别即…

微信小程序滑动解锁、滑动验证

微信小程序简单滑动解锁 效果 通过 movable-view &#xff08;可移动的视图容器&#xff0c;在页面中可以拖拽滑动&#xff09;实现的简单微信小程序滑动验证 movable-view 官方说明&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/component/movable-view.ht…

Kerberos用户认证-数据安全-简单了解-230403

hadoop安全模式官方文档&#xff1a;https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html kerberos是什么 kerberos是计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。 概念&#…

大麦抢票科技狠活

仅供学习参考&#xff0c;切勿再令您所爱的人耗费高昂的价格去购置黄牛票 ⚠️核心内容参考: 据悉&#xff0c;于购票环节&#xff0c;大麦凭借恶意流量清洗技术&#xff0c;于网络层实时甄别并阻拦凭借自动化手段发起下单请求的流量&#xff0c;强化对刷票脚本、刷票软件以及…

光伏电站的成本估算方式

绿虫仿真设计软件的成本估算功能主要通过以下方式实现&#xff1a; 依据设计方案自动生成材料清单&#xff1a;软件能够根据光伏项目的具体设计&#xff0c;确定所需的各种材料&#xff0c;如光伏组件、逆变器、线缆等。结合市场价格信息&#xff1a;它可以获取实时的市场价格…

结构生物学1-绪论:

请结合图片&#xff0c;详细解释图片中的内容&#xff0c;要求逻辑清晰&#xff0c;并给出整理与答疑1&#xff0c;x射线衍射&#xff1a; 1. X射线与光学显微镜的基本原理对比 X射线的特性&#xff1a;为了解析大约1-5埃&#xff08;0.1-0.5纳米&#xff09;的细小原子结构&…

yolo小damo合集

效果如下&#xff1a;这个是图片检测 效果如下&#xff1a;这个是视频检测 效果如下&#xff1a;这个是摄像头检测 1 相关库 除了yolov11所用库之外&#xff0c;本文所用到的额外库为pyqt5&#xff0c;输入指令进行安装 pip install pyqt5 导入所需要的库 import sys fro…

商标名称仅由常见姓氏构成,缺显驳回!

近日一个江苏网友给普推知产商标老杨发过来的一个商标驳回案例&#xff0c;商标驳回的原因与第一次驳回引证的商标居然是不一样的&#xff0c;引证的商标与第一次引证的商标也是不一样的。 看了下引证的两个商标与申请商标名称明显不太近似&#xff0c;或许还有做复审的机会&am…