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

news/2024/7/2 1:24:08
               

引:

    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代码测试类
  1. package foo;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;

  6. /**
  7.  * @author Tim
  8.  */
  9. public class JavaSqlite {

  10.     public static void main(String[] args) {
  11.         // TODO Auto-generated method stub
  12.         try {
  13.             // 0 连接SQLite的JDBC
  14.             String sql=\"jdbc:sqlite://e:/tim.db\";
  15.             Class.forName(\"org.sqlite.JDBC\");

  16.             // 1 建立一个数据库名zieckey.db的连接,如果不存在就在当前目录下创建之
  17.             Connection conn = DriverManager.getConnection(sql);
  18.             Statement stat = conn.createStatement();
  19.             
  20.             // 2 创建一个表tbl1,录入数据
  21.             stat.executeUpdate(\"drop table if exists tbl1;\");
  22.             stat.executeUpdate(\"create table if not exists tbl1(name varchar(20), salary int);\");// 创建一个表,两列
  23.             stat.executeUpdate(\"insert into tbl1 values(\'ZhangSan\',8000);\"); // 插入数据
  24.             stat.executeUpdate(\"insert into tbl1 values(\'LiSi\',7800);\");
  25.             stat.executeUpdate(\"insert into tbl1 values(\'WangWu\',5800);\");
  26.             stat.executeUpdate(\"insert into tbl1 values(\'ZhaoLiu\',9100);\");
  27.             ResultSet rs = stat.executeQuery(\"select * from tbl1;\"); // 查询数据
  28.             System.out.println(\"创建表结构录入数据操作演示:\");
  29.             while (rs.next()) { // 将查询到的数据打印出来
  30.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性一
  31.                 System.out.println(\"salary = \" + rs.getString(\"salary\")); // 列属性二
  32.             }
  33.             rs.close();
  34.             
  35.             
  36.             // 3 修改表结构,添加字段 address varchar(20) default \'changsha\';
  37.             stat.executeUpdate(\"alter table tbl1 add column address varchar(20) not null default \'changsha\'; \");// 创建一个表,两列
  38.             stat.executeUpdate(\"insert into tbl1 values(\'HongQi\',9000,\'tianjing\');\"); // 插入数据
  39.             stat.executeUpdate(\"insert into tbl1(name,salary) values(\'HongQi\',9000);\"); // 插入数据
  40.             rs = stat.executeQuery(\"select * from tbl1;\"); // 查询数据
  41.             System.out.println(\"表结构变更操作演示:\");
  42.             while (rs.next()) { // 将查询到的数据打印出来
  43.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性一
  44.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列属性二
  45.                 System.out.println(\"address = \" + rs.getString(\"address\")); // 列属性三
  46.             }
  47.             rs.close();
  48.             
  49.             conn.close(); // 结束数据库的连接
  50.             
  51.         } catch (Exception e) {
  52.             e.printStackTrace();
  53.         }

  54.     }

  55. }

四,调试运行:
(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.<init>(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库





           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow


http://www.niftyadmin.cn/n/3653835.html

相关文章

(原) 我要地图 pk Google地图

要做关于电子地图PK的分析&#xff0c;首先需要给大家介绍一个概念&#xff1a;地标。通俗说来&#xff0c;地标就是地理位置上的标志性物体&#xff0c;可以是建筑&#xff0c;设施&#xff0c;地理位置名称等等。一般来说&#xff0c;地标不会轻易发生变化&#xff0c;就像一…

mycat 不得不说的缘分

1&#xff0c;愕然回首&#xff0c;它在灯火阑珊处关于mysql集群中间件&#xff0c;以前写在应用程序里面&#xff0c;由开发人员实现&#xff0c;在配置文件里面写多个数据源&#xff0c;写库一个数据源&#xff0c;读库一个数据源&#xff0c;笨拙不高效&#xff0c;由于程序…

(转)Google地图API之优劣分析

Google最重要的产品不仅仅是网页搜索和Gmail&#xff0c;Google其实有一个重要的宝贝产品&#xff0c;就是Google Earth/Maps&#xff0c;即卫星地图&#xff08;或常规地图&#xff09;。这个产品如果开发的好的话&#xff0c;可以使得Google在地图领域中建立新的权威优势。 G…

Nginx 访问静态资源报错404 Not Found 的问题解决过程

1、静态资源访问报错404&#xff1a;[nginxdev_121_21 tmp]$ wget http://bsstatic.powerlong.com/commonStatic/css/merchant_patch.css --2016-11-22 18:18:28-- http://bsstatic.powerlong.com/commonStatic/css/merchant_patch.css 正在解析主机 bsstatic.powerlong.c…

(转)Google Maps API编程资源大全

Google Maps API是Google自己推出编程API&#xff0c;可以让全世界对Google Maps有兴趣的程序设计师自行开发基于Google Maps的服务&#xff0c;建立自己的地图网站。以下是我在Google Maps API开发过程中找到的一些API的编程资源&#xff0c;包括中文文档&#xff0c;中文说明…

zabbix3 0 2 通过orabbix来监控oracle11g增强版的详细过程

-->Orabbix简介说明orabbix是一个用来监控oracle数据库性能的zabbix插件工具&#xff0c;通过安装在被监控服务器上客户端上收集数据并传给zabbix服务器端&#xff0c;然后通过调用图形显示。具有以下功能&#xff1a;(1)、数据库版本(2)、归档文件(3)、等待的事件&#xff…

(转)中文Google地图的发展前景

最近大家打开Google的中文首页&#xff0c;应该发现了一些变化&#xff0c;就是多了“地图”这个功能。Google地图是一个非常有特色的产品&#xff0c;在官方没有进行太多宣传的情况下&#xff0c;其在中国的影响也是非常巨大的&#xff0c;虽然因为种种原因&#xff0c;这个产…

MySQL的Replace into 与Insert into on duplicate key updat

今天听同事介绍oracle到mysql的数据migration&#xff0c;他用了Insert into ..... on duplicate key update ...&#xff0c;我当时就想怎么不用Replace呢&#xff0c;于是回来就仔细查了下&#xff0c;它们果然还是有区别的&#xff0c;看下面的例子吧&#xff1a;1 Replace …