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

來源:互聯網
上載者:User

[Sqlite]-->Java使用jdbc串連Sqlite資料庫進行各種資料操作的詳細過程,jdbcsqlite
前言:
      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庫






怎用JAVA串連SQLite資料庫?

通過Java本身提供的JDBC連結
需要匯入sqlitejdbc-v033-nested.jar檔案

private static String url="org.sqlite.JDBC";
private static String dri="jdbc:sqlite:/D:test.db檔案對應的目錄路徑(不能包含中文)";

public static Connection getConn(String table) throws Exception{

Class.forName(url);
Connection conn = DriverManager
.getConnection(dri+table);
return conn;
}
 
java與sqlite怎建立串連

android 調用sqlite
建一個類DBHelper extends SQLiteOpenHelper
實現其中的方法
構造方法中第二個參數填寫庫名系統會幫你建庫
oncreate 中見表
String createTable = "create table tablename";
db.execSQL(createTable);

以後調用只需 new DBHelper 再getWriteDatabase 就可對資料庫操作 如同見表一樣
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.