1:sqllite中文网站
http://www.sqlite.com.cn/
2:sqllite 在java中的使用:
1):jdbc包见附件,(管理软件(SQLiteExpert):http://www.xiazaiba.com/html/2771.html)
2):建库
sqlite.exe gbz.db #文件名 即库名 .databases 可以查看当前加载到内存中的库
3):建表(表名不能以sqlite_开头)
CREATE TABLE testtable (first_col integer); #.table 可以查看所有表
可以创建表时指定默认值
CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT 'hello');
为其它数据库创建表
ATTACH DATABASE 'd:/mydb.db' AS mydb; #库为mydb
CREATE TABLE mydb.testtable (first_col integer);
CREATE TABLE mydb.testtable (first_col integer);
创建临时表(关闭链接时temp表消失)
CREATE TEMP TABLE temptable(first_col integer);
保存退出
.backup d:/mydb.db #到指定库
问题:覆盖创建(除非当前的表名和某一索引名冲突)
sqlite> create table gbz(aaa integer); #gbz已经存在
Error: table gbz already exists
sqlite> create table if not exists gbz(aaa integer);
Error: table gbz already exists
sqlite> create table if not exists gbz(aaa integer);
使用select结果集创建表(只有数据)
CREATE TABLE testtable2 AS SELECT * FROM testtable; #.schema gbz 查看创表语句
4):约束
6. 主键约束:
--直接在字段的定义上指定主键。
sqlite> CREATE TABLE testtable (first_col integer PRIMARY KEY ASC);
--在所有字段已经定义完毕后,再定义表的数约束,这里定义的是基于first_col和second_col的联合主键。
sqlite> CREATE TABLE testtable2 (...> first_col integer,...> second_col integer,
...> PRIMARY KEY (first_col,second_col)...> );
和其他关系型数据库一样,主键必须是唯一的。
7. 唯一性约束:
--直接在字段的定义上指定唯一性约束。
sqlite> CREATE TABLE testtable (first_col integer UNIQUE);
--在所有字段已经定义完毕后,在定义表的唯一性约束,这里定义的是基于两个列的唯一性约束。
sqlite> CREATE TABLE testtable2 (...> first_col integer,...> second_col integer,
...> UNIQUE (first_col,second_col)...> );
在SQLite中,NULL值被视为和其他任何值都是不同的,这样包括和其他的NULL值,如下例:
sqlite> DELETE FROM testtable;
sqlite> SELECT count(*) FROM testtable;count(*)----------0
sqlite> INSERT INTO testtable VALUES(NULL);sqlite> INSERT INTO testtable VALUES(NULL);sqlite> SELECT count(*) FROM testtable;count(*)----------2
由此可见,两次插入的NULL值均插入成功。
8. 为空(NOT NULL)约束:
sqlite> CREATE TABLE testtable(first_col integer NOT NULL);sqlite> INSERT INTO testtable VALUES(NULL);Error: testtable.first_col may not be NULL
从输出结果可以看出,first_col已经被定义了非空约束,因此不能在插入NULL值了。
9. 检查性约束:
sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));sqlite> INSERT INTO testtable VALUES(4);
sqlite> INSERT INTO testtable VALUES(20); -- 20违反了字段first_col的检查性约束(first_col < 5)
Error: constraint failed
--和之前的其它约束一样,检查性约束也是可以基于表中的多个列来定义的。
sqlite> CREATE TABLE testtable2 (...> first_col integer,...> second_col integer,
...> CHECK (first_col > 0 AND second_col < 0)...> );
--直接在字段的定义上指定主键。
sqlite> CREATE TABLE testtable (first_col integer PRIMARY KEY ASC);
--在所有字段已经定义完毕后,再定义表的数约束,这里定义的是基于first_col和second_col的联合主键。
sqlite> CREATE TABLE testtable2 (...> first_col integer,...> second_col integer,
...> PRIMARY KEY (first_col,second_col)...> );
和其他关系型数据库一样,主键必须是唯一的。
7. 唯一性约束:
--直接在字段的定义上指定唯一性约束。
sqlite> CREATE TABLE testtable (first_col integer UNIQUE);
--在所有字段已经定义完毕后,在定义表的唯一性约束,这里定义的是基于两个列的唯一性约束。
sqlite> CREATE TABLE testtable2 (...> first_col integer,...> second_col integer,
...> UNIQUE (first_col,second_col)...> );
在SQLite中,NULL值被视为和其他任何值都是不同的,这样包括和其他的NULL值,如下例:
sqlite> DELETE FROM testtable;
sqlite> SELECT count(*) FROM testtable;count(*)----------0
sqlite> INSERT INTO testtable VALUES(NULL);sqlite> INSERT INTO testtable VALUES(NULL);sqlite> SELECT count(*) FROM testtable;count(*)----------2
由此可见,两次插入的NULL值均插入成功。
8. 为空(NOT NULL)约束:
sqlite> CREATE TABLE testtable(first_col integer NOT NULL);sqlite> INSERT INTO testtable VALUES(NULL);Error: testtable.first_col may not be NULL
从输出结果可以看出,first_col已经被定义了非空约束,因此不能在插入NULL值了。
9. 检查性约束:
sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));sqlite> INSERT INTO testtable VALUES(4);
sqlite> INSERT INTO testtable VALUES(20); -- 20违反了字段first_col的检查性约束(first_col < 5)
Error: constraint failed
--和之前的其它约束一样,检查性约束也是可以基于表中的多个列来定义的。
sqlite> CREATE TABLE testtable2 (...> first_col integer,...> second_col integer,
...> CHECK (first_col > 0 AND second_col < 0)...> );
5):其它
二、表的修改:
SQLite对ALTER TABLE命令支持的非常有限,仅仅是修改表名和添加新字段。其它的功能,如重命名字段、删除字段和添加删除约束等均为提供支持。
1. 修改表名:
需要先说明的是,SQLite中表名的修改只能在同一个数据库中,不能将其移动到Attached数据库中。再有就是一旦表名被修改后,该表已存在的索引将不会受到影响,然而依赖该表的视图和触发器将不得不重新修改其定义。
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> ALTER TABLE testtable RENAME TO testtable2;sqlite> .tablestesttable2
通过.tables命令的输出可以看出,表testtable已经被修改为testtable2。
2. 新增字段:
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;sqlite> .schema testtable
CREATE TABLE "testtable" (first_col integer, second_col integer);
通过.schema命令的输出可以看出,表testtable的定义中已经包含了新增字段。
关于ALTER TABLE最后需要说明的是,在SQLite中该命令的执行时间是不会受到当前表行数的影响,也就是说,修改有一千万行数据的表和修改只有一条数据的表所需的时间几乎是相等的。
三、表的删除:
在SQLite中如果某个表被删除了,那么与之相关的索引和触发器也会被随之删除。在很多其他的关系型数据库中是不可以这样的,如果必须要删除相关对象,只能在删除表语句中加入WITH CASCADE从句。见如下示例:
sqlite> CREATE TABLE testtable (first_col integer);sqlite> DROP TABLE testtable;sqlite> DROP TABLE testtable;Error: no such table: testtable
sqlite> DROP TABLE IF EXISTS testtable;
从上面的示例中可以看出,如果删除的表不存在,SQLite将会报错并输出错误信息。如果希望在执行时不抛出异常,我们可以添加IF EXISTS从句,该从句的语义和CREATE TABLE中的完全相同。
四、创建视图:
我们这里只是给出简单的SQL命令示例,具体的含义和技术细节可以参照上面的创建数据表部分,如临时视图、"IF NOT EXISTS"从句等。
1. 最简单的视图:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
2. 创建临时视图:
sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;
3. "IF NOT EXISTS"从句:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;Error: table testview already exists
sqlite> CREATE VIEW IF NOT EXISTS testview AS SELECT * FROM testtable WHERE first_col > 100;
五、删除视图:
该操作的语法和删除表基本相同,因此这里只是给出示例:sqlite> DROP VIEW testview;sqlite> DROP VIEW testview;Error: no such view: testview
sqlite> DROP VIEW IF EXISTS testview;
SQLite对ALTER TABLE命令支持的非常有限,仅仅是修改表名和添加新字段。其它的功能,如重命名字段、删除字段和添加删除约束等均为提供支持。
1. 修改表名:
需要先说明的是,SQLite中表名的修改只能在同一个数据库中,不能将其移动到Attached数据库中。再有就是一旦表名被修改后,该表已存在的索引将不会受到影响,然而依赖该表的视图和触发器将不得不重新修改其定义。
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> ALTER TABLE testtable RENAME TO testtable2;sqlite> .tablestesttable2
通过.tables命令的输出可以看出,表testtable已经被修改为testtable2。
2. 新增字段:
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;sqlite> .schema testtable
CREATE TABLE "testtable" (first_col integer, second_col integer);
通过.schema命令的输出可以看出,表testtable的定义中已经包含了新增字段。
关于ALTER TABLE最后需要说明的是,在SQLite中该命令的执行时间是不会受到当前表行数的影响,也就是说,修改有一千万行数据的表和修改只有一条数据的表所需的时间几乎是相等的。
三、表的删除:
在SQLite中如果某个表被删除了,那么与之相关的索引和触发器也会被随之删除。在很多其他的关系型数据库中是不可以这样的,如果必须要删除相关对象,只能在删除表语句中加入WITH CASCADE从句。见如下示例:
sqlite> CREATE TABLE testtable (first_col integer);sqlite> DROP TABLE testtable;sqlite> DROP TABLE testtable;Error: no such table: testtable
sqlite> DROP TABLE IF EXISTS testtable;
从上面的示例中可以看出,如果删除的表不存在,SQLite将会报错并输出错误信息。如果希望在执行时不抛出异常,我们可以添加IF EXISTS从句,该从句的语义和CREATE TABLE中的完全相同。
四、创建视图:
我们这里只是给出简单的SQL命令示例,具体的含义和技术细节可以参照上面的创建数据表部分,如临时视图、"IF NOT EXISTS"从句等。
1. 最简单的视图:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
2. 创建临时视图:
sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;
3. "IF NOT EXISTS"从句:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;Error: table testview already exists
sqlite> CREATE VIEW IF NOT EXISTS testview AS SELECT * FROM testtable WHERE first_col > 100;
五、删除视图:
该操作的语法和删除表基本相同,因此这里只是给出示例:sqlite> DROP VIEW testview;sqlite> DROP VIEW testview;Error: no such view: testview
sqlite> DROP VIEW IF EXISTS testview;
我的java代码:
private Connection getConn() { Connection conn = null; String resource = System.getProperty("user.dir");//"C:\\Users\\baozong.gao\\Desktop\\财务程序"; try { Class.forName("org.sqlite.JDBC"); conn = DriverManager.getConnection("jdbc:sqlite:/" + resource + "\\Configuration\\billDataBase.db"); } catch (SQLException e) { logger.error("连接本地数据库错误"); } catch (ClassNotFoundException e) { logger.error("连接本地数据库错误"); } return conn; }
因为它会把内存中的数据更新到本地文件,所以每次提交都会open文件,耗时较长
protected void save(List<List<String>> sqlParameterList) { Connection conn = getConn(); try { PreparedStatement ps = conn .prepareStatement("INSERT INTO EXCEL_MEM VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); for (List<String> sqlParameter : sqlParameterList) { for (int i = 0; i < sqlParameter.size(); i++) { ps.setString(i + 1, sqlParameter.get(i)); } ps.addBatch(); } conn.setAutoCommit(false);// 提高性能 ps.executeBatch(); conn.setAutoCommit(true); ps.close(); conn.close(); } catch (SQLException e) { logger.error("保存数据错误"); } }
相关推荐
本示例将详细讲解如何在Android中使用SQLite进行简单的数据操作。 首先,我们需要在Android项目中创建一个SQLite数据库。这通常通过实现`SQLiteOpenHelper`类来完成。`SQLiteOpenHelper`是Android提供的一个抽象类...
以下是一个简单的示例,演示如何使用`sqlite3_step`和`sqlite3_column`遍历结果集: ```cpp int fieldCount = sqlite3_column_count(stmt); while (sqlite3_step(stmt) == SQLITE_ROW) { for (int i = 0; i ; ++i)...
这篇Demo源码提供了一个简单易懂的示例,帮助开发者了解如何在C# ASP.NET项目中集成并使用SQLite数据库。 首先,SQLite的优势在于其轻量级特性,不需要额外的服务器进程,可以直接嵌入到应用程序中。这使得它在单机...
`HapaGameSqlCache.cpp` 和 `HapaGameSqlCache.h` 可能已经封装了这些函数,提供更简单的接口,如 `executeSQL()` 和 `fetchData()`。 事务处理在 SQLite 中也很重要,可以确保数据的一致性。`BEGIN`, `COMMIT` 和 ...
例如,在移动设备或嵌入式系统中,SqlLite凭借其简单的安装和使用方式成为首选。 #### 五、总结 SqlLite作为一款轻量级的数据库管理系统,具有独特的优点,适用于各种不同的应用场景。通过对SqlLite的基本操作和...
Android 使用sqllite 实现listView上拉加载,简单易懂,适合新手学习sqllite以及自定义listview
这个“sqllite3解压即可使用”的压缩包包含了一个SQLite3的可执行文件sqlite3.exe,这意味着用户可以直接运行这个文件来与SQLite3数据库进行交互,无需复杂的安装过程。 SQLite3的主要特点包括: 1. **轻量级**:...
SQLite是一款轻量级的数据库管理系统,它无需独立服务器进程,可以直接嵌入到应用程序中使用,因此在移动设备和嵌入式系统中广泛应用。SQLite支持SQL标准,并提供了多种数据类型,如整型、浮点型、字符串和二进制...
此留言板比较简单,主要是采用php+Sqllite制作的。 Sqllite数据库不用导入,直接就可以使用,比较简单。 详细也可以看http://blog.csdn.net/huangjianxiang1875/article/details/7787448
总之,SQLite以其简单易用、小巧高效的特点,成为了许多嵌入式应用和轻量级数据存储的理想选择。对于想要了解数据库工作原理的开发者,阅读其源码也是个不错的学习途径。在.NET环境中,SQLite提供了良好的集成支持,...
【Java代码 MySql导出到SqlLite】是一种技术实践,它涉及到使用Java编程语言来实现一个功能,该功能能够将MySQL数据库中的数据高效地导出到SQLite数据库文件中。这一过程通常用于数据迁移、备份或者在不同环境之间...
标签“Delphi SQLLite”进一步强调了这个主题是关于Delphi开发环境和SQLite数据库的结合。通过这样的组合,开发者可以构建高效、可靠的数据库驱动应用程序,而无需依赖大型数据库服务器,特别适合于桌面应用和嵌入式...
条件数据库Android:sqllite的简单使用,需要的朋友可以参考一下
### SQLLITE的查询优化 在使用SQLite的过程中,我们往往会遇到查询性能问题,尤其是在处理大量数据时。本文将深入探讨一些提高SQLite查询效率的方法和技术,包括但不限于查询转换、索引利用以及减少不必要的计算等...
标题中的"SQLite数据库UI工具"指的是用于图形化操作SQLite数据库的应用程序,它们提供了用户友好的界面,使得创建、查询、修改和管理SQLite数据库文件变得更加直观和简单。由于SQLite官方并未提供官方的UI工具,所以...
插入、更新和删除数据也很简单,只需调用`Add`、`Update`或`Remove`方法,然后调用`SaveChanges`即可。 6. **事务处理**:如果你需要确保一系列数据库操作的原子性,可以使用`DbContext`的`BeginTransaction`、`...
1. **文件格式**:SQLite3将数据库存储为单个磁盘文件,这使得数据迁移和备份变得极其简单。数据库文件扩展名为`.db`,可以跨平台使用。 2. **SQL支持**:SQLite3支持大部分标准SQL语法,包括SELECT、INSERT、...
在SQLite中,创建数据库非常简单,通常只需要通过SQLite管理工具进行。这个压缩包内包含的"SqlLite管理工具(创建数据库)"很可能是一个图形界面的应用程序,使得用户可以通过直观的界面来创建、修改和管理数据库。你...