[Sqlite] Java使用jdbc連線Sqlite資料庫進行各種資料操作的詳細過程
前言:
SQLite是遵守ACID 的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。
不像常見的客戶-伺服器範例,SQLite引擎不是個程式與之通訊的獨立程式,而是連線到程式中成為它的一個主要部分。所以主要的通訊協議是在程式語言內的直接API呼叫。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個資料庫(定義、表、索引和資料本身)都在宿主主機上儲存在一個單一的檔案中。它的簡單的設計是透過在開始一個事務的時候鎖定整個資料檔案而完成的。
一,準備sqlite資料來源
由於sqlite是記憶體資料庫,還會有一個資料檔案,本質上是去訪問一個檔案,所以可以把linux下的sqlite的庫檔案copy出來到自己筆記本本地,然後在呼叫java程式訪問操作sqlite庫。
(1),安裝sqlite
下載地址: Wget
開始安裝:
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,下載地址為:
並且將其新增到classpath系統環境變數中:點選java工程右鍵,選擇最後一個選項Properties,再選擇Java Build Path,再選擇Libraries,再選擇Add External JARs...,然後載入本地的sqlitejdbc-v033-nested.jar包,載入路徑過程如下圖所示:
三,編寫java程式碼連線sqlite資料庫操作
(1),建立java程式碼測試類
四,除錯執行:
(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是遵守ACID 的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。
不像常見的客戶-伺服器範例,SQLite引擎不是個程式與之通訊的獨立程式,而是連線到程式中成為它的一個主要部分。所以主要的通訊協議是在程式語言內的直接API呼叫。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個資料庫(定義、表、索引和資料本身)都在宿主主機上儲存在一個單一的檔案中。它的簡單的設計是透過在開始一個事務的時候鎖定整個資料檔案而完成的。
一,準備sqlite資料來源
由於sqlite是記憶體資料庫,還會有一個資料檔案,本質上是去訪問一個檔案,所以可以把linux下的sqlite的庫檔案copy出來到自己筆記本本地,然後在呼叫java程式訪問操作sqlite庫。
(1),安裝sqlite
下載地址: Wget
開始安裝:
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,下載地址為:
並且將其新增到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.
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庫
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26230597/viewspace-1259992/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlite操作--- oracle資料庫中的資料導進sqliteSQLiteOracle資料庫
- 【Java】操作Sqlite資料庫JavaSQLite資料庫
- JDBC連線各種資料庫的字串JDBC資料庫字串
- Python連線SQLite資料庫PythonSQLite資料庫
- jdbc獲取各種資料庫連線JDBC資料庫
- 使用sqlite3 模組操作sqlite3資料庫SQLite資料庫
- JDBC連線各種資料庫的方法(經典)JDBC資料庫
- 【轉載】JDBC連線各種資料庫的字串JDBC資料庫字串
- jdbc獲取對各種資料庫的連線JDBC資料庫
- JDBC連線各資料庫大全JDBC資料庫
- Python操作SQLite資料庫PythonSQLite資料庫
- Python 操作 SQLite 資料庫PythonSQLite資料庫
- sqlite3資料庫操作SQLite資料庫
- python用sqlite3模組操作sqlite資料庫PythonSQLite資料庫
- java jdbc連線資料庫JavaJDBC資料庫
- 各種資料庫連線資料庫
- Java各資料庫jdbc連線,和需要的jar包Java資料庫JDBCJAR
- 用Julia 0.51操作sqlite資料庫SQLite資料庫
- sqlite 資料庫的資料字典SQLite資料庫
- 應用JDBC連線SQLiteJDBCSQLite
- 各種連線資料庫的連線字串資料庫字串
- java應用通過jdbc連線資料庫jdbc的串的3種寫法:JavaJDBC資料庫
- SQLite Helper類,基於.net c#的SQLite資料庫操作類SQLiteC#資料庫
- Java連線各種資料庫的例項 (轉)Java資料庫
- 各種資料庫的jdbc驅動下載及連線方式資料庫JDBC
- JDBC連線三種資料庫例子JDBC資料庫
- python sqlite3 資料庫操作PythonSQLite資料庫
- C++ 操作sqlite3資料庫C++SQLite資料庫
- JAVA中十六種主流資料庫的JDBC連線字串Java資料庫JDBC字串
- [Sqlite] 使用Java程式、cmd命令列來備份恢復Sqlite資料庫SQLiteJava命令列資料庫
- Java的JDBC通過SSH Tunnel連線MySQL資料庫JavaJDBCMySql資料庫
- 資料庫的連線過程資料庫
- Android 中使用 SQLite 資料庫AndroidSQLite資料庫
- SQLite資料庫中rowid使用SQLite資料庫
- SQLite資料庫管理器:SQLPro for SQLite for MacSQLite資料庫Mac
- JDBC連線資料庫JDBC資料庫
- java通過jdbc連結資料庫JavaJDBC資料庫
- Android 封裝AsyncTask操作Sqlite資料庫Android封裝SQLite資料庫