JDBC操作SQLite的工具类

news/2024/5/18 21:43:00 标签: sqlite, jdbc, javafx

直接调用无需拼装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.niftyadmin.cn/n/5013465.html

相关文章

八 动手学深度学习v2 ——卷积神经网络之卷积+填充步幅+池化+LeNet

目录 1. 图像卷积总结2. 填充和步幅 padding和stride3. 多输入多输出通道4. 池化层5. LeNet 1. 图像卷积总结 二维卷积层的核心计算是二维互相关运算。最简单的形式是&#xff0c;对二维输入数据和卷积核执行互相关操作&#xff0c;然后添加一个偏置。核矩阵和偏移是可学习的参…

机器学习——Logistic Regression

0、前言&#xff1a; Logistic回归是解决分类问题的一种重要的机器学习算法模型 1、基本原理&#xff1a; Logistic Regression 首先是针对二分类任务提出的一种分类方法如果将概率看成一个数值属性&#xff0c;则二元分类问题的概率预测就可以转化为一个回归问题。这种思路最…

神经网络与强化学习:揭示AI的超能力

文章目录 神经网络&#xff1a;模拟人脑的工具强化学习&#xff1a;通过试错学习结合神经网络和强化学习价值网络策略网络结合训练 应用领域游戏机器人控制金融交易 未来趋势自动化和自主系统个性化和自适应系统跨学科研究 结论 &#x1f389;欢迎来到AIGC人工智能专栏~神经网络…

arduino - 用 arduino zero 开发板来学习理解arduino软件编程细节

文章目录 arduino - 用 arduino zero 开发板来学习理解arduino软件编程细节概述笔记实验环境不是所有的arduino工程都能在同一块开发板上编译过为啥arduino编程都是在setup()和loop()函数中实现代码?END arduino - 用 arduino zero 开发板来学习理解arduino软件编程细节 概述…

【计算机网络】网络编程接口 Socket API 解读(3)

Socket 是网络协议栈暴露给编程人员的 API&#xff0c;相比复杂的计算机网络协议&#xff0c;API 对关键操作和配置数据进行了抽象&#xff0c;简化了程序编程。 本文讲述的 socket 内容源自 Linux 发行版 centos 9 上的 man 工具&#xff0c;和其他平台&#xff08;比如 os-x …

华为OD机试真题【食堂供餐】

1、题目描述 【食堂供餐】 某公司员工食堂以盒饭方式供餐。为将员工取餐排队时间降低为0&#xff0c;食堂的供餐速度必须要足够快。 现在需要根据以往员工取餐的统计信息&#xff0c;计算出一个刚好能达成排队时间为0的最低供餐速度。 即&#xff0c;食堂在每个单位时间内必须…

好玩的js特效

记录一些好玩的js特效 1、鱼跳跃特效 引入jquery:https://code.jquery.com/jquery-3.7.1.min.js 源码如下&#xff1a; <!--引入jquery--> <script src"https://code.jquery.com/jquery-3.7.1.min.js"></script> <!--引入跳跃源码--> <s…

Leetcode.664 奇怪的打印机

题目链接 Leetcode.664 奇怪的打印机 hard 题目描述 有台奇怪的打印机有以下两个特殊要求&#xff1a; 打印机每次只能打印由 同一个字符 组成的序列。每次可以在从起始到结束的任意位置打印新字符&#xff0c;并且会覆盖掉原来已有的字符。 给你一个字符串 s &#xff0c;你…