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();
        }
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt提供了一批SQLite工具类,允许我们使用SQLite数据库。这些工具类可以方便我们完成SQLite数据库的操作,其功能包括SQLite数据库的创建和删除、表的创建和删除、向表中插入数据、查询和更新数据等。 Qt提供了许多与SQLite相关的类,其中包括QSqlDatabase、 QSqlQuery、QSqlTableModel和QSqlRecord等。其中,使用QSqlDatabase可以连接到SQLite数据库,并创建、打开、关闭和删除数据库。而使用QSqlQuery类,我们可以执行SQL语句,例如插入、删除、更新和查询等,还可以调用其API来获取结果中的数据。 另外,QSqlTableModel类允许我们使用Qt的Model/View框架来管理数据库表,与之相关的还有QSqlRecord类,我们可以使用这个类来处理行中的数据。这种方式使得操作数据表变得十分方便,还能自动完成表中数据的排序和过滤等操作。 总之,Qt提供的SQLite工具类在使用SQLite数据库进行开发时非常有用。通过这些工具类,我们可以方便地管理SQLite数据库和表,完成多种操作,从而提高我们的代码效率和开发效率。 ### 回答2: SQLite是一个轻量级的关系型数据库,用于在嵌入式设备和移动设备中存储和管理数据。Qt是一个跨平台的应用程序开发框架,提供了许多工具类和API,可以用于开发各种类型的应用程序。Qt提供了许多与SQLite集成的工具类,以便在Qt应用程序中使用SQLite数据库。 Qt的SQLite工具类提供了一种简单、易于使用的方法来访问SQLite数据库。这些类可以帮助您轻松地执行各种操作,如打开和关闭数据库、执行查询和更新查询结果等。以下是一些常用的Qt SQLite工具类: 1. QSqlDatabase - 用于打开和关闭数据库连接的类。它提供了一种简单的方法来配置和连接到SQLite数据库。 2. QSqlQuery - 用于执行SQL查询并处理查询结果的类。它可以执行各种类型的SQL语句,如SELECT、INSERT、UPDATE、DELETE等。 3. QSqlTableModel - 用于管理表格的类。它可以连接到SQLite数据库中的数据表,并允许访问表格的数据、添加新数据、删除数据以及更新数据。 4. QSqlRelationalTableModel - 用于管理关系表格的类。它与QSqlTableModel类似,但可以处理两个或多个表之间的关系数据。 这些Qt SQLite工具类提供了一种简单、便捷的方法来访问和处理SQLite数据库。通过它们,可以轻松地执行各种操作,并快速地编写出高效、可靠的Qt应用程序。无论您是在嵌入式设备、移动设备还是桌面设备上开发应用程序,Qt的SQLite工具类都是非常有用的。 ### 回答3: Qt是一个跨平台应用程序开发框架,包括大量的类库和工具,其中也包括了对SQLite数据库的支持。Qt SQLite工具类就是一组对SQLite数据库进行操作工具类,可以用来完成各种数据库操作。 使用Qt SQLite工具类可以方便地实现创建、打开、关闭、查询、修改、删除等常用操作。具体操作包括:初始化SQLite数据库并创建数据库文件,打开和关闭数据库文件,执行SQL语句,插入、更新和删除记录,查询记录集,事务处理等。 Qt SQLite工具类具有易用性、跨平台性、高效性、可维护性等优点。在开发过程中,多采用类和对象的方式进行编程,这样方便了代码的重用和维护。通过使用Qt SQLite工具类,开发者可以简化程序的开发、测试和维护工作,提高开发效率,减少开发成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微一笑满城空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值