SQLite——Java使用SQLite初体验

article/2025/10/17 1:02:50

文章目录

  • 前言
  • 依赖版本
  • SQLite 操作工具类(自写)
  • 建立连接
  • 建表DDL
  • 插入数据、查询数据、删除数据 DML
  • 删除数据表 DDL
  • 查看db文件工具

前言

SQLite相比大多数数据库而言,具有免安装等优势,广泛应用于测试Android等领域。

通过一个.db文件就能实现数据库连接DDL操作语句DML命令。

依赖版本

测试项目采取Maven开发模式,其中主要依赖如下:

<dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.34.0</version>
</dependency>

SQLite 操作工具类(自写)

自己定义了一个连接操作的工具类,工具类代码如下所示:

import java.sql.*;
import java.util.ArrayList;
import java.util.List;/*** sqlite帮助类,直接创建该类示例,并调用相应的借口即可对sqlite数据库进行操作** 本类基于 sqlite jdbc v56** @author*/
public class SqliteHelper {private Connection connection;private Statement statement;private ResultSet resultSet;private String dbFilePath;/*** 构造函数* @param dbFilePath sqlite db 文件路径* @throws ClassNotFoundException* @throws SQLException*/public SqliteHelper(String dbFilePath) throws ClassNotFoundException, SQLException {this.dbFilePath = dbFilePath;connection = getConnection(dbFilePath);}/*** 获取数据库连接* @param dbFilePath db文件路径* @return 数据库连接* @throws ClassNotFoundException* @throws SQLException*/public Connection getConnection(String dbFilePath) throws ClassNotFoundException, SQLException {Connection conn = null;// 1、加载驱动Class.forName("org.sqlite.JDBC");// 2、建立连接// 注意:此处有巨坑,如果后面的 dbFilePath 路径太深或者名称太长,则建立连接会失败conn = DriverManager.getConnection("jdbc:sqlite:" + dbFilePath);return conn;}/*** 执行sql查询* @param sql sql select 语句* @param rse 结果集处理类对象* @return 查询结果* @throws SQLException* @throws ClassNotFoundException*/public <T> T executeQuery(String sql, ResultSetExtractor<T> rse) throws SQLException, ClassNotFoundException {try {resultSet = getStatement().executeQuery(sql);T rs = rse.extractData(resultSet);return rs;} finally {destroyed();}}/*** 执行select查询,返回结果列表** @param sql sql select 语句* @param rm 结果集的行数据处理类对象* @return* @throws SQLException* @throws ClassNotFoundException*/public <T> List<T> executeQuery(String sql, RowMapper<T> rm) throws SQLException, ClassNotFoundException {List<T> rsList = new ArrayList<T>();try {resultSet = getStatement().executeQuery(sql);while (resultSet.next()) {rsList.add(rm.mapRow(resultSet, resultSet.getRow()));}} finally {destroyed();}return rsList;}/*** 执行数据库更新sql语句* @param sql* @return 更新行数* @throws SQLException* @throws ClassNotFoundException*/public int executeUpdate(String sql) throws SQLException, ClassNotFoundException {try {int c = getStatement().executeUpdate(sql);return c;} finally {destroyed();}}/*** 执行多个sql更新语句* @param sqls* @throws SQLException* @throws ClassNotFoundException*/public void executeUpdate(String...sqls) throws SQLException, ClassNotFoundException {try {for (String sql : sqls) {getStatement().executeUpdate(sql);}} finally {destroyed();}}/*** 执行数据库更新 sql List* @param sqls sql列表* @throws SQLException* @throws ClassNotFoundException*/public void executeUpdate(List<String> sqls) throws SQLException, ClassNotFoundException {try {for (String sql : sqls) {getStatement().executeUpdate(sql);}} finally {destroyed();}}private Connection getConnection() throws ClassNotFoundException, SQLException {if (null == connection) connection = getConnection(dbFilePath);return connection;}private Statement getStatement() throws SQLException, ClassNotFoundException {if (null == statement) statement = getConnection().createStatement();return statement;}/*** 数据库资源关闭和释放*/public void destroyed() {try {if (null != connection) {connection.close();connection = null;}if (null != statement) {statement.close();statement = null;}if (null != resultSet) {resultSet.close();resultSet = null;}} catch (SQLException e) {System.out.println("Sqlite数据库关闭时异常 "+ e);}}/*** 是否自动提交事务*/public void setAutoCommit(Boolean status) throws SQLException {connection.setAutoCommit(status);}
}

其他相关类

import java.sql.ResultSet;
import java.sql.SQLException;public interface RowMapper<T> {public abstract T mapRow(ResultSet rs, int index) throws SQLException;
}
import java.sql.ResultSet;
import java.sql.SQLException;public interface ResultSetExtractor<T> {public abstract T extractData(ResultSet rs) throws SQLException;}

建立连接

SQLite只需要关联一个.db文件,就能实现数据库的连接操作。

即使这个.db文件只是一个db文件格式的空文件

测试项目结构如下:
在这里插入图片描述
为了避免文件不存在,导致出现文件找不到的异常,需要优先判断文件的存在性,完整代码如下所示:

// db 文件存放路径地址
static String dbPath = System.getProperty("user.dir")+ File.separator+"db"+File.separator;
// 1、创建sqlite连接
String dbFilePath = dbPath + "sqlite-test.db";
// 需要判断文件是否存在,不存在则优先创建 .db 文件
File dbFile = new File(dbFilePath);
// 如果父路径不存在,则先创建父路径
if(!dbFile.getParentFile().exists()){dbFile.getParentFile().mkdirs();
}
// 如果文件不存在,则创建文件
if(!dbFile.exists()){dbFile.createNewFile();
}// 建立连接
SqliteHelper sqliteHelper = new SqliteHelper(dbFilePath);

其中,建立数据库连接的核心代码如下所示:

/*** 构造函数* @param dbFilePath sqlite db 文件路径* @throws ClassNotFoundException* @throws SQLException*/
public SqliteHelper(String dbFilePath) throws ClassNotFoundException, SQLException {this.dbFilePath = dbFilePath;connection = getConnection(dbFilePath);
}/*** 获取数据库连接* @param dbFilePath db文件路径* @return 数据库连接* @throws ClassNotFoundException* @throws SQLException*/
public Connection getConnection(String dbFilePath) throws ClassNotFoundException, SQLException {Connection conn = null;// 1、加载驱动Class.forName("org.sqlite.JDBC");// 2、建立连接// 注意:此处有巨坑,如果后面的 dbFilePath 路径太深或者名称太长,则建立连接会失败conn = DriverManager.getConnection("jdbc:sqlite:" + dbFilePath);return conn;
}

与JDBC类似,也是先加载连接驱动,再通过驱动管理器 DriverManager构建连接通道。

但这里相比其他数据库而言,有一定的区别:

  • 1、getConnection(@NotNull String url) 中的 url 是 .db文件的全路径
  • 2、路径地址不能太深!
  • 3、文件名不能太长。

当代码执行后,项目的db文件夹中则会出现一个sqlite-test.db的文件。

但这个文件目前仅仅是一个.db后缀的空文件

建表DDL

建立连接后,进行数据表的建立。实现方式如下所示:

// 此时只是针对 sqlite-test.db 这个文件进行了连接操作,但这个文件才创建,其中无任何信息
// 2、建表 DDL
String createUser = "create table if not exists user(id integer primary key autoincrement,username varchar(20),password varchar(20))";
// 执行sql
sqliteHelper.executeUpdate(createUser);

该代码执行后,会在sqlite-test.db文件中创建一个user表,如下所示:
在这里插入图片描述
但其中并无数据信息。

插入数据、查询数据、删除数据 DML

// 3、插入数据
String insertUserData = "insert into user(username,password) values ('xiangjiao','123456')";
sqliteHelper.executeUpdate(insertUserData);// 4、查询语句
String selectUserData = "select * from user";
//        List<Object> query = sqliteHelper.executeQuery(selectUserData, new RowMapper<Object>() {
//            @Override
//            public Object mapRow(ResultSet rs, int index) throws SQLException {
//                Map<String, Object> resultMap = new HashMap<>();
//                resultMap.put("id", rs.getString("id"));
//                resultMap.put("username", rs.getString("username"));
//                resultMap.put("password", rs.getString("password"));
//                return resultMap;
//            }
//        });
// JDK 1.8 可以使用下列方式
List<Object> query = sqliteHelper.executeQuery(selectUserData, (rs,index)->{Map<String, Object> resultMap = new HashMap<>();resultMap.put("id", rs.getString("id"));resultMap.put("username", rs.getString("username"));resultMap.put("password", rs.getString("password"));return resultMap;
});query.forEach(e->{System.out.println(e);
});System.out.println("================");// 5、删除信息
String deleteSql = "delete from user where id = 1";
sqliteHelper.executeUpdate(deleteSql);
// 再查询
String selectUserData2 = "select * from user";
// JDK 1.8 可以使用下列方式
List<Object> query2 = sqliteHelper.executeQuery(selectUserData2, (rs,index)->{Map<String, Object> resultMap = new HashMap<>();resultMap.put("id", rs.getString("id"));resultMap.put("username", rs.getString("username"));resultMap.put("password", rs.getString("password"));return resultMap;
});
query2.forEach(e-> System.out.println(e));

删除数据表 DDL

// 6、删除整张表
String dropTable = "drop table user";
sqliteHelper.executeUpdate(dropTable);

查看db文件工具

