JDBC操作SQLite的工具类

直接调用无需拼装sql

注入依赖

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

工具类


import org.sqlite.SQLiteConnection;/*** @Author cpf* @Date 2023/9/8*/
import java.sql.*;public class SQLiteUtils {private static final String DB_FILE = "src/main/resources/database.db"; // SQLite数据库文件名public static void main(String[] args) throws SQLException {Connection conn = getConnection();//创建表String[] columns = new String[]{"id", "name", "age", "gender"};createTable(conn, "students", columns);//插入Object[] column = new Object[]{"name", "age", "gender"};Object[] values = new Object[]{"张三", "16", "汉族"};insertRecord(conn, "students",column, values);//查询所有记录ResultSet students = queryAll(conn, "students");while (students.next()){System.out.println(students.getString("name") + " | " + students.getString("age") + " | " + students.getString("gender"));}//查询指定字段的记录ResultSet resultSet = queryByColumn(conn, "students", "name");while (resultSet.next()){System.out.println("姓名: " + resultSet.getString("name"));}//查询指定条件的记录String[] column01 = new String[]{"name"};Object[] values01 = new Object[]{"张三"};ResultSet students1 = queryByCondition(conn, "students", column01, values01);while (students1.next()){System.out.println(students1.getString("name") + " | " + students1.getString("age") + " | " + students1.getString("gender"));}/*** 更新一条记录* @param conn 数据库连接* @param tableName 表名* @param conditionSet 更新字段的数组* @param conditionSetValue 更新字段的数组* @param conditions 条件的数组* @param conditionsValue 条件值的数组*/String[] conditionSet = new String[]{"age"};Object[] conditionSetValue = new Object[]{"45"};String[] conditions = new String[]{"id"};Object[] conditionsValue = new Object[]{"5"};updateRecord(conn, "students", conditionSet, conditionSetValue, conditions, conditionsValue);//根据条件删除数据String[] conditions02 = new String[]{"id"};Object[] conditionsValue02 = new Object[]{"5"};deleteRecord(conn, "students", conditions02, conditionsValue02);//根据ID删除数据deleteRecordById(conn, "students", "4");closeConnection(conn);}/*** 创建SQLite数据库连接* @return 数据库连接*/public static Connection getConnection() {Connection conn = null;try {Class.forName("org.sqlite.JDBC");conn = DriverManager.getConnection("jdbc:sqlite:" + DB_FILE);} catch (ClassNotFoundException | SQLException e) {e.printStackTrace();}return conn;}/*** 关闭数据库连接* @param conn 数据库连接*/public static void closeConnection(Connection conn) {try {if (conn != null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 创建SQLite表* @param conn 数据库连接* @param tableName 表名* @param columns 列名和数据类型的数组*/public static void createTable(Connection conn, String tableName, String[] columns) {StringBuilder sql = new StringBuilder();sql.append("CREATE TABLE IF NOT EXISTS ").append(tableName).append(" (");for (int i = 0; i < columns.length; i++) {sql.append(columns[i]).append(" ").append(getColumnType(columns[i]));if (i != columns.length - 1) {sql.append(",");}}sql.append(")");try (Statement stmt = conn.createStatement()) {System.out.println("建表sql: " + sql.toString());stmt.executeUpdate(sql.toString());} catch (SQLException e) {e.printStackTrace();}}/*** 获取列的数据类型* @param columnName 列名* @return 数据类型*/private static String getColumnType(String columnName) {/*if (columnName.equalsIgnoreCase("id")) {return "INTEGER PRIMARY KEY";} else if (columnName.equalsIgnoreCase("name")) {return "TEXT";} else if (columnName.equalsIgnoreCase("age")) {return "INTEGER";} else if (columnName.equalsIgnoreCase("gender")) {return "TEXT";} else {return "TEXT";}*/if (columnName.equalsIgnoreCase("id")) {return "INTEGER PRIMARY KEY";} else {return "TEXT";}}/*** 插入一条记录* @param conn 数据库连接* @param tableName 表名* @param columns 字段的数组* @param values 值的数组*/public static void insertRecord(Connection conn, String tableName, Object[] columns, Object[] values) {StringBuilder sql = new StringBuilder();sql.append("INSERT INTO ").append(tableName).append(" (");for (int i = 0; i < columns.length; i++) {sql.append(columns[i].toString()).append(",");}sql.deleteCharAt(sql.length() - 1);sql.append(") VALUES (");for (int i = 0; i < columns.length; i++) {sql.append("?,");}sql.deleteCharAt(sql.length() - 1);sql.append(")");System.out.println("插入: " + sql.toString());try (PreparedStatement pstmt = conn.prepareStatement(sql.toString())) {for (int i = 0; i < values.length; i++) {pstmt.setObject(i + 1, values[i]);}pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}/*** 查询所有记录* @param conn 数据库连接* @param tableName 表名* @return 查询结果*/public static ResultSet queryAll(Connection conn, String tableName) {StringBuilder sql = new StringBuilder();sql.append("SELECT * FROM ").append(tableName);System.out.println("查询所有记录: " + sql.toString());try {Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql.toString());return rs;} catch (SQLException e) {e.printStackTrace();}return null;}/*** 查询指定字段的记录* @param conn 数据库连接* @param tableName 表名* @param columnName 列名* @return 查询结果*/public static ResultSet queryByColumn(Connection conn, String tableName, String columnName) {StringBuilder sql = new StringBuilder();sql.append("SELECT ").append(columnName).append(" FROM ").append(tableName);try{Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql.toString());return rs;} catch (SQLException e) {e.printStackTrace();}return null;}/*** 查询指定条件的记录* @param conn 数据库连接* @param tableName 表名* @param conditions 条件字段的数组* @param values 条件值的数组* @return 查询结果*/public static ResultSet queryByCondition(Connection conn, String tableName, String[] conditions, Object[] values) {StringBuilder sql = new StringBuilder();sql.append("SELECT * FROM ").append(tableName).append(" WHERE ");for (int i = 0; i < conditions.length; i++) {sql.append(conditions[i]).append("=?");if (i != conditions.length - 1) {sql.append(" AND ");}}System.out.println("询指定条件的记录: " + sql.toString());try{PreparedStatement pstmt = conn.prepareStatement(sql.toString());for (int i = 0; i < values.length; i++) {pstmt.setObject(i + 1, values[i]);}return pstmt.executeQuery();} catch (SQLException e) {e.printStackTrace();}return null;}/*** 更新一条记录* @param conn 数据库连接* @param tableName 表名* @param conditionSet 更新字段的数组* @param conditionSetValue 更新字段的数组* @param conditions 条件的数组* @param conditionsValue 条件值的数组*/public static void updateRecord(Connection conn, String tableName, String[] conditionSet, Object[] conditionSetValue, String[] conditions, Object[] conditionsValue) {StringBuilder sql = new StringBuilder();sql.append("UPDATE ").append(tableName).append(" SET ");for (int i = 0; i < conditionSet.length; i++) {sql.append(conditionSet[i]).append("=?");if (i != conditionSet.length - 1) {sql.append(",");}}sql.append(" WHERE ");for (int i = 0; i < conditions.length; i++) {sql.append(conditions[i]).append("=?");if (i != conditions.length - 1) {sql.append(" AND ");}}try{System.out.println("更新一条记录: " + sql.toString());PreparedStatement pstmt = conn.prepareStatement(sql.toString());for (int i = 0; i < conditionSetValue.length; i++) {pstmt.setObject(i + 1, conditionSetValue[i]);}for (int i = 0; i < conditionsValue.length; i++) {pstmt.setObject(i + conditionsValue.length + 1, conditionsValue[i]);}pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}/*** 删除一条记录* @param conn 数据库连接* @param tableName 表名* @param conditions 条件的数组* @param conditionsValue 条件值的数组*/public static void deleteRecord(Connection conn, String tableName, String[] conditions, Object[] conditionsValue) {StringBuilder sql = new StringBuilder();sql.append("DELETE FROM ").append(tableName).append(" WHERE ");for (int i = 0; i < conditions.length; i++) {sql.append(conditions[i]).append("=?");if (i != conditions.length - 1) {sql.append(" AND ");}}try{System.out.println("根据条件删除数据: " + sql.toString());PreparedStatement pstmt = conn.prepareStatement(sql.toString());for (int i = 0; i < conditionsValue.length; i++) {pstmt.setObject(i + 1, conditionsValue[i]);}pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}/*** 根据ID删除一条记录* @param conn 数据库连接* @param tableName 表名* @param id ID值*/public static void deleteRecordById(Connection conn, String tableName, String id) {StringBuilder sql = new StringBuilder();sql.append("DELETE FROM ").append(tableName).append(" WHERE id=?");try{System.out.println("根据条件删除数据: " + sql.toString());PreparedStatement pstmt = conn.prepareStatement(sql.toString());pstmt.setString(1, id);pstmt.executeUpdate();} catch (SQLException e) {e.printStackTrace();}}
}

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

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

