- 浏览: 675888 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (254)
- java分布式应用架构 (22)
- SSH框架整合 (6)
- java web 学习笔记 (49)
- java 学习笔记 (56)
- struts 2 学习 (6)
- Hibernate学习 (10)
- spring 学习 (2)
- 客户端编程(javascript) (4)
- IDE使用 (13)
- 生命 人生 (6)
- 系统维护 (3)
- 技术篇 (10)
- MySql (2)
- J2ME (1)
- java网络编程 (4)
- 数据库 (5)
- C/C++ (8)
- Oracle (7)
- 软件测试 (0)
- 软件的安装和部署 (0)
- Java快讯 (1)
- swt (1)
- Flex (1)
- 软件工程 (1)
- PostgreSQL (1)
- sql server2000 (2)
- 嵌入式数据库sqlite (5)
- J2EE (1)
- XML (1)
- ibatis3(MyBatis) (6)
- Linux&Unix (1)
- velocity (1)
- 回报社会 (4)
- 软件项目管理 (3)
- android研究 (3)
- C# (2)
- Objective-C (1)
- 音乐 (0)
- webx (1)
- JMS (1)
- maven软件项目管理 (1)
- 分布式服务 (0)
- 云平台 (0)
- 分布式存储 (1)
- 分布式系统架构 (0)
- 移动互联网 (1)
- ZooKeeper (1)
最新评论
-
liyys:
楼主,可不可以发这个项目的源码工程出来分享一下,少了几个类。楼 ...
仿照Hibernate实现一个SQLite的ORM框架 -
liyys:
少了一些类的源码没有粘贴出来
仿照Hibernate实现一个SQLite的ORM框架 -
honglei0412:
我使用的是这种方式获取db文件的目录但是 URL p = Fi ...
使用sqlite注意事项 -
honglei0412:
大侠 能不能说明下DbFile您是怎么做的吗?
使用sqlite注意事项 -
ahack:
刚写完mapping才发现早就有人写好了。仔细一看还都是针对的 ...
仿照Hibernate实现一个SQLite的ORM框架
最近对sqlite的jdbc使用操作进行了封装,发现在系统内部Satement, ResultSet等不能轻易关闭,封装会报错,下面和大家分享一下我的正确的使用
其中 org.liufei.cbook.dbcon.DbFile 是配置的数据库文件的路径类获取
package org.liufei.cbook.dbcon; import java.io.Serializable; import java.sql.Connection; import java.sql.DriverManager; public class SQLiteConn implements Serializable { private static final long serialVersionUID = 102400L; private DbFile dbfile ; public SQLiteConn(DbFile dbfile) { super(); this.dbfile = dbfile; } /** * 与SQLite嵌入式数据库建立连接 * @return Connection * @throws Exception */ public Connection getConnection() throws Exception { Connection connection = null ; try{ Class.forName("org.sqlite.JDBC", true, this.getClass().getClassLoader()) ; connection = DriverManager.getConnection("jdbc:sqlite:" + dbfile.getDbfilepath()); }catch (Exception e) { throw new Exception("" + e.getLocalizedMessage(), new Throwable("可能由于数据库文件受到非法修改或删除。")) ; } return connection ; } }
其中 org.liufei.cbook.dbcon.DbFile 是配置的数据库文件的路径类获取
package org.liufei.cbook.dbutils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Vector; public class SQLiteCRUD { private Connection connection ; public SQLiteCRUD(Connection connection) { this.connection = connection ; } /** * 创建表。 * @param sql * @return boolean */ public boolean createTable(String sql){ System.out.println(sql); Statement stmt = null ; try{ stmt = this.connection.createStatement() ; stmt.executeUpdate(sql) ; return true ; }catch (Exception e) { System.out.println("创建指定表时异常 : " + e.getLocalizedMessage()); connectionRollback(connection) ; return false ; } } /** * 向指定表中插入一条数据。 * @param table 表名 * @param params 参数数组 * @return boolean */ public boolean insert(String table, String[] params){ Statement stmt = null ; String sql = "insert into " + table + " values('"; for(int i = 0 ; i < params.length ;i++){ if(i == (params.length - 1)){ sql += (params[i] + "');") ; }else{ sql += (params[i] + "', '") ; } } System.out.println(sql); try{ stmt = this.connection.createStatement() ; stmt.executeUpdate(sql) ; return true ; }catch (Exception e) { System.out.println("向表插入" + table + "数据时异常 : " + e.getLocalizedMessage()); connectionRollback(connection) ; return false ; } } /** * 修改表中一个元组的数据。 * @param table 表名 * @param keyParam 要修改的元组的主键值 * @param keyField 要修改的元组的主键字段名称 * @param fields 要修改的元组的字段名称数组 * @param params 要修改的元组的值数组 * @return boolean */ public boolean update(String table, String keyParam, String keyField, String[] fields, String[] params){ Statement stmt = null ; String sql = "update " + table + " set " ; for(int i = 0 ; i < fields.length ; i++){ if(i == (fields.length - 1)){ sql += (fields[i] + "='" + params[i] + "' where " + keyField + "='" + keyParam +"';") ; }else{ sql += (fields[i] + "='" + params[i] + "', ") ; } } System.out.println(sql); try{ stmt = this.connection.createStatement() ; stmt.executeUpdate(sql) ; return true ; }catch (Exception e) { System.out.println("修改表" + table + "数据时异常 : " + e.getLocalizedMessage()); connectionRollback(connection) ; return false ; } } /** * 删除指定表中指定键值的元组。 * @param table * @param key * @param keyValue * @return boolean */ public boolean delete(String table, String key, String keyValue){ Statement stmt = null ; String sql = "delete from " + table + " where " + key + "='" + keyValue + "';" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; stmt.executeUpdate(sql) ; return true ; }catch (Exception e) { System.out.println("删除表" + table + "数据时异常 : " + e.getLocalizedMessage()); connectionRollback(connection) ; return false ; } } /** * 将一个表中满足指定条件的所有元组以Vector<Vector<Object>>的形式返回 * @param table * @param key * @param keyValue * @return Vector<Vector<Object>> */ public Vector<Vector<Object>> selectVector(String table, String key, String keyValue){ Statement stmt = null ; ResultSet rs = null ; Vector<Vector<Object>> value = new Vector<Vector<Object>>() ; String sql = "select * from " + table + " where " + key + "='" + keyValue + "';" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; int columnCounts = getFieldsCounts(rs) ; while(rs.next()){ Vector<Object> valueVector = new Vector<Object>() ; for(int i = 1; i <= columnCounts ; i++){ valueVector.addElement(rs.getObject(i)) ; } value.addElement(valueVector) ; } return value ; }catch (Exception e) { System.out.println("查询表" + table + "数据时异常 : " + e.getLocalizedMessage()); return value ; } } /** * 返回制定sql语句查询的Vector<Vector<Object>>结果集 * @param sql sql语句 * @return Vector<Vector<Object>> */ public Vector<Vector<Object>> selectVector(String sql){ Statement stmt = null ; ResultSet rs = null ; Vector<Vector<Object>> value = new Vector<Vector<Object>>() ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; int columnCounts = getFieldsCounts(rs) ; while(rs.next()){ Vector<Object> valueVector = new Vector<Object>() ; for(int i = 1; i <= columnCounts ; i++){ valueVector.addElement(rs.getObject(i)) ; } value.addElement(valueVector) ; } return value ; }catch (Exception e) { System.out.println("查询表sql数据时异常 : " + e.getLocalizedMessage()); return value ; } } /** * 将满足一定条件的指定表中所有元组数据以Object[][]形式返回 * @param table * @param key * @param keyValue * @return Object[][] */ public Object[][] selectObject(String table, String key, String keyValue){ Statement stmt = null ; ResultSet rs = null ; int columns = getFieldsCounts(table) ; int rows = getTableCount(table, key, keyValue) ; Object[][] tableObject = new Object[rows][columns] ; String sql = "select * from " + table + " where " + key + "='" + keyValue + "';" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; int i = 0 ; while(rs.next()){ for(int j = 0 ; j < columns ; j++){ tableObject[i][j] = rs.getObject(j+1) ; } i++ ; } return tableObject ; }catch (Exception e) { System.out.println("查询表" + table + "数据时异常 : " + e.getLocalizedMessage()); return tableObject ; } } /** * 将一个表中所有的元组以Vector<Vector<Object>>的形式返回 * @param table * @param key * @param keyValue * @return Vector<Vector<Object>> */ public Vector<Vector<Object>> select(String table){ Statement stmt = null ; ResultSet rs = null ; Vector<Vector<Object>> value = new Vector<Vector<Object>>() ; String sql = "select * from " + table + ";" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; int columnCounts = getFieldsCounts(rs) ; while(rs.next()){ Vector<Object> valueVector = new Vector<Object>() ; for(int i = 1; i <= columnCounts ; i++){ valueVector.addElement(rs.getObject(i)) ; } value.addElement(valueVector) ; } return value ; }catch (Exception e) { System.out.println("查询表" + table + "数据时异常 : " + e.getLocalizedMessage()); return value ; } } /** * 将一个表中所有的元组以Object[][]的形式返回 * @param table * @return Object[][] */ public Object[][] selectObject(String table){ Statement stmt = null ; ResultSet rs = null ; int columns = getFieldsCounts(table) ; int rows = getTableCount(table) ; Object[][] tableObject = new Object[rows][columns] ; String sql = "select * from " + table + ";" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; int i = 0 ; while(rs.next()){ for(int j = 0 ; j < columns ; j++){ tableObject[i][j] = rs.getObject(j+1) ; } i++ ; } return tableObject ; }catch (Exception e) { System.out.println("查询表" + table + "数据时异常 : " + e.getLocalizedMessage()); return tableObject ; } } /** * 将一个ResultSet结果集中的所有字段以List形式返回 * @param resultSet * @return List<String> */ public List<String> getFields(ResultSet resultSet){ List<String> fieldsList = new ArrayList<String>() ; try { int columnCounts = resultSet.getMetaData().getColumnCount(); for(int i = 1 ; i <= columnCounts ; i++){ fieldsList.add(resultSet.getMetaData().getColumnName(i)) ; } } catch (SQLException e) { System.out.println("加载表中字段异常 :" + e.getLocalizedMessage()); return null ; } return fieldsList ; } /** * 将一个表中的所有字段以List形式返回 * @param resultSet * @return List<String> */ public List<String> getFields(String table){ List<String> fieldsList = new ArrayList<String>() ; Statement stmt = null ; ResultSet rs = null ; String sql = "select * from " + table + ";" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; fieldsList = getFields(rs) ; }catch (Exception e) { System.out.println("查询表" + table + "数据时异常 : " + e.getLocalizedMessage()); } return fieldsList ; } /** * 将一个ResultSet结果集中的所有字段的数目返回 * @param resultSet * @return int */ public int getFieldsCounts(ResultSet resultSet){ try { return resultSet.getMetaData().getColumnCount(); } catch (SQLException e) { System.out.println("加载表中字段异常 :" + e.getLocalizedMessage()); return 0; } } /** * 返回一个表的所有字段数目 * @param table * @return int */ public int getFieldsCounts(String table){ int counts = 0 ; Statement stmt = null ; ResultSet rs = null ; String sql = "select * from " + table + ";" ; System.out.println(sql); try{ stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; counts = getFieldsCounts(rs) ; }catch (Exception e) { System.out.println("查询表" + table + "数据时异常 : " + e.getLocalizedMessage()); } return counts ; } /** * 查询一个表中的所有元组数目 * @param table * @return int */ private int getTableCount(String table){ String sql = "select count(*) from " + table + ";" ; Statement stmt = null ; ResultSet rs = null ; int counts = 0 ; try { stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; while(rs.next()){ counts = rs.getInt(1) ; } return counts ; } catch (Exception e) { System.out.println("查询表" + table + "元组数时异常 : " + e.getLocalizedMessage()); return counts ; } } /** * 查询一个表中的满足一定条件的所有元组数目 * @param table 表名 * @param key 字段名称 * @param keyValue 字段值 * @return int */ private int getTableCount(String table, String key, String keyValue){ String sql = "select count(*) from " + table + " where " + key + "='" + keyValue + "';"; Statement stmt = null ; ResultSet rs = null ; int counts = 0 ; try { stmt = this.connection.createStatement() ; rs = stmt.executeQuery(sql) ; while(rs.next()){ counts = rs.getInt(1) ; } return counts ; } catch (Exception e) { System.out.println("查询表" + table + "元组数时异常 : " + e.getLocalizedMessage()); return counts ; } } private void connectionRollback(Connection connection){ try { connection.rollback() ; } catch (SQLException e) { System.out.println("异常时回滚错误 : " + e.getLocalizedMessage()) ; } } }
评论
3 楼
honglei0412
2015-08-19
我使用的是这种方式获取db文件的目录但是 URL p = FileLocator.find(Activator.getDefault().getBundle(), new Path("/projects"), null);
p = FileLocator.resolve(p);
String path = p.getPath();
System.out.println(path.toLowerCase());,
打包后生成exe可执行文件后 就获取不到这个db文件了,这个文件是在工程根目录下的projects文件夹下放着.
p = FileLocator.resolve(p);
String path = p.getPath();
System.out.println(path.toLowerCase());,
打包后生成exe可执行文件后 就获取不到这个db文件了,这个文件是在工程根目录下的projects文件夹下放着.
2 楼
honglei0412
2015-08-19
大侠 能不能说明下DbFile您是怎么做的吗?
1 楼
jidilangzi603
2013-05-20
大侠,能否说明一下DbFile类怎么配置?我现在正在研究Java项目集成sqlite数据库,维度数据库本地化配置这一块还没有弄明白,麻烦指导!非常感谢!
相关推荐
资源清单: 1.源码:C#访问Sqlite数据库并显示在listBox中,并且支持对数据库的插入和删除。 2. 教程文档:该项目开发...3. 使用说明文档:该源码项目的使用说明和注意事项。 4. sqlite.Net。程序运行的必要安装软件。
使用sqlite3更新数据库文件,以前是自己通过组织命令,进行table表的增删改等操作,但是最近几年NDS数据库和sqlite官方合作,可以通过RBU进行差分更新了。但是更新过程中也有一些注意事项。
补充知识:Android studio sqllite数据库操作中关于表的创建和无法插入数据时的注意事项以及解决 创建表的sql语句 1.如果有条件的话。最好使用sqllite expert编辑代码测试,再复制到Android studio中 2.如果没有的话...
sqlite3开发api手册,注意事项,问题解答
主要介绍了SQLite3的绑定函数族使用与其注意事项的相关资料,文中通过示例代码介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
一、源码描述 简易版仓库管理系统,具有查询,添加,修改,删除,入库操作,出库操作,浏览出库列表及详细功能。...三、注意事项 开发环境为Visual Studio 2017,数据库:SQLite,使用.net 2.0开发。
资源清单: 1.源码:C#访问Sqlite数据库并分页显示。 2. 教程文档:该项目开发的详细步骤,并添加了必要的说明。...3. 使用说明文档:该源码项目的使用说明和注意事项。 4. sqlite.Net。程序运行的必要安装软件。
注意事项和限制请参阅Hexdocs中的。安装defp deps do { :ecto_sqlite3 , " ~> 0.5.2 " }end用法定义与此类似的仓库。 defmodule MyApp . Repo do use Ecto . Repo , otp_app: :my_app , adapter: Ecto . Adapters . ...
Sqlite文件上传下载源码 源码描述: 一、菜单功能 1、C#实现对Sqlite数据库的操作。欢迎各位给出意见和建议。...三、注意事项 1、开发环境为Visual Studio 2013,数据库为SQLite,使用.net 4.0开发。
主要介绍了php使用pdo连接sqlite3的配置方法,结合实例形式较为详细的分析了php基于pdo操作sqlite3的相关注意事项,需要的朋友可以参考下
执照: 版权所有(c)2012至2020年塞巴斯蒂安Rombauts( ) 根据MIT许可证(MIT)分发(请参阅随附文件LICENSE.txt或在复制)关于重新分发SQLite源文件的注意事项如MIT许可证所述,欢迎您按照自己想要的方式重用,...
主要介绍了Android+SQLite数据库实现的生词记事本功能,结合具体实例形式分析了Android操作SQLite数据库实现生词记录功能的操作步骤与相关注意事项,需要的朋友可以参考下
安装与注意事项 需要Python 2.7或3.2+ 经过SQLite 3.7版测试 与UTF-8编码文件兼容。 使用Python的软件包管理器pip从命令行进行安装。 --pre标志是必需的,因为importlite仍处于预发布阶段; 最新版本是0.1.0。 $...
主要介绍了php基于SQLite实现的分页功能,结合具体实例形式分析了php操作SQLite数据库实现分页功能的相关技巧与注意事项,需要的朋友可以参考下
了解常见的关系型数据库(如MySQL、PostgreSQL、SQLite)和非关系型数据库(如MongoDB、Redis)的基本原理和使用方法。学习使用ORM(对象关系映射)工具简化数据库操作。 4. 学习API设计 学习如何
主要介绍了Windows平台Python连接sqlite3数据库的方法,结合实例形式分析了Windows平台安装SQLite数据库及创建、连接数据库的实现方法与相关注意事项,需要的朋友可以参考下
8.Activtiy+Intent的使用及注意事项 9.Android中的定时提醒及Service的运用 10. MVC框架的搭建及运用 11.Android自带手机通讯录数据库分析 12.导入导出通讯录 13.通讯录的备份与还原 买教学视频花了好多大洋的……...
注意事项使用Ecto适配器时,所有准备好的语句都使用LRU缓存进行缓存。 准备好的语句不是一成不变的。 在处理语句并将值绑定到语句时,您必须小心。 不要尝试同时操作语句。 保持隔离到一个进程。 所有本机调用都通过...
服装进销存系统源码 项目描述 运行环境:VisualStudio2010 + SQLite 技术特点:使用了三层架构设计程序,更换底层数据库类型方便。...注意事项:SQLite的数据库建议使用Navicat To SQLite 打开。