C#/Java連接sqlite與使用技巧
1)下載sqlite jdbc驅(qū)動(dòng)http://www.xerial.org/maven/repository/artifact/org/xerial/sqlite-jdbc/
2)將下載的驅(qū)動(dòng)加入eclipse項(xiàng)目的built path中
3)示例代碼:
package com.hedalixin;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class test {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
Statement stat = conn.createStatement();
stat.executeUpdate("drop table if exists people;");
stat.executeUpdate("create table people (name, occupation);");
PreparedStatement prep = conn
.prepareStatement("insert into people values (?, ?);");
prep.setString(1, "Gandhi");
prep.setString(2, "politics");
prep.addBatch();
prep.setString(1, "Turing");
prep.setString(2, "computers");
prep.addBatch();
prep.setString(1, "Wittgenstein");
prep.setString(2, "smartypants");
prep.addBatch();
conn.setAutoCommit(false);
prep.executeBatch();
conn.setAutoCommit(true);
ResultSet rs = stat.executeQuery("select * from people;");
while (rs.next()) {
System.out.println("name = " + rs.getString("name"));
System.out.println("job = " + rs.getString("occupation"));
}
rs.close();
conn.close();
}
}
2. C#連接sqlite
2.1 使用SQLITE.NET
SQLite.NET也是一個(gè)數(shù)據(jù)訪問(wèn)組件,其中的System.Data.SQLite 就好像是.NET自帶的System.Data.SqlClient一樣。里面包含了connection、command等數(shù)據(jù)訪問(wèn)的常用對(duì)象,只是他們前面都有一個(gè)前綴sqlite。
1)下載System.Data.SQLite,下載地址http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
2) 通過(guò)Add References引用SQLite ADO .NET安裝目錄的bin目錄下的System.Data.SQLite.DLL。
3)創(chuàng)建表、讀取數(shù)據(jù)等和Access或MS SQL沒(méi)多大區(qū)別
//創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)文件
string datasource="h:/test.db";
System.Data.SQLite.SQLiteConnection.CreateFile(datasource);
//連接數(shù)據(jù)庫(kù)
System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection();
System.Data.SQLite.SQLiteConnectionStringBuilder connstr = new System.Data.SQLite.SQLiteConnectionStringBuilder();
connstr.DataSource = datasource;
connstr.Password = "admin";//設(shè)置密碼,SQLite ADO.NET實(shí)現(xiàn)了數(shù)據(jù)庫(kù)密碼保護(hù)
conn.ConnectionString = connstr.ToString();
conn.Open();
//創(chuàng)建表
System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();
string sql = "CREATE TABLE test(username varchar(20),password varchar(20))";
cmd.CommandText=sql;
cmd.Connection=conn;
cmd.ExecuteNonQuery();
//插入數(shù)據(jù)
sql = "INSERT INTO test VALUES('ekinglong','mypassword')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
//取出數(shù)據(jù)
sql = "SELECT * FROM test";
cmd.CommandText = sql;
System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader();
StringBuilder sb = new StringBuilder();
while (reader.Read())
{
sb.Append("username:").Append(reader.GetString(0)).Append("\n")
.Append("password:").Append(reader.GetString(1));
}
MessageBox.Show(sb.ToString());
2.2使用原生態(tài)的ADO.NET訪問(wèn)SQLite
using (DbConnection conn = new SQLiteConnection( System.Configuration.ConfigurationManager.ConnectionStrings["sqlite"].ConnectionString))
{
conn.Open();
DbCommand comm = conn.CreateCommand();
comm.CommandText = "select * from customer";
comm.CommandType = CommandType.Text;
using (IDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
Response.Write(reader[0]);
}
}
}
SQLite.NET數(shù)據(jù)庫(kù)連接字符串ConnectionString格式:
Basic(基本的)
Data Source=filename;Version=3;
Using UTF16(使用UTF16編碼)
Data Source=filename;Version=3;UseUTF16Encoding=True;
With password(帶密碼的)
Data Source=filename;Version=3;Password=myPassword;
Using the pre 3.3x database format(使用3.3x前數(shù)據(jù)庫(kù)格式)
Data Source=filename;Version=3;Legacy Format=True;
Read only connection(只讀連接)
Data Source=filename;Version=3;Read Only=True;
With connection pooling(設(shè)置連接池)
Data Source=filename;Version=3;Pooling=False;Max Pool Size=100;
Using DateTime.Ticks as datetime format()
Data Source=filename;Version=3;DateTimeFormat=Ticks;
The default value is ISO8601 which activates the use of the ISO8601 datetime format
Store GUID as text(把Guid作為文本存儲(chǔ),默認(rèn)是Binary)
Data Source=filename;Version=3;BinaryGUID=False;
如果把Guid作為文本存儲(chǔ)需要更多的存儲(chǔ)空間
Specify cache size(指定Cache大?。?BR> Data Source=filename;Version=3;Cache Size=2000;
Cache Size 單位是字節(jié)
Specify page size(指定頁(yè)大?。?BR> Data Source=filename;Version=3;Page Size=1024;
Page Size 單位是字節(jié)
Disable enlistment in distributed transactions
Data Source=filename;Version=3;Enlist=N;
Disable create database behaviour(禁用創(chuàng)建數(shù)據(jù)庫(kù)行為)
Data Source=filename;Version=3;FailIfMissing=True;
默認(rèn)情況下,如果數(shù)據(jù)庫(kù)文件不存在,會(huì)自動(dòng)創(chuàng)建一個(gè)新的,使用這個(gè)參數(shù),將不會(huì)創(chuàng)建,而是拋出異常信息
Limit the size of database(限制數(shù)據(jù)庫(kù)大小)
Data Source=filename;Version=3;Max Page Count=5000;
The Max Page Count is measured in pages. This parameter limits the maximum number of pages of the database.
Disable the Journal File (禁用日志回滾)
Data Source=filename;Version=3;Journal Mode=Off;
This one disables the rollback journal entirely.
Persist the Journal File(持久)
Data Source=filename;Version=3;Journal Mode=Persist;
This one blanks and leaves the journal file on disk after a commit. Default behaviour is to delete the Journal File after each commit.
Controling file flushing
Data Source=filename;Version=3;Synchronous=Full;
Full specifies a full flush to take action after each write. Normal is the default value. Off means that the underlying OS flushes I/O's.
Sqlite使用技巧
1 .Sqlite判斷數(shù)據(jù)表是否存在
SELECT COUNT(*) as CNT FROM sqlite_master where type='table' and name='DBInfo' //其中DBInfo為需要判斷的表名。注意大小寫(xiě)敏感!
2. SQLite一條SQL語(yǔ)句插入多條記錄
INSERT INTO TABLE(col1, col2) SELECT val11, val12 UNION ALL SELECT val21, val22 ;
這樣的寫(xiě)法是屬于復(fù)合SQL語(yǔ)句,表示先把兩個(gè)SELECT的結(jié)果集進(jìn)行無(wú)刪減的聯(lián)合,再把聯(lián)合結(jié)果插入到TABLE中。
3. sqlite事務(wù)
是以文件的形式存在磁盤(pán)中,每次訪問(wèn)時(shí)都要打開(kāi)一次文件,如果對(duì)數(shù)據(jù)進(jìn)行大量操作時(shí),會(huì)很慢~
解決辦法是用事務(wù)的形式提交:因?yàn)槲覀冮_(kāi)始事務(wù)后,進(jìn)行大量操作的語(yǔ)句都保存在內(nèi)存中,當(dāng)提交時(shí)才全部寫(xiě)入數(shù)據(jù)庫(kù),此時(shí),數(shù)據(jù)庫(kù)文件也就只用打開(kāi)一次。
sql語(yǔ)句:
begin;
INSERT INTO "table" VALUES ('a', 'b', 'c');
INSERT INTO "table" VALUES ('a', 'b', 'c');
INSERT INTO "table" VALUES ('a', 'b', 'c');
commit;
4. SQLite自增ID字段使用方法為 INTEGER PRIMARY KEY AUTOINCREMENT
5. 分頁(yè)查詢顯示
類似MySQL數(shù)據(jù)庫(kù) ,是利用mySQL的LIMIT函數(shù),LIMIT [offset,] rows從數(shù)據(jù)庫(kù)表中M條記錄開(kāi)始檢索N條記錄的語(yǔ)句為:
SELECT * FROM 表名稱 LIMIT M,N
例如從表Sys_option(主鍵為sys_id)中從10條記錄開(kāi)始檢索20條記錄,語(yǔ)句如下:
select * from sys_option limit 10,20
相關(guān)文章
newtonsoft.json解析天氣數(shù)據(jù)出錯(cuò)解決方法
這篇文章主要介紹了NewtonSoft.JSon解析天氣數(shù)據(jù)時(shí)出錯(cuò)的解決方法,需要的朋友可以參考下2014-02-02C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法
這篇文章主要介紹了C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了SqlDataAdapter對(duì)象獲取數(shù)據(jù)具體步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-02-02簡(jiǎn)單了解C#設(shè)計(jì)模式編程中的橋接模式
這篇文章主要介紹了C#設(shè)計(jì)模式編程中的橋接模式,橋接模式經(jīng)常應(yīng)用于解耦邏輯層與數(shù)據(jù)操作層,需要的朋友可以參考下2016-02-02基于C#實(shí)現(xiàn)的仿windows左側(cè)伸縮菜單效果
這篇文章主要介紹了基于C#實(shí)現(xiàn)的仿windows左側(cè)伸縮菜單效果,比較實(shí)用的功能,需要的朋友可以參考下2014-08-08