相关文章

轮播图禁用手势滑动

要禁用手势滑动&#xff0c;并只允许自动轮播&#xff0c;你可以使用autoplayDisableOnInteraction属性来实现。以下是如何在Flutter中使用flutter_swiper插件进行配置&#xff1a; 首先&#xff0c;在pubspec.yaml文件中添加flutter_swiper插件的依赖项&#xff1a; dependen…

华为CD32键盘使用教程

华为CD32键盘使用教程 用爱发电写的教程&#xff01; 最后更新时间&#xff1a;2023.9.12 型号&#xff1a;华为有线键盘CD32 基本使用 此键盘在不安装驱动的情况下可以直接使用&#xff0c;但是不安装驱动指纹识别是无法使用的&#xff01;并且NFC功能只支持华为的部分电脑…

VL-Adapter: 针对视觉和语言(Vision-and-Language)的参数高效迁移学习

VL-ADAPTER: Parameter-Efficient Transfer Learning for Vision-and-Language Tasks 22年发表在CVPR UNC大学 Abstract 将介绍VL-BART和VL-T5这两个模型&#xff08;adapter-based parameter-efficient transfer learning techniques&#xff09; 评估这俩模型通过一个统一…

科技资讯|苹果虚拟纸可在Vision Pro中为广告、书籍等提供MR内容和动画

