Sqlite--Java使用jdbc连接Sqlite数据库进行各种数据操作的详细过程

引:

    1, Sqlite在Windows、Linux 和 Mac OS X 上的安装过程

    2,嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录

    3,嵌入式数据库事务理解以及实例操作

    4,数据迁移备份--从低版本3.6.2到高版本3.8.6

 

序言:

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


一,准备sqlite数据源
由于sqlite是内存数据库,还会有一个数据文件,本质上是去访问一个文件,所以可以把linux下的sqlite的库文件copy出来到自己笔记本本地,然后在调用java程序访问操作sqlite库。

(1),安装sqlite
下载地址: Wget http://www.sqlite.org/2014/sqlite-autoconf-3080403.tar.gz
开始安装:
tar xvfz sqlite-autoconf-3080403.tar.gz
cd sqlite-autoconf-3080403
./configure --prefix=/usr/local
make
make install

(2),准备数据源
[root@localhost sqlite-autoconf-3080403]# sqlite3 tim.db
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
sqlite> .table
sqlite> create table t1(id int);
sqlite> insert into t1 select 1;
sqlite> .exit
[root@localhost sqlite-autoconf-3080403]# ll tim.db
-rw-r--r-- 1 root root 2048 Aug 29 09:34 tim.db
[root@localhost sqlite-autoconf-3080403]# 

(3),通过SecureFX工具把tim.db数据文件copy到本地磁盘E盘根目录下面,如下图所示:




二,开始准备Eclipse环境
加载jdbc的jar包,jdbc的jar包 sqlitejdbc-v033-nested.jar,下载地址为:http://pan.baidu.com/s/1hqj7tT6

并且将其添加到classpath系统环境变量中:点击java工程右键,选择最后一个选项Properties,再选择Java Build Path,再选择Libraries,再选择Add External JARs...,然后加载本地的sqlitejdbc-v033-nested.jar包,加载路径过程如下图所示:



三,编写java代码连接sqlite数据库操作
(1),创建java代码测试类

 

package foo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

 

/**

 * @author Tim

 */

public class JavaSqlite {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        try {

            // 0 连接SQLite的JDBC

            String sql=\"jdbc:sqlite://e:/tim.db\";

            Class.forName(\"org.sqlite.JDBC\");

 

            // 1 建立一个数据库名zieckey.db的连接,如果不存在就在当前目录下创建之

            Connection conn = DriverManager.getConnection(sql);

            Statement stat = conn.createStatement();

            

            // 2 创建一个表tbl1,录入数据

            stat.executeUpdate(\"drop table if exists tbl1;\");

            stat.executeUpdate(\"create table if not exists tbl1(name varchar(20), salary int);\");// 创建一个表,两列

            stat.executeUpdate(\"insert into tbl1 values(\'ZhangSan\',8000);\"); // 插入数据

            stat.executeUpdate(\"insert into tbl1 values(\'LiSi\',7800);\");

            stat.executeUpdate(\"insert into tbl1 values(\'WangWu\',5800);\");

            stat.executeUpdate(\"insert into tbl1 values(\'ZhaoLiu\',9100);\");

            ResultSet rs = stat.executeQuery(\"select * from tbl1;\"); // 查询数据

            System.out.println(\"创建表结构录入数据操作演示:\");

            while (rs.next()) { // 将查询到的数据打印出来

                System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性一

                System.out.println(\"salary = \" + rs.getString(\"salary\")); // 列属性二

            }

            rs.close();

            

            

            // 3 修改表结构,添加字段 address varchar(20) default \'changsha\';

            stat.executeUpdate(\"alter table tbl1 add column address varchar(20) not null default \'changsha\'; \");// 创建一个表,两列

            stat.executeUpdate(\"insert into tbl1 values(\'HongQi\',9000,\'tianjing\');\"); // 插入数据

            stat.executeUpdate(\"insert into tbl1(name,salary) values(\'HongQi\',9000);\"); // 插入数据

            rs = stat.executeQuery(\"select * from tbl1;\"); // 查询数据

            System.out.println(\"表结构变更操作演示:\");

            while (rs.next()) { // 将查询到的数据打印出来

                System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性一

                System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性二

                System.out.println(\"address = \" + rs.getString(\"address\")); // 列属性三

            }

            rs.close();

            

            conn.close(); // 结束数据库的连接

            

        } catch (Exception e) {

            e.printStackTrace();

        }

 

    }

 

}


四,调试运行:
(1),第一次调试报错如下:
Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)

解决方法:首先需要将sqlitejdbc-v056.jar包加入到工程中:
右键你的工程->Build Path->configure Build Path->Libraries->Add External JARs->
找到sqlitejdbc-v033-nested.jar包就可以了。

(2),再运行报错如下:
jdbc:sqlite://E:/u/sqllite/db/powerlong_208.db
java.sql.SQLException: out of memory
at org.sqlite.DB.throwex(DB.java:252)
at org.sqlite.NestedDB.open(NestedDB.java:47)
at org.sqlite.Conn.(Conn.java:36)
at org.sqlite.JDBC.connect(JDBC.java:38)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at foo.Main.main(Main.java:41)

问题解决:是数据源的路径有问题,java不识别大写的E:盘,String sql="jdbc:sqlite://E:/tim.db";中的E:换成e:就可以调试通过了。


五,运行结果,代码类里面右键选择Run As,再选择Java Application,执行结果如下所示:
创建表结构录入数据操作演示:
name = ZhangSan, salary = 8000
name = LiSi, salary = 7800
name = WangWu, salary = 5800
name = ZhaoLiu, salary = 9100
表结构变更操作演示:
name = ZhangSan, name = ZhangSan, address = changsha
name = LiSi, name = LiSi, address = changsha
name = WangWu, name = WangWu, address = changsha
name = ZhaoLiu, name = ZhaoLiu, address = changsha
name = HongQi, name = HongQi, address = tianjing
name = HongQi, name = HongQi, address = changsha

操作界面如下所示:



六,后续继续研究:
(1)windows下研究sqlite安装使用
(2)java代码如何直接远程连接linux上面的sqlite库


 

你可能感兴趣的:(sqlite)