设为首页 收藏本站
查看: 714|回复: 0

[经验分享] 使用sqlite注意事项

[复制链接]

尚未签到

发表于 2016-11-30 06:31:42 | 显示全部楼层 |阅读模式
最近对sqlite的jdbc使用操作进行了封装,发现在系统内部Satement, ResultSet等不能轻易关闭,封装会报错,下面和大家分享一下我的正确的使用

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 + "');") ;
}else{
sql += (params + "', '") ;
}
}
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 + "='" + params + "' where " + keyField + "='" + keyParam +"';") ;
}else{
sql += (fields + "='" + params + "', ") ;
}
}
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[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[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()) ;
}
}
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-307290-1-1.html 上篇帖子: sqlite C代码(带注释) 下篇帖子: SQLite数据库使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表