近日&#xff0c;美国专利商标局正式授予苹果一项与虚拟纸张相关的专利。这是与虚拟纸张这项发明相关的第二项专利&#xff0c;鉴于苹果 Vision Pro 将于明年上市&#xff0c;那么我们离苹果实现虚拟纸张的发明又近了一步。 虚拟纸张将能够包含 2D、3D 和动画等 MR内容&#…

JavaScript中循环遍历数组、跳出循环和继续循环

循环遍历数组 上个文章我们简单的介绍for循环&#xff0c;接下来&#xff0c;我们使用for循环去读取数据的数据&#xff0c;之前我们写过这样的一个数组&#xff0c;如下&#xff1a; const ITshareArray ["张三","二愣子","2033-1997","…

JAVA使用wkhtml 将html转成pdf或Image文件

linux的wkhtml 安装&#xff1a; linux安装wkhtmltopdf&#xff08;清晰明了&#xff09;_sout-lanys的博客-CSDN博客 win的wkhtml安装&#xff1a; 直接下载&#xff1a;wkhtmltopdf html 必须加UTF-8编码 <head> <meta charset"utf-8"> </hea…

基于Elasticsearch的多文档检索 比如 商品(goods)、案例(cases)

概述 Elasticsearch多文档聚合检索 详细 记得把这几点描述好咯&#xff1a;需求&#xff08;要做什么&#xff09; 代码实现过程 项目文件结构截图 演示效果 应用场景 我们需要在五种不同的文档中检索数据。 比如 商品&#xff08;goods&#xff09;、案例&#xff08;ca…

ubuntu 20.04安装开发环境总结_安装python

Ubuntu 20.04 是一款主要面向开发人员的操作系统之一&#xff0c;与此同时&#xff0c;它还支持多种开发环境和工具的使用。但是因为对市面上各种软件的支持没有window那样友好&#xff0c;所以对ubuntu系统安装配置各种环境的问题做了个总结 安装 PyCharm&#xff1a; 可以从…

(2)数据库mongodb 终端 和 vscode创建数据库 数据导入导出

可视化工具&#xff1a; Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo) mongodb安装官网&#xff1a;MongoDB: The Developer Data Platform | MongoDB 文档&#xff1a;安装 MongoDB - MongoDB-CN-Manual (mongoing.com) 配置环境变量&#xff1a; 是为了扩…

