1. 程式人生 > >[Sqlite]-->Java使用jdbc連線Sqlite資料庫進行各種資料操作的詳細過程

[Sqlite]-->Java使用jdbc連線Sqlite資料庫進行各種資料操作的詳細過程

引:

序言:

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),準備資料來源
[[email protected] 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
[[email protected] sqlite-autoconf-3080403]# ll tim.db
-rw-r--r-- 1 root root 2048 Aug 29 09:34 tim.db
[[email protected] 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.             // 2 建立一個表tbl1,錄入資料
  20.             stat.executeUpdate(\"drop table if exists tbl1;\");
  21.             stat.executeUpdate(\"create table if not exists tbl1(name varchar(20), salary int);\");// 建立一個表,兩列
  22.             stat.executeUpdate(\"insert into tbl1 values(\'ZhangSan\',8000);\"); // 插入資料
  23.             stat.executeUpdate(\"insert into tbl1 values(\'LiSi\',7800);\");
  24.             stat.executeUpdate(\"insert into tbl1 values(\'WangWu\',5800);\");
  25.             stat.executeUpdate(\"insert into tbl1 values(\'ZhaoLiu\',9100);\");
  26.             ResultSet rs = stat.executeQuery(\"select * from tbl1;\"); // 查詢資料
  27.             System.out.println(\"建立表結構錄入資料操作演示:\");
  28.             while (rs.next()) { // 將查詢到的資料打印出來
  29.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列屬性一
  30.                 System.out.println(\"salary = \" + rs.getString(\"salary\")); // 列屬性二
  31.             }
  32.             rs.close();
  33.             // 3 修改表結構,新增欄位 address varchar(20) default \'changsha\';
  34.             stat.executeUpdate(\"alter table tbl1 add column address varchar(20) not null default \'changsha\'; \");// 建立一個表,兩列
  35.             stat.executeUpdate(\"insert into tbl1 values(\'HongQi\',9000,\'tianjing\');\"); // 插入資料
  36.             stat.executeUpdate(\"insert into tbl1(name,salary) values(\'HongQi\',9000);\"); // 插入資料
  37.             rs = stat.executeQuery(\"select * from tbl1;\"); // 查詢資料
  38.             System.out.println(\"表結構變更操作演示:\");
  39.             while (rs.next()) { // 將查詢到的資料打印出來
  40.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列屬性一
  41.                 System.out.print(\"name = \" + rs.getString(\"name\") + \", \"); // 列屬性二
  42.                 System.out.println(\"address = \" + rs.getString(\"address\")); // 列屬性三
  43.             }
  44.             rs.close();
  45.             conn.close(); // 結束資料庫的連線
  46.         } catch (Exception e) {
  47.             e.printStackTrace();
  48.         }
  49.     }
  50. }

四,除錯執行:
(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庫





相關推薦

Java使用jdbc連線Sqlite資料庫,進行各種資料操作

前言:SQLite是遵守ACID 的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。一,準備sqlite資料來源由於sqlite是記憶體資料庫,還會有一個數據檔案,本質上是去訪問一個檔案,所以可以把linux下的sqlit

[Sqlite]-->Java使用jdbc連線Sqlite資料庫進行各種資料操作詳細過程

引:序言:SQLite是遵守ACID 的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。       不像常見的客戶-伺服器範例,SQLite引擎不是個程式與之通訊的獨立程序,而是連線到程式中成為它的一個主要部分。所以主要的

hibernate連線oracle資料庫進行查詢

按主鍵查詢  dao層 public Emp get(Serializable id){ //通過session的get方法根據載入指定物件 return (Emp)HibernateUtil.currentSession().get(Emp.class,id);

python連線MySQL資料庫並讀取資料

# 匯入模組 import pymysql # 1.連線到mysql資料庫 conn = pymysql.connect(host='localhost', user='root', password='1234', db='mycommodity', cha

pycharm 連線redis資料庫進行事務操作

import redis pool = redis.ConnectionPool(db=1, decode_responses=True) r = redis.Redis(connection_pool=pool) # 建立管道 pipe = r.pipeline()

python3用pymysql連線mysql資料庫進行操作

原創文章,轉載請註明出處 pymysql是python3特有的,python2沒有,只能用mysqldb 需提前建好資料庫和對應的表 第一步,安裝pymysql pip install PyMySQL 第二步,資料庫連線及獲得遊標物件 cursor # 開啟資料庫連線 db

Navicat 連線mysql資料庫,表資料顯示亂碼

解決方法: 1.navicat裡右擊一個連線,選擇連線屬性,切換到高階選項卡,去掉“使用mysql字符集”前的對勾,在編碼裡選擇utf-8,這種方法對於部分問題可能適合。 2.可能是mysql的配置檔案有問題,就是在mysql 的安裝目錄下的my.ini檔案

MySQL 連線本地資料庫、遠端資料庫命令

一、MySQL 連線本地資料庫,使用者名稱為“root”,密碼“123”(注意:“-p”和“123” 之間不能有空格) C:/>mysql -h localhost -u root -p123 二、MySQL 連線遠端資料庫(192.168.0.201),埠“330

#菜鳥新手EclipseJavaEE&MySQL&Tomcat#關於一個Eclipse中登陸介面通過連線MySQL資料庫進行驗證的小體驗(感謝qq群友引燃的解答讓我解決這個小問題)

原始碼: package com.atguigu.javaweb; import java.io.IOException; import java.io.PrintWriter; import java.sql.DriverManager; import j

PowerDesigner連線oracle資料庫,oracle資料匯入PowerDesigner

問題描述:由於很多資料庫都是用toad在oracle上建立的,但現在要把相應的表匯入到PowerDesigner中。 解決方法:介於現在很多人很多時候在建資料庫時都是用toad直接在oracle上建的。但需要用到關係圖時,又得一個表一個表的手動匯入到Powerdesigne

【190104】VC++ Oracle資料庫進行資料查詢原始碼

原始碼下載簡介 VC++應用Oracle資料庫進行大資料查詢,包括儲存過程、分頁查詢,使用注意事項:   1,先建立mytable表:   create table mytable(empno, ename, job, mgr, sal, comm, deptno) as select em

使用jdbc連線ORACLE資料庫進行查詢的一個例子

      五一放假了,閒來無事學習瞭解了一下JDBC,製作了一個簡單的例子。 1.首先準備資料: 首先開啟oracle 建立一張表EC_ORG_ROLE,表的欄位截圖如下 建立的語句為: CREATE TABLE "EC_ORG_ROLE" ( "ID" NU

用VS2017的MFC連線mysql資料庫並寫入資料

第一步:新建一個基於對話方塊的MFC專案:                                                          第二步:對專案進行配置,讓它可以用程式碼

【java 操作mysql】java連線mysql資料庫並查詢資料

做java開發不可避免要處理資料庫,所以這裡寫篇用jdbc來連線mysql的文章,java是一種高效能,通用的語言 。這使得它適合於編寫高效的ETL生產程式碼和計算密集型的機器學習演算法。 主要內容包括: 1、java連線mysql 2、java查詢my

python 遠端連線MySQL資料庫 拉取資料存至本地檔案

1.連線資料庫 這裡預設大家都已經配置安裝好 MySQL 和 Python 的MySQL 模組,且預設大家的DB內表和訪問賬號許可權均已設定無誤,下面直接程式碼演示: # -*- codin

python連線oracel資料庫,提取資料後製圖並通過郵件傳送

總體要求:                通過python自動從oracle提取原始資料,對原始資料製圖,併發送郵件。發郵件時,通過oracle提取的資料儲存為excel作為附件傳送,圖片及相關文字內容通過郵件正文傳送。 =========================

python 連線mysql資料庫 進行增刪改查操作

1、在進行連線之前我們要確定我們已經安裝了python和mysql(開玩笑,沒有這個你怎麼連線那)至於安裝的過程在此略過, 2、因為要進行連線mysqldb 所有我們要匯入MySQLdb的模組,當然這個模組在預設的python中是沒有的,https://pypi.pytho

jdbc連線Oracle/MySQL資料庫進行批量匯入操作,如何提高效率???

package com.test.main; import java.sql.BatchUpdateException; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Date; impor

Jmeter連線SqlServer資料庫進行壓力測試

Jmeter連線SqlServer資料庫進行壓力測試 前提準備:先安裝jdbc驅動 驅動下載連結地址:http://pan.baidu.com/s/1bpDpjSr 密碼:v6tn     下載解壓之

Geotools系列之Geotools連線Hbase資料庫並讀取資料

本文主要講通過GeoTools API 連線Hbase資料庫,並且獲得資料   新增pom依賴 <properties> <geotools.version>20.0</geotools.version> <hbas