描述:

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。

它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,

可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,

同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2019年已经有19个年头,SQLite也迎来了一个版本 SQLite 3已经发布

工作原理

不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
 

功能特性

1. ACID事务 
2. 零配置 – 无需安装和管理配置
3.储存在单一磁盘文件中的一个完整的数据库
4.数据库文件可以在不同字节顺序的机器间自由的共享
5.支持数据库大小至2TB
6. 足够小, 大致13万行C代码, 4.43M
7. 比一些流行的数据库在大部分普通数据库操作要快
8. 简单, 轻松的API
9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
10. 良好注释的源代码, 并且有着90%以上的测试覆盖率
11. 独立: 没有额外依赖
12. 源码完全的开源, 你可以用于任何用途, 包括出售它
13. 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

sqlite数据库就是一个DB文件。 程序上的每次操作也是直接操作 DB文件。

程序每操作一次数据库都要IO一次 .DB  文件 。  这个文件就是这个SQLite数据库。

对大数据量以及复杂的关联关系 支持明显不足。

工具类:

package com.hotent.code.util.eayun;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement; /**
* 对sqlite操作
* 所需支持依赖 sqlite-jdbc-3.8.11.1.jar
* @author sunzhenyang on 2019-04-18
*
*
* 注:以下所有方法不能抛异常只能捕获 不然会报错
*/
public class SqliteJDBCUtil { private static String dbFilePath=""; public static String getDbFilePath() {
return dbFilePath;
} /**
* 生成一个DB文件 (创建连接)
* @param filePath 生成文件夹的路径 如:F:/fileTest/aabb.db
* @return 当前DB文件的连接通道
*/
public static Connection createRssDBFile(String filePath) {
SqliteJDBCUtil.dbFilePath = filePath;
Connection con=null; try {
Class.forName("org.sqlite.JDBC");
//创建了一个sqlite的 .db文件
con = DriverManager.getConnection("jdbc:sqlite:"+filePath);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} return con;
} /**
* 创建表
* @param con 某一个DB文件的连接
* @param createTableSql 创建表的语句
* @param tableName 表名 建表时判断表是否存在 存在即删除表 (可以不传)
* @throws SQLException
*/
public static void createTable(Connection con,String createTableSql,String tableName){
try {
Statement stat = con.createStatement();
if(tableName != null && !"".equals(tableName)){
stat.executeUpdate("drop table if exists "+tableName+";");
}
//创建表
stat.executeUpdate(createTableSql);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 执行SQL 外部调用是直接设置SQL语句 以及参数 传入后直接执行
* @throws SQLException
*/
public static void editSql(PreparedStatement prep,Connection con){
//执行处理
try {
prep.addBatch();
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 执行SQL
* @throws SQLException
*/
public static PreparedStatement editSql(Connection con){
PreparedStatement prep=null;
//向rssType表中插入数据
try {
prep = con.prepareStatement("insert into tableTest values (?, ?, ?, ?);");
prep.setInt(1,1);
prep.setString(2,"qqq");
prep.setInt(3,2);
prep.setString(4,"11123"); prep.addBatch();
} catch (SQLException e) {
e.printStackTrace();
} return prep;
} /**
* 提交SQL语句
* @param con
* @param prep
* @throws SQLException
*/
public static void submitSql(Connection con,PreparedStatement prep){
/**
* 默认的话为自动提交, 每执行一个update ,delete或者insert的时候都会自动提交到数据库,无法回滚事务。
* 设置connection.setautocommit(false);
* 只有程序调用connection.commit()的时候才会将先前执行的语句一起提交到数据库,这样就实现了数据库的事务。
* 还有一点是因为sqllite数据库是一个 .db的文件 没执行一次语句都要打开一次文件 所以加入事务将全部SQL放于缓存中一次性执行 只需要打开一次文件
*/
try {
con.setAutoCommit(false);
prep.executeBatch(); //批量执行
con.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
} /**
* 使用完一定要关闭连接 ***** 务必 切记 *****
* @param prep
* @param con
*/
public static void close(PreparedStatement prep,Connection con){
try {
if(prep!=null)
prep.close(); if(con!=null)
con.close(); } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) throws Exception {
Connection con = SqliteJDBCUtil.createRssDBFile("F:/fileTest/demo.db"); //1,创建一个DB文件 StringBuffer createTableSql=new StringBuffer("create table tableTest (");
createTableSql.append("id INTEGER, name NTEXT,");
createTableSql.append("typeId INTEGER, logoUrl text");
createTableSql.append(");");
SqliteJDBCUtil.createTable(con, createTableSql.toString(), "tableTest"); //2,创建一个表 PreparedStatement prep = SqliteJDBCUtil.editSql(con); //3, 向表中插入SQL SqliteJDBCUtil.submitSql(con, prep); //提交 SqliteJDBCUtil.close(prep, con); } }

对SQLite数据库操作 操作db文件的更多相关文章

  1. 如何将SQLite数据库(dictionary.db文件)与apk文件一起发布

      可以将dictionary.db文件复制到Eclipse Android工程中的res\raw目录中,如图1所示.所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件.使 用 ...

  2. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  3. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  4. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  5. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  6. 安卓平台SQLite数据库基础操作总结

    最近学了一些安卓开发,在这里分享一下SQLite数据库的使用相关部分,我使用的工具为Android Studio,后台语言为java: 首先,需要创建一个数据库辅助类DataBaseHelper,用于 ...

  7. Android Studio 查看SQLite数据库存储位置及文件

    前言: 之前开发的一个记账本APP,用的是SQLite数据库,会有一些网友问如何查看数据库,这篇博文对此进行一个说明. 操作: 1.通过DDMS(Dalvik Debug Monitor Servic ...

  8. SQLite数据库在多线程写锁文件的解决办法

    参考了很多SQLITE数据库多线程的解决办法 我自己写了一个SQLITEHELPER 来解决这个问题 希望大家多多指教 调用的时候  SQLLiteDBHelper _SQLLiteDBHelper ...

  9. [转]html5 js 访问 sqlite 数据库的操作类

    本文转自:http://blog.csdn.net/tsxw24/article/details/7613815 webkit 核心的浏览器提供了 3个 api接口,用于访问本地sqlite数据,但使 ...

  10. iOS sqlite大数据分段加载的实现,sqlite数据库的操作

    数据库管理类(自己封装的,挺简单的) // //  MyDataBaseManger.m //  DB_Test // //  Created by admin on 17/2/7. //  Copy ...

随机推荐

  1. idea 配置springmvc+mybatis(图文教程)

    idea配置 spirngmvc+maven+mybatis 数据库采用的是mysql  服务器容器用的是tomcat8 废话不多说直接干! 首先新建一个 maven工程, "File&qu ...

  2. 如何让VS2013编写的程序在xp下运行

    总体分c++程序和c#程序 1.c++程序 这个用C++编写的程序可以经过设置后在XP下运行,主要的“平台工具集”里修改就可以. 额外说明:(1)程序必须为Dotnet 4.0及以下版本.(XP只支持 ...

  3. Win10 64bit下安装GPU版Tensorflow+Keras

    Tensorflow和Keras都是支持Python接口的,所以本文中说的都是搭建一个Python的深度学习环境. Keras是对Tensorflow或者Theano的再次封装,也就是以Tensorf ...

  4. HDU 1043

    http://acm.hdu.edu.cn/showproblem.php?pid=1043 http://www.cnblogs.com/goodness/archive/2010/05/04/17 ...

  5. 密钥库文件格式[keystore]代码

    密钥库文件格式[keystore]代码 格式    :     JKS 扩展名  :      .jks/.ks 描述    :     [Java Keystore]密钥库的Java实现版本,pro ...

  6. Mvc6 错误Microsoft.AspNet.Http.Features.IRequestIdentifierFeature

    System.TypeLoadException 未能从程序集“Microsoft.AspNet.Http.Features, Version=1.0.0.0, Culture=neutral, Pu ...

  7. WebForm、MVC图片加载失败处理

    还是那个该死的WebFrom项目,部分功能替换为MVC后感觉好多了,但是WebForm.MVC都有图片加载失败时显示提示图片的需求,并且统一在js中处理.问题来了,js中图片路径怎么处理呢?现场有可能 ...

  8. javascript的slice()与splice()方法

    (1)数组和String对象都有slice()方法. //Array var list = ['A','B','C','D','DS']; console.log(list.slice(,));//截 ...

  9. 在notepad++中插件安装的办法

    在notepad++中插件安装的办法新版的notepad++去掉了一个叫做插件管理工具的插件.这就导致我们不能通过界面去安装notepad++的一些比较方便的插件了.本文通过手动安装插件管理工具和ft ...

  10. 一图说明offsetTop、top、clientTop、scrollTop等

    offsetParent:该属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),已进行过CSS定位的容器元素. 如果这个容器元素未进行CSS定位, ...