微信小程序音频后台播放功能

微信小程序在手机息屏后依旧能播放音频&#xff0c;需要使用 wx.getBackgroundAudioManager() 方法创建后台音乐播放器&#xff0c;并将音乐播放任务交给这个后台播放器。 具体实现步骤如下&#xff1a; 小程序页面中&#xff0c;使用 wx.getBackgroundAudioManager() 方法创…

pandas 筛选数据的 8 个骚操作

日常用Python做数据分析最常用到的就是查询筛选了&#xff0c;按各种条件、各种维度以及组合挑出我们想要的数据&#xff0c;以方便我们分析挖掘。 东哥总结了日常查询和筛选常用的种骚操作&#xff0c;供各位学习参考。本文采用sklearn的boston数据举例介绍。 from sklearn …

jeesite实现excel导入功能(保姆级图文教程)

文章目录 前言一、准备工作1.准备一个excel模板,放入static目录2.application.yml文件中设置文件存储路径3.使用easyexcel插件解析excel数据,pom文件导入easyexcel二、使用步骤1.列表页添加下载模板按钮2.表单页添加文件上传3. 创建excel解析对应实体4.后台完成文件上传代码,…

酌情参考——chatGPT给的一些语义框架的学术思路,语义和图谱结合似乎是个不错的方向

语义和图谱结合似乎是个不错的方向 我在分析教师讲课的文本&#xff0c;以知识元和语义框架建模的话怎么分析合适 ChatGPT 分析教师讲课的文本并建立知识元和语义框架的模型可以帮助你理解教师的教学内容以及课程结构。以下是一些步骤和方法&#xff0c;可帮助你进行这种分析&…

SoC性能指标ARM内核运算能力

自动驾驶芯片常用的性能评价指标:TOPS,DMIPS,GFLOPS分别说的是啥&#xff1f; TOPS Tera Operation Per Second&#xff0c;表示每秒钟可以进行的操作数量&#xff0c;用于衡量自动驾驶的算力。 众所周知&#xff0c;汽车上最常用的传感器是摄像头&#xff0c;而与之对应的计…

springboot使用freemarker导出word

springboot使用freemarker导出word 一、需求说明二、制作模板文件1.修改word留下占位符并另存为.xml文件2.将xml文件后缀名改为.ftl3.打开ftl文件格式化内容4.将占位符替换成变量 三、代码实现1.引入依赖2.将模板引入resource下3.编写word导出工具包4.创建接口调用 一、需求说明…

Trinitycore学习之在Linux环境上搭建服务器并测试运行

1&#xff1a;准备环境&#xff0c;这里用ubuntu 22.04进行测试&#xff0c;安装环境后为了方便&#xff0c;换源。 注意&#xff1a;这里用的虚拟机&#xff0c;在虚拟机上生成地图信息&#xff0c;地图信息占用内存比较大&#xff0c;我暂时设置磁盘50G进行测试&#xff0c;…

华为Linux系统开发工程师面试

在Linux系统开发工程师的面试中&#xff0c;你可能会遇到以下一些问题&#xff1a; 在同一个网站中&#xff0c;当客户访问的时候&#xff0c;会出现有的页面访问的速度快而有的慢&#xff0c;系统和服务完全正常、网络带宽正常&#xff0c;你如何诊断这个问题&#xff1f;你以…

【23种设计模式】建造者模式【⭐⭐⭐】

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

iwebsec靶场 文件包含漏洞通关笔记4-远程文件包含

目录 前言 1.远程文件包含 2.远程文件条件 第03关 远程文件包含 1.打开靶场 2.源码分析 3.本地文件包含渗透 4.远程文件包含渗透 前言 1.远程文件包含 远程文件包含是文件包含漏洞的其中一种。这种漏洞在文件的URI位于其他服务器上并作为参数传递给PHP函数“include”…

【Linux】自制shell

本期我们利用之前学过的知识&#xff0c;写一个shell命令行程序 目录 一、初始代码 二、使用户输入的ls指令带有颜色分类 三、解决cd指令后用户所在路径不变化问题 3.1 chdir函数 四、关于环境变量的问题 一、初始代码 #include<stdio.h> #include<unistd.h…