  • SQLite Expert Personal 5
  • dbeaver
  • navicat

http://chatgpt.dhexx.cn/article/O21ovT3k.shtml

相关文章

Android 中SQLite数据库的使用详解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到网站 Android SQLite数据库相关API的介绍可以看这篇文章 Android SQLite数据库中基础的增删改查操作以及API的详…

Android Studio使用SQLite数据库

文章目录 零、本讲学习目标一、导入二、讲解&#xff08;一&#xff09;SQLite数据库1、SQLite构成2、SQLite数据类型3、SQLite数据库特点 &#xff08;二&#xff09;使用SQLiteDatabase类操作数据库1、创建安卓应用2、准备图片素材3、字符串资源文件4、主布局资源文件5、主界…

Sqlite的下载与安装

首先&#xff0c;下载Sqlite&#xff0c;或者直接下载群文件中的Sqlite文件下载完成之后解压在电脑的某个路径之下&#xff0c;C盘、D盘等等都可以&#xff0c;创建新的文件夹“sqlite”&#xff0c;把压缩包解压到文件夹中&#xff0c;如图所示紧接着我们需要在我们电脑上配置…

Android SQlite基本用法

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库&#xff0c;是遵守ACID的关联式数据库管理系统&#xff0c;它的设计目标是嵌入 式的&#xff0c;而且目前已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&#xff0c;在嵌入式设备中&#xff0c;可能…

安卓使用sqlite

搭建环境 // Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories {maven{ url https://maven.aliyun.com/repository/google}maven{ url https://maven.aliyun.com/repository/gradle-plugin}maven{…

SQLite

一、android内的数据库的基础知识介绍 1.用了什么数据库 android中采用的数据库是SQLite这个轻量级的嵌入式开源数据库&#xff0c;它是用C语言构建的。相关简介可以从链接查看。 2.数据库基本知识观花 对于一些和我一样还没有真正系统学习数据库技术的同学来说&#xff0c;把S…

Android SQlite数据库使用详解

目录 概述SQLite使用SQLite数据库创建增加数据删除数据更新数据查询数据 完整代码 概述 SQLite 一个非常流行的嵌入式数据库&#xff0c;它支持 SQL 语言&#xff0c;并且只利用很少的内存就有很好的性能。此外它还是开源的&#xff0c;任何人都可以使用它。 查看模拟器数据库…

SQLite数据库

目录 SQLite数据库 在Android中的使用 SQLiteOpenHelper中的方法 增删改查 添加数据 insert() 查询数据 query(),rawQuery() 查询和添加案例 数据库帮助类&#xff1a; MainActivity&#xff1a; Activity_main.xml: SQLite数据库 SQLite是一个轻量级的嵌入数据库&…

SQLite 安装与使用

在 Windows 上安装 SQLite 什么是SQLite SQLite是一款非常轻量级的关系数据库系统&#xff0c;支持多数SQL92标准。SQLite在使用前不需要安装设置&#xff0c;不需要进程来启动、停止或配置&#xff0c;而其他大多数SQL数据库引擎是作为一个单独的服务器进程&#xff0c;被程序…

【Android】SQLite

1&#xff0c;概述 android端提供的轻量级数据库&#xff0c; 2&#xff0c;实例I &#xff08;1&#xff09;创建SQLiteOpenHelper public class DBHelper extends SQLiteOpenHelper {private static DBHelper sDBHelper;public static void init(Nullable Context contex…

Android之SQLite数据库的使用

SQLite是比较小而功能比较全的关系型数据库&#xff0c;下面介绍一下SQLite数据库的使用方法&#xff0c;及增删改查操作。 创建一个Android项目&#xff1b; 首先我们需要创建一个DatabaseHelper这个助手类&#xff0c;源码&#xff1a; package cn.android.sword.sqlite.db…

android使用SQLite

文章目录 1.SQLite的特点2.SQLite的使用2.1数据库的创建2.2新增&#xff08;insert)2.3修改&#xff08;update)2.4删除(delete)2.5查询(query) 3.使用SQL语句进行数据库操作4.SQLite事务 1.SQLite的特点 SQLite是一个轻量级数据库&#xff0c;它设计目标是嵌入式的&#xff0…

Android 操作SQLite基本用法

在Android 开发中SQLite起着很重要的作用&#xff0c;网上SQLite的教程有很多很多&#xff0c;不过那些教程大多数都讲得不是很全面。本人总结了一些SQLite的常用的方法&#xff0c;借着论坛的大赛&#xff0c;跟大家分享分享的。 一.SQLite的介绍 1.SQLite简介 SQLite是一…

Android中SQLite应用详解

上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite。 现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到…

Android SQLite基本用法(极简)

前言 SQLite是一个进程内的库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库&#xff0c;这意味着与其他数据库不一样&#xff0c;您不需要在系统中配置。就像其他数据库&#xff0c;SQLite 引擎不是一个独立的进程&am…

SQLite数据库可视化工具【SQLiteStudio】的下载及安装

上一篇文章介绍了Windows的SQLite数据库安装&#xff0c;但是安装完成后&#xff0c;需要用SQLite命令去管理SQLite数据库&#xff0c;对于初学者不太友好。本文为大家介绍SQLite数据库的可视化工具【SQLiteStudio】&#xff0c;用户可以在SQLiteStudio中&#xff0c;实现对数据…

SQLite下载、安装与连接

1.下载SQLite SQLite官网&#xff1a;https://www.sqlite.org/download.html 根据自己电脑操作系统配置&#xff0c;选择32位或64位下载&#xff08;一般情况下是64位&#xff09;。总共两个压缩包。 或者直接去&#xff1a;https://download.csdn.net/download/WenHuiJun_/8…

SQLite 使用(针对Android)

文章目录 1. SQLite 介绍2. SQLite可视化工具 安装3. SQLite的增删改查3.1 SqliteOpenHelper 创建 库或表3.2 SqliteOpenHelper 实现 增删改查 1. SQLite 介绍 SQLite的注意事项&#xff1a; 标准的主键写法&#xff1a;_id。(不标准写法&#xff1a;id)&#xff0c;此外&…

AXI 总线入门(一)通道握手-AXI-Lite

AXI 总线(一)通道握手-AXI-Lite 文章目录 AXI 总线(一)通道握手-AXI-Lite关于本系列教程什么是AXI协议AXI读写通道AXI读过程AXI写过程单一通道的握手VALID 信号先到READY信号先到READY和VALID同时到达原则性问题 AXI-Lite总线实现解析生成一个AXI(-Lite)外设整体端口信号解析A(…

【AXI】解读AXI协议乱序机制

芯片设计验证社区芯片爱好者聚集地硬件相关讨论社区数字verifier星球四社区联合力荐&#xff01;近500篇数字IC精品文章收录&#xff01;【数字IC精品文章收录】学习路线基础知识总线脚本语言芯片求职EDA工具低功耗设计VerilogSTA设计验证FPGA架构AMBA书籍 解读AXI协议乱序机制…