• 在Java中使用Sqlite数据库


    一、安装

    下载最新的 Sqlite Jdbc 驱动程序jar文件,并添加到Java工程的class路径下;

    二、使用

    以 sqlite Jdbc 驱动版本为 sqlitejdbc-v56.jar 为例

    SqliteHelper.java 类

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    /**
     * sqlite帮助类,直接创建该类示例,并调用相应的借口即可对sqlite数据库进行操作
     * 
     * 本类基于 sqlite jdbc v56
     * 
     * @author haoqipeng
     */
    public class SqliteHelper {
        final static Logger logger = LoggerFactory.getLogger(SqliteHelper.class);
        
        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;
            Class.forName("org.sqlite.JDBC");
            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) {
                logger.error("Sqlite数据库关闭时异常", e);
            }
        }
    }

    ResltSetExtractor.java 结果集处理类

    import java.sql.ResultSet;
    
    public interface ResultSetExtractor<T> {
        
        public abstract T extractData(ResultSet rs);
    
    }

    RowMapper.java 结果集行数据处理类

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

    SqliteTest.java 测试类

    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.junit.Test;
    
    public class SqliteTest {
        
        @Test
        public void testHelper() {
            try {
                SqliteHelper h = new SqliteHelper("testHelper.db");
                h.executeUpdate("drop table if exists test;");
                h.executeUpdate("create table test(name varchar(20));");
                h.executeUpdate("insert into test values('sqliteHelper test');");
                List<String> sList = h.executeQuery("select name from test", new RowMapper<String>() {
                    @Override
                    public String mapRow(ResultSet rs, int index)
                            throws SQLException {
                        return rs.getString("name");
                    }
                });
                System.out.println(sList.get(0));
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    测试输出结果

    sqliteHelper test
  • 相关阅读:
    二分查找(通过相对位置判断区间位置)--17--二分--LeetCode33搜索旋转排序数组
    归并排序(归并排序求逆序对数)--16--归并排序--Leetcode面试题51.数组中的逆序对
    22-Java-Hibernate框架(二)
    21-Java-Hibernate框架(一)
    操作系统-5-进程管理(二)
    操作系统-4-进程管理(一)
    操作系统-3-操作系统引论
    操作系统-2-存储管理之LRU页面置换算法(LeetCode146)
    20-Java-正则表达式
    19-Java-核心类库2-包装类、Integer类、String类、StringBuffer类、StringBuilder类
  • 原文地址:https://www.cnblogs.com/haoqipeng/p/sqlite-use-in-java.html
Copyright © 2020-2023  润新知