導航:首頁 > 使用方法 > sqlite使用方法

sqlite使用方法

發布時間:2022-02-26 04:28:07

如何使用sqlite 資料庫文件

在我幾個Android應用中,我需要訪問已有的資料庫。這些資料庫往往很大,甚至超過asset文件大約1兆位元組的限制。而且在新的版本中資料庫需要更新。我在網上,特別是StackOverflow看了一些文章,並做了一些試驗,覺得下面的代碼能基本上滿足我的需求。

其主要思路是:

1. 把資料庫分解成幾個asset文件。

2. 當需要打開資料庫時,如果資料庫不存在,就把那幾個asset文件重新合並成一個資料庫文件。

3. 如果資料庫的版本改變了,就在onUpgrade()方法中把資料庫文件刪除掉。下面是代碼://資料庫的預設路徑

private static finalString DB_PATH = "/data/data/com.mypackage.myapp/databases/";

private static finalString DB_NAME = "mydb.db";

private static finalint DB_VERSION = 2;

private static finalString DB_SPLIT_NAME = "mydb.db.00";

private static finalint DB_SPLIT_COUNT = 3;

private SQLiteDatabasem_database;

private final Contextm_context;

/**

* Constructor

*保存傳進來的context參數以用來訪問應用的asset和資源文件。

* @param context

*/

public MyDB(Contextcontext) {

super(context, DB_NAME, null, DB_VERSION);

this.m_context = context;

}

public static MyDBopenDatabaseReadOnly(Context context) {

MyDB db = new MyDB(context);try {

db.createDataBase();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}db.openDataBase(SQLiteDatabase.OPEN_READONLY);

return db;

}

public static MyDBopenDatabaseReadWrite(Context context) {

MyDB db = new MyDB(context);try {

db.createDataBase();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}db.openDataBase(SQLiteDatabase.OPEN_READWRITE);

return db;

}

/**

*創建一個空資料庫,用來存儲你已有的資料庫。

*/

public voidcreateDataBase() throws IOException{

boolean dbExist =checkDataBase();

if (dbExist) {

/*

**如果你的資料庫的版本改變了,調用這個方法確保在onUpgrade()被調用時

**傳進去的是可寫的資料庫。

*/

SQLiteDatabase db =this.getWritableDatabase();if (db != null) {

db.close();

}

}dbExist = checkDataBase();if (!dbExist) {

⑵ 怎樣使用SQLite

SQLite3是目前最新的SQLite版本。可以從網站上下載SQLite3的源代碼(本書使用的版本是sqlite-3.6.12.tar.gz)。
解壓縮後進入sqlite-3.6.12的根目錄,首先命令「./configure」生成Makefile文件,接著運行命令「make」對源代碼進行編譯,最後運行命令「make install」安裝SQLite3。安裝完畢後,可以運行命令sqlite3查看SQLite3是否能正常運行,如下所示:
[root@localhost ~]# sqlite3
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
可以看到,SQLite3啟動後會停留在提示符sqlite>處,等待用戶輸入SQL語句。
在使用SQLite3前需要先了解下SQLite3支持的數據類型。SQLite3支持的基本數據類型主要有以下幾類:
NULL
NUMERIC
INTEGER
REAL
TEXT
SQLite3會自動把其他數據類型轉換成以上5類基本數據類型,轉換規則如下所示:
char、clob、test、varchar—> TEXT
integer—>INTEGER
real、double、float—> REAL
blob—>NULL
其餘數據類型都轉變成NUMERIC
下面通過一個實例來演示SQLite3的使用方法
新建一個資料庫
新建資料庫test.db(使用.db後綴是為了標識資料庫文件)。在test.db中新建一個表test_table,該表具有name,、sex、age三列。SQLite3的具體操作如下所示:
[root@localhost home]# sqlite3 test.db
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test_table(name, sex, age);
如果資料庫test.db已經存在,則命令「sqlite3 test.db」會在當前目錄下打開test.db。如果資料庫test.db不存在,則命令「sqlite3 test.db」會在當前目錄下新建資料庫test.db。為了提高效率,SQLite3並不會馬上創建test.db,而是等到第一個表創建完成後才會在物理上創建資料庫。
由於SQLite3能根據插入數據的實際類型動態改變列的類型,所以在create語句中並不要求給出列的類型。
創建索引
為了加快表的查詢速度,往往在主鍵上添加索引。如下所示的是在name列上添加索引的過程。
sqlite> create index test_index on test_table(name);
操作數據
如下所示的是在test_table中進行數據的插入、更新、刪除操作:
sqlite> insert into test_table values ('xiaoming', 'male', 20);
sqlite> insert into test_table values ('xiaohong', 'female', 18);
sqlite> select * from test_table;
xiaoming|male|20
xiaohong|female|18
sqlite> update test_table set age=19 where name = 'xiaohong';
sqlite> select * from test_table;
xiaoming|male|20
xiaohong|female|19
sqlite> delete from test_table where name = 'xiaoming';
sqlite> select * from test_table;
xiaohong|female|19
批量操作資料庫
如下所示的是在test_table中連續插入兩條記錄:
sqlite> begin;
sqlite> insert into test_table values ('xiaoxue', 'female', 18);
sqlite> insert into test_table values ('xiaoliu', 'male', 20);
sqlite> commit;
sqlite> select * from test_table;
xiaohong|female|19
xiaoxue|male|18
xiaoliu|male|20
運行命令commit後,才會把插入的數據寫入資料庫中。
資料庫的導入導出
如下所示的是把test.db導出到sql文件中:
[root@localhost home]# sqlite3 test.db ".mp" > test.sql;
test.sql文件的內容如下所示:
BEGIN TRANSACTION;
CREATE TABLE test_table(name, sex, age);
INSERT INTO "test_table" VALUES('xiaohong','female',19);
CREATE INDEX test_index on test_table(name);
COMMIT;
如下所示的是導入test.sql文件(導入前刪除原有的test.db):
[root@localhost home]# sqlite3 test.db < test.sql;
通過對test.sql文件的導入導出,可以實現資料庫文件的備份。
11.2.2 SQLite3的C介面
以上介紹的是SQLite3資料庫的命令操作方式。在實際使用中,一般都是應用程序需要對資料庫進行訪問。為此,SQLite3提供了各種編程語言的使用介面(本書介紹C語言介面)。SQLite3具有幾十個C介面,下面介紹一些常用的C介面。
sqlite_open
作用:打開SQLite3資料庫
原型:int sqlite3_open(const char *dbname, sqlite3 **db)
參數:
dbname:資料庫的名稱;
db:資料庫的句柄;
sqlite_colse
作用:關閉SQLite3資料庫
原型:int sqlite_close(sqlite3 *db)
例如:
test.c:
#include <stdio.h>
#include <sqlite3.h>

static sqlite3 *db=NULL;

int main()
{
int rc;
rc= sqlite3_open("test.db", &db);

if(rc)
{
printf("can't open database!\n");
}
else
{
printf("open database success!\n");
}

sqlite3_close(db);
return 0;
}
運行命令「gcc –o test test.c –lsqlite3」進行編譯,運行test的結果如下所示:
[root@localhost home]# open database success!
sqlite_exec
作用:執行SQL語句
原型:int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg)
參數:
db:資料庫;
sql:SQL語句;
callback:回滾;
errmsg:錯誤信息
例如:
test.c:
#include <stdio.h>
#include <sqlite3.h>

static sqlite3 *db=NULL;
static char *errmsg=NULL;

int main()
{
int rc;

rc = sqlite3_open("test.db", &db);
rc = sqlite3_exec(db,"insert into test_table values('bao', 'male', 24)", 0, 0, &errmsg);

if(rc)
{
printf("exec fail!\n");
}
else
{
printf("exec success!\n");
}

sqlite3_close(db);
return 0;
}
編譯完成後,運行test的結果如下所示:
[root@localhost home]# ./test
exec success!
[root@localhost home]# sqlite3 test.db
SQLite version 3.6.11
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from test_table;
bao|male|24
sqlite3_get_table
作用:執行SQL查詢
原型:int sqlite3_get_table(sqlite3 *db, const char *zSql, char ***pazResult, int *pnRow, int *pnColumn, char **pzErrmsg)
參數:
db:資料庫;
zSql:SQL語句;
pazResult:查詢結果集;
pnRow:結果集的行數;
pnColumn:結果集的列數;
errmsg:錯誤信息;
sqlite3_free_table
作用:注銷結果集
原型:void sqlite3_free_table(char **result)
參數:
result:結果集;
例如:
test.c:
#include <stdio.h>
#include <sqlite3.h>

static sqlite3 *db=NULL;
static char **Result=NULL;
static char *errmsg=NULL;

int main()
{
int rc, i, j;
int nrow;
int ncolumn;

rc= sqlite3_open("test.db", &db);
rc= sqlite3_get_table(db, "select * from test_table", &Result, &nrow, &ncolumn,
&errmsg);

if(rc)
{
printf("query fail!\n");
}
else
{
printf("query success!\n");
for(i = 1; i <= nrow; i++)
{
for(j = 0; j < ncolumn; j++)
{
printf("%s | ", Result[i * ncolumn + j]);
}
printf("\n");
}
}

sqlite3_free_table(Result);
sqlite3_close(db);
return 0;
}
編譯完成後,運行test的結果如下所示:
[root@localhost home]# ./test
query success!
xiaohong | female | 19 |
xiaoxue | female | 18 |
xiaoliu | male | 20 |
bao | male | 24 |
sqlite3_prepare
作用:把SQL語句編譯成位元組碼,由後面的執行函數去執行
原型:int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **stmt, const char **pTail)
參數:
db:資料庫;
zSql:SQL語句;
nByte:SQL語句的最大位元組數;
stmt:Statement句柄;
pTail:SQL語句無用部分的指針;
sqlite3_step
作用:步步執行SQL語句位元組碼
原型:int sqlite3_step (sqlite3_stmt *)
例如:
test.c:
#include <stdio.h>
#include <sqlite3.h>

static sqlite3 *db=NULL;
static sqlite3_stmt *stmt=NULL;

int main()
{
int rc, i, j;
int ncolumn;

rc= sqlite3_open("test.db", &db);
rc=sqlite3_prepare(db,"select * from test_table",-1,&stmt,0);

if(rc)
{
printf("query fail!\n");
}
else
{
printf("query success!\n");
rc=sqlite3_step(stmt);
ncolumn=sqlite3_column_count(stmt);
while(rc==SQLITE_ROW)
{
for(i=0; i<2; i++)
{
printf("%s | ", sqlite3_column_text(stmt,i));
}
printf("\n");
rc=sqlite3_step(stmt);
}
}

sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
編譯完成後,運行test的結果如下所示:
[root@localhost home]# ./test
query success!
xiaohong | female | 19 |
xiaoxue | female | 18 |
xiaoliu | male | 20 |
bao | male | 24 |
在程序中訪問SQLite3資料庫時,要注意C API的介面定義和數據類型是否正確,否則會得到錯誤的訪問結果。

⑶ sqlite的幾個常用方法

SQLite庫包含一個名字叫做sqlite3的命令行,它可以讓用戶手工輸入並執行面向SQLite資料庫的SQL命令。本文檔提供一個樣使用sqlite3的簡要說明。

開始

啟動sqlite3程序,僅僅需要敲入帶有SQLite資料庫名字的"sqlite3"命令即可。如果文件不存在,則創建一個新的(資料庫)文件。然後 sqlite3程序將提示你輸入SQL。敲入SQL語句(以分號「;」結束),敲回車鍵之後,SQL語句就會執行。

例如,創建一個包含一個表"tb11"名字為"ex1"的SQLite資料庫,你可以這樣做:

$sqlite3 ex1
SQLite version 3.3.17
Enter ".help" for instructions
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello!', 10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> select * from tbl1;
hello!|10
goodbye|20
sqlite>

你可以通過敲你所用系統的文件結束符(通常是Ctrl + D)或者中斷字元(通常是Ctrl + C)。來終止sqlite3程序。確定你在每個SQL語句結束敲入分號!sqlite3程序通過查找分號來決定一個SQL語句的結束。如果你省略分號,sqlite3將給你一個連續的命令提示符並等你給當前的SQL命令添加更多的文字。這個特點讓你輸入多行的多個SQL語句,例如:

sqlite> create table tbl2(
...> f1 varchar(30) primary key,
...> f2 text,
...> f3 real
...> );
sqlite>

題外話:查詢SQLITE_MASTER表

SQLite資料庫的框架被保存在一個名叫"sqlite_master"的特殊的表中。你可以像查詢其它表一樣通過執行「SELECT」查詢這個特殊的表。例如:

$ sqlite3 ex1
SQlite vresion 3.3.10
Enter ".help" for instructions
sqlite> select * from sqlite_master;
type = table
name = tbl1
tbl_name = tbl1
rootpage = 3
sql = create table tbl1(one varchar(10), two smallint)
sqlite>

但你不能在sqlite_master表中執行諸如DROP TABLE, UPDATE, INSERT 或者DELETE命令。sqlite_master表在你創建、刪除和索引資料庫時自動更新這個表。你不能手工更改sqlite_master表。

TEMPORARY表的結構沒有存儲在"sqlite_master"表中,由於TEMPORARY表對應用是不可見的,而不是應用程序創建這個表。 TEMPORARY表結構被存儲在另外一個名叫"sqlite_temp_master"的特定的表中。"sqlite_temp_master"表是臨時表自身。

sqlite3的特殊命令

大多數候,sqlite3讀入輸入行,並把它們傳遞到SQLite庫中去運行。但是如果輸入行以一個點(「.」)開始,那麼這行將被sqlite3程序自己截取並解釋。這些「點命令」通常被用來改變查詢輸出的格式,或者執行鞭個預封包(預定義prepackaged)的查詢語句。

你可以在任何時候輸入「.help」,列出可用的點命令。例如

sqlite> .help
.l ON|OFF Stop after hitting an error. Default OFF
.databases List names and files of attached databases
.mp ?TABLE? ... Dump the database in an SQL text format
.echo ON|OFF Turn command echo on or off
.exit Exit this program
.explain ON|OFF Turn output mode suitable for EXPLAIN on or off.
.header(s) ON|OFF Turn display of headers on or off
.help Show this message
.import FILE TABLE Import data from FILE into TABLE
.indices TABLE Show names of all indices on TABLE
.load FILE ?ENTRY? Load an extension library
.mode MODE ?TABLE? Set output mode where MODE is one of:
csv Comma-separated values
column Left-aligned columns. (See .width)
html HTML <table> code
insert SQL insert statements for TABLE
line One value per line
list Values delimited by .separator string
tabs Tab-separated values
tcl TCL list elements
.nullvalue STRING Print STRING in place of NULL values
.output FILENAME Send output to FILENAME
.output stdout Send output to the screen
.prompt MAIN CONTINUE Replace the standard prompts
.quit Exit this program
.read FILENAME Execute SQL in FILENAME
.schema ?TABLE? Show the CREATE statements
.separator STRING Change separator used by output mode and .import
.show Show the current values for various settings
.tables ?PATTERN? List names of tables matching a LIKE pattern
.timeout MS Try opening locked tables for MS milliseconds
.width NUM NUM ... Set column widths for "column" mode
sqlite>

改變輸出格式

sqlite3程序可以以八種不同的格式顯示一個查詢的結果:"csv", "列", "html", "插入", "行", "製表"和"tcl"。你可以用".mode"點命令在這些輸出格式之間切換。

默認的輸出格式是「列表」。在列表模式下,每條查詢結果記錄被寫在一行中並且每列之間以一個字元串分割符隔開。默認的分隔符是一個管道符號(「|」)。列表符號在當你輸出查詢結果到另外一個符加處理的程序(如AWK)中去是尤為有用。

sqlite> .mode list
sqlite> select * from tbl1;
hello|10
goodbye|20
sqlite>

你可以用「.separator」點命令來改變分界符。例如,為了把分割符改為一個逗號和一個空格,你可以這樣做:

sqlite> .separator ", "
sqlite> select * from tbl1;
hello, 10
goodbye, 20
sqlite>

在「line"模式下,每一個位於條記錄中的列在它自己那行顯示。每行由列名、一個等號和列數據組成。下一條記錄以一個空行隔開。這是一個行模式輸出的例子:

sqlite> .mode line
sqlite> select * from tbl1;
one = hello
two = 10

one = goodbye
two = 20
sqlite>

在列模式下,每條記錄在一個單獨的行中以數據列對齊的方式顯示。列如:

sqlite> .mode column
sqlite> select * from tbl1;
one two
---------- ----------
hello 10
goodbye 20
sqlite>

在默認的情況下,每列至少10個字元寬。太寬的數據將被截取。你可以用「.width」命令來調整列寬。如下所示:

sqlite> .width 12 6
sqlite> select * from tbl1;
one two
------------ ------
hello 10
goodbye 20
sqlite>

上面例子中".width"命令設置第一列寬為12第二列寬為6。其它的列寬不變。你可以指定與你查詢結果需要的列數一樣多的「.width」參數。

如果你指定一列寬為0,那麼這個列寬將自動以下面三個數字中的最大值做為列寬:10、表頭寬度和最寬的數據列的寬度。這可以讓列自動調整寬度。每列的默認設置為自動調整的0值。

出現在輸出開頭兩行的列標示可以用".header"點命令關閉。在上面的例子中,列標示是打開的。可以用下面的方法關閉列標示:

sqlite> .header off
sqlite> select * from tbl1;
hello 10
goodbye 20
sqlite>

另外一個有用的輸出模式是"insert"。在插入模式下,被子格式化為看起來像SQL INSERT語句的樣式。你可以用插入模式來產生文件(便於)以後用於不同資料庫的輸入。

當指定插入模式時,你必須給定一個特定參數就是要插入的表名。例如:

sqlite> .mode insert new_table
sqlite> select * from tbl1;
INSERT INTO 'new_table' VALUES('hello',10);
INSERT INTO 'new_table' VALUES('goodbye',20);
sqlite>

最新的輸出格式是「html」。在這種模式下,sqlite3把查詢的結果寫做XHTML表。開始的<TABLE>和結束的</TABLE>(標記)沒有寫出,但有<TR>、<TH>和<TD>等分界符。html輸出對 CGI來說是相當有用地。

把結果寫到文件中

默認情況下,sqlte3把結送到標准輸出。你可以用「.output」命令改變它。只須把輸出文件名做為.output命令的輸出參數然後所有後續查詢結果將被寫到那個文件中。用「.output stdout」再一次改為標准輸出。例如:

sqlite> .mode list
sqlite> .separator |
sqlite> .output test_file_1.txt
sqlite> select * from tbl1;
sqlite> .exit
$ cat test_file_1.txt
hello|10
goodbye|20
$

查詢資料庫結構

sqlite3程序提供幾個有用的用於查詢資料庫結構的快捷命令。這些不是不可以用別的方式來實現。這些命令僅僅是一個快捷方式而已。

例如,為了查看資料庫的表列表,你可以敲入「.tables」。

sqlite> .tables
tbl1
tbl2
sqlite>

「.tables」命令相似於設置列表模式然後執行接下來的查詢:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1事實上,你可以查看sqlite3的源代碼(可以在源文件樹的src/shell.c中),你可找到上面的具體的查詢。「.indices」命令作用類似的方式是列出特定表的所有的索引。「.indics」命令須一個參數即所要索引表的表名。最後,但不是至少,是「.schema」命令。不帶任何參數,「.schema」命令顯示原始的用於創建當前資料庫的CREATE TABLE和CREATE INDEX語句。如果你給".schema"命令一個表名,它顯示原始的創建該表和它所有索引的CREATE語句。我們可以:sqlite> .schemacreate table tbl1(one varchar(10), two smallint)CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> .schema tbl2CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> ".schema"命令可以用設置列表然後執行以下查詢來實現:

SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type!='meta'
ORDER BY tbl_name, type DESC, name

.databases 列出資料庫文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 將文件中的數據導入的文件中
.mp ?TABLE? 生成形成資料庫表的SQL腳本
.output FILENAME 將輸出導入到指定的文件中
.output stdout 將輸出列印到屏幕
.mode MODE ?TABLE? 設置數據輸出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替輸出的NULL串
.read FILENAME 執行指定文件中的SQL語句
.schema ?TABLE? 列印創建資料庫表的SQL語句
.separator STRING 用指定的字元串代替欄位分隔符
.show 列印所有SQLite環境變數的設置
.quit 退出命令行介面

⑷ iOS SQLite3的使用方法和技巧有哪些

以下介紹iOS SQLite3支持的數據類型,以及類型間相互關系。大多數資料庫使用靜態的嚴格的類型系統,列的類型在創建表的時候就已經指定了。SQLite使用動態的類型系統,列的類型由值決定。
Dateandtime類型

SQLite中也沒有定義日期時間類型,日期時間可以用TEXT,REAL,orINTEGER存儲

TEXT:存儲為字元串("YYYY-MM-DDHH:MM:SS.SSS").

REAL:asJuliandaynumbers,,4714B.C..

INTEGER:asUnixTime,thenumberofsecondssince1970-01-0100:00:00UTC.
SQLiteTypeAffinity(類型檢測)

用於自動檢測值的類型,以下列舉Affinity如何決定類型的規則

(1)如果類型聲明中有int,則使用INTEGERaffinity.

(2)如果類型聲明中有"CHAR","CLOB",or"TEXT",則使用Textaffinity

(3)如果類型聲明中有BLOB或沒有指定類型,則使用affinityNONE
http://mobile.51cto.com/iphone-321872.htm

(4)如果類型聲明中有"REAL","FLOA",or"DOUB",則使用REALaffinity

(5)否則使用Numericaffinity

類型比較NULL

memcmp函數原型

intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnum);
比較兩個指針指向內存的前num個byte

比較之前的類型轉換

l(INTEGER,REALorNUMERIC)和(TEXTorNONE)比較,則TEXT,NONE會被轉換成NUMERIC

lTEXT和NONE比較,則NONE會被轉換成TEXT

其他情況直接比較。
iOS SQLite3具有的數據類型

NULL:NULLvalue
Integer:值是signedinteger類型,大小可以是1,2,3,4,6,8bytes

REAL:浮點類型
TEXT:以UTF-8,UTF-16BEorUTF-16LE編碼存儲的字元類型
BLOB:二進制數據
其它數據類型說明

Integerprimarykey列是個例外??

布爾類型:SQLite中沒有定義布爾類型,而是以Integer存儲布爾值,0(false),1(true)

以上是iOS SQLite3類型系統的內容,希望會對ios開發者有所幫助。

⑸ 安卓怎麼使用sqlite資料庫實例

SQPte 一個非常流行的嵌入式資料庫,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQPte. SQPte 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。SQPte 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQPte 的內核變得更加方便。 圖 1. SQPte 內部結構 SQPte 基本上符合 SQL-92 標准,和其他的主要 SQL 資料庫沒什麼區別。它的優點就是高效,Android 運行時環境包含了完整的 SQPte。 SQPte 和其他資料庫最大的不同就是對數據類型的支持,創建一個表時,可以在 CREATE TABLE 語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入資料庫時,SQPte 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQPte 會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作為其本身具有的類型存儲。比如可以把一個字元串(String)放入 INTEGER 列。SQPte 稱這為“弱類型”(manifest typing.)。 此外,SQPte 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FPL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQPte 是一個完整的 SQL 系統,擁有完整的觸發器,交易等等。 Android 集成了 SQPte 資料庫 Android 在運行時(run-time)集成了 SQPte,所以每個 Android 應用程序都可以使用 SQPte 資料庫。對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQPte 相當簡單。但是,由於 JDBC 會消耗太多的系統資源,所以 JDBC 對於手機這種內存受限設備來說並不合適。因此,Android 提供了一些新的 API 來使用 SQPte 資料庫,Android 開發中,程序員需要學使用這些 API。 資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQPte 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。 創建資料庫 Android 不自動提供資料庫。在 Android 應用程序中使用 SQPte,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQPteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQPteOpenHelper 類,就可以輕松的創建資料庫。SQPteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQPteOpenHelper 的子類,至少需要實現三個方法: 構造函數,調用父類 SQPteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 NPl),一個代表你正在使用的資料庫模型版本的整數。 onCreate()方法,它需要一個 SQPteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。 onUpgrage() 方法,它需要三個參數,一個 SQPteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。 下面示例代碼展示了如何繼承 SQPteOpenHelper 創建資料庫: pubPc class DatabaseHelper extends SQPteOpenHelper { DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version) { super(context, name, cursorFactory, version); } @Override pubPc void onCreate(SQPteDatabase db) { // TODO 創建資料庫後,對資料庫的操作 } @Override pubPc void onUpgrade(SQPteDatabase db, int PdVersion, int newVersion) { // TODO 更改資料庫版本的操作 } @Override pubPc void onOpen(SQPteDatabase db) { super.onOpen(db); // TODO 每次成功打開資料庫後首先被執行 } } 接下來討論具體如何創建表、插入數據、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQPteDatabase 實例,具體調用那個方法,取決於你是否需要改變資料庫的內容: db=(new DatabaseHelper(getContext())).getWritableDatabase(); return (db == nPl) ? false : true; 上面這段代碼會返回一個 SQPteDatabase 類的實例,使用這個對象,你就可以查詢或者修改資料庫。 當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQPteDatabase 的 Close() 方法來釋放掉資料庫連接。 創建表和索引 為了創建表和索引,需要調用 SQPteDatabase 的 execSQL() 方法來執行 DDL 語句。如果沒有異常,這個方法沒有返回值。 例如,你可以執行如下代碼: db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL);"); 這條語句會創建一個名為 mytable 的表,表有一個列名為 _id,並且是主鍵,這列的值是會自動增長的整數(例如,當你插入一行時,SQPte 會給這列自動賦值),另外還有兩列:title( 字元 ) 和 value( 浮點數 )。 SQPte 會自動為主鍵列創建索引。 通常情況下,第一次創建資料庫時創建了表和索引。如果你不需要改變表的 schema,不需要刪除表和索引 . 刪除表和索引,需要使用 execSQL() 方法調用 DROP INDEX 和 DROP TABLE 語句。 給表添加數據 上面的代碼,已經創建了資料庫和表,現在需要給表添加數據。有兩種方法可以給表添加數據。 像上面創建表一樣,你可以使用 execSQL() 方法執行 INSERT, UPDATE, DELETE 等語句來更新表的數據。execSQL() 方法適用於所有不返回結果的 SQL 語句。例如: db.execSQL("INSERT INTO widgets (name, inventory)"+ "VALUES ('Sprocket', 5)"); 另一種方法是使用 SQPteDatabase 對象的 insert(), update(), delete() 方法。這些方法把 SQL 語句的一部分作為參數。示例如下: ContentValues cv=new ContentValues(); cv.put(Constants.TITLE, "example title"); cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I); db.insert("mytable", getNPlCPumnHack(), cv); update()方法有四個參數,分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 條件和可選的填充 WHERE 語句的字元串,這些字元串會替換 WHERE 條件中的“?”標記。update() 根據條件,更新指定列的值,所以用 execSQL() 方法可以達到同樣的目的。 WHERE 條件和其參數和用過的其他 SQL APIs 類似。例如: String[] parms=new String[] {"this is a string"}; db.update("widgets", replacements, "name=?", parms); delete() 方法的使用和 update() 類似,使用表名,可選的 WHERE 條件和相應的填充 WHERE 條件的字元串。 查詢資料庫 類似 INSERT, UPDATE, DELETE,有兩種方法使用 SELECT 從 SQPte 資料庫檢索數據。 1 .使用 rawQuery() 直接調用 SELECT 語句; 使用 query() 方法構建一個查詢。 Raw Queries正如 API 名字,rawQuery() 是最簡單的解決方法。通過這個方法你就可以調用 SQL SELECT 語句。例如: Cursor c=db.rawQuery( "SELECT name FROM sqPte_master WHERE type='table' AND name='mytable'", nPl); 在上面例子中,我們查詢 SQPte 系統表(sqPte_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的方法可以迭代查詢結果。如果查詢是動態的,使用這個方法就會非常復雜。例如,當你需要查詢的列在程序編譯的時候不能確定,這時候使用 query() 方法會方便很多。 RegPar Queriesquery() 方法用 SELECT 語句段構建查詢。SELECT 語句內容作為 query() 方法的參數,比如:要查詢的表名,要獲取的欄位名,WHERE 條件,包含可選的位置參數,去替代 WHERE 條件中位置參數的值,GROUP BY 條件,HAVING 條件。除了表名,其他參數可以是 nPl。所以,以前的代碼段可以可寫成: String[] cPumns={"ID", "inventory"}; String[] parms={"snicklefritz"}; Cursor resPt=db.query("widgets", cPumns, "name=?",parms, nPl, nPl, nPl); 使用游標不管你如何執行查詢,都會返回一個 Cursor,這是 Android 的 SQPte 資料庫游標,使用游標,你可以:通過使用 getCount() 方法得到結果集中有多少記錄;通過 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍歷所有記錄;通過 getCPumnNames() 得到欄位名;通過 getCPumnIndex() 轉換成欄位號;通過 getString(),getInt() 等方法得到給定欄位當前記錄的值;通過 requery() 方法重新執行查詢得到游標;通過 close() 方法釋放游標資源;例如,下面代碼遍歷 mytable 表 Cursor resPt=db.rawQuery("SELECT ID, name, inventory FROM mytable"); resPt.moveToFirst(); while (!resPt.isAfterLast()) { int id=resPt.getInt(0); String name=resPt.getString(1); int inventory=resPt.getInt(2); // do something usefP with these resPt.moveToNext(); } resPt.close(); 在 Android 中使用 SQPte 資料庫管理工具 在其他資料庫上作開發,一般都使用工具來檢查和處理資料庫的內容,而不是僅僅使用資料庫的 API。使用 Android 模擬器,有兩種可供選擇的方法來管理資料庫。首先,模擬器綁定了 sqPte3 控制台程序,可以使用 adb shell 命令來調用他。只要你進入了模擬器的 shell,在資料庫的路徑執行 sqPte3 命令就可以了。資料庫文件一般存放 在:/data/data/your.app.package/databases/your-db-name如果你喜歡使用更友好的工具,你 可以把資料庫拷貝到你的開發機上,使用 SQPte-aware 客戶端來操作它。這樣的話,你在一個資料庫的拷貝上操作,如果你想要你的修改能反映到設備上,你需要把資料庫備份回去。把資料庫從設備上考出來,你可以使 用 adb pPl 命令(或者在 IDE 上做相應操作)。存儲一個修改過的資料庫到設備上,使用 adb push 命令。一個最方便的 SQPte 客戶端是 FireFox SQPte Manager 擴展,它可以跨所有平台使用。 圖 2. SQPte Manager 結束語 如果你想要開發 Android 應用程序,一定需要在 Android 上存儲數據,使用 SQPte 資料庫是一種非常好的選擇。本文介紹了如何在 Android 應用程序中使用 SQPte 資料庫 ,主要介紹了在 Android 應用程序中使用 SQPte 創建資料庫和表、添加數據、更新和檢索數據,還介紹了比較常用的 SQPte 管理工具,通過閱讀本文,你可以在 Android 中輕松操作 SQPte 資料庫。

⑹ 如何使用sqlite創建資料庫

1.首先你需要去下載一個 Navicat for SQLite ,怎麼下載這里我不多說,你可以去網路搜索。最好下載綠色版。搜索 「Navicat for SQLite 綠色版」。

2.下載後,右擊軟體包進行解壓縮。

3.下載後雙擊文件夾,打開文件目錄,找到 navicat.exe 這個主程序,右擊在彈出菜單依次點擊【發送到(N)】--->【桌面快捷方式】。

4.這時你的電腦桌面就多了一個 navicat.exe 的快捷方式圖標,以後需要打開,直接點擊這個快捷方式就可以了。

5.雙擊桌面快捷方式,打開軟體,在軟體左上角點擊【連接】按鈕,點擊後彈出新建連接對話框。

6.在彈出窗口中輸入【連接名】,選擇【類型】-然後在下面選擇資料庫文件,或者資料庫保存位置。

7.這樣就在你的指定位置創建了一個Sqlite資料庫文件了,有了這個資料庫文件你可以做任何資料庫的操作了。

⑺ 如何用SQLite方法做數據儲存

Android提供了5種方式存儲數據: 1、使用SharedPreferences存儲數據; 2、文件存儲數據; 3、SQLite資料庫存儲數據; 4、使用ContentProvider存儲數據; 5、網路存儲數據;

⑻ 如何使用SQLite

前些時候看到興趣小組里有人問「Android上SQLite的最佳實踐」是什麼,好奇地搜了一下,確實沒有一個好一點的指導文檔,平時的使用也只是簡單的拷貝code,並沒有深入的研究過。以下是我看到的Kevin關於其使用的心得,原文的大體的意思是:Android例子涵蓋了一些Sqlite的基本用法,但它們並沒有深入地給出合理的使用方法,更重要的是,不合理的使用方法。大多數例子和文檔只是涉及最基本的資料庫查詢,或者教你如何創建一個ContentProvider。從來不提及的地方像: · 什麼地方創建和保存SQLiteOpenHelper實例? · 可以有多少個實例? · 多線程同時訪問資料庫有沒有什麼要擔心的?基本的內容是,你可以任意次數地連接Sqlite資料庫,而且Android系統也支持你這樣做。Sqlite擁有文件級別的鎖,用來同步訪問和防止錯誤。如果你只知道這些,那麼,將會給你帶來很大的痛苦。開源的一個好處是,你可以深入代碼一探究竟。從代碼和一些測試中,我了解到以下事實: · Sqlite擁有文件級別的鎖。許多線程可以同時讀,但只有一個可以寫。鎖阻止多個同時寫入。 · Android在SQLiteDatabase中實現了一些java鎖來確保動作是同步進行。 · 如果你用多個線程瘋狂地訪問資料庫,你的資料庫不會(或不應該)崩潰。沒提到的是,如果你通過多個不同的真實連接同時寫資料庫,其中的某個會失敗,它不會等到前一個完成後繼續寫入。簡單地,不會寫入你的改變,更糟糕的是,你也得不到一個異常,只是在LogCat中輸出一些message,僅此而已。SQLiteOpenHelper類做了一些有趣的事。盡管它有方法可以獲得一個只讀的連接和可讀寫的連接,但實質上它們是同一個連接。假設沒有文件寫錯誤的話,只讀的連接實質上就是一個可讀寫的連接。有趣吧。因此,如果你的app中使用一個helper的話,即便從多線程中使用,你也從未使用多個連接。同樣,一個helper中只有一個SQLiteDatabase的實例,這個實例中實現了一些java鎖。因此,當你正在執行資料庫的操作時,其它db的操作都將鎖定。即便是你使用多個線程來做這些事以便優化資料庫的性能,壞消息,沒有什麼用。按照我的認識,SQLite工作的方式,基本上不可能會破壞你的資料庫,除非代碼里有bug或者有硬體問題。因此,我推薦這樣使用:創建一個SQLiteOpenHelper靜態對象。什麼時候去close它呢?不需要。當app關閉,它會自動釋放文件引用。但是,會不會有「close() was never explicitly called on database」異常呢?如果你注意的話,當連接掛在那裡的時候,你沒有得到那個異常。你只是在連接已經建立,而你又嘗試打開另一個時才會有異常。因此,你只需要打開一次連接。像這樣來使用:public class DatabaseHelper extends OrmLiteSqliteOpenHelper{ private static DatabaseHelper instance; public static synchronized DatabaseHelper getHelper(Context context) { if (instance == null) instance = new DatabaseHelper(context); return instance; }//Other stuff... } 就這些。。。

⑼ sqlite資料庫從安裝到使用的方法,因為我看了之後不知道要不要安裝了

sqlite資料庫是不需要安裝的。
使用sqlite程序可以生成一個資料庫文件。例如test.db (文件名自己設定,擴展名也無要求)

當然,你的程序必須要支持sqlite,例如php是在配置中設置。

之後就可以在程序中調用sqlite的函數來操作這個文件。

⑽ system.data.sqlite 到底怎麼用

解決方法是把使用到了System.Data.Sqlite的項目的編譯平台改為X86,而不是所有平台或X64.
原因是如果是「所有平台」,那麼CLR只會搜索針對「所有平台」的System.Data.Sqlite.dll。而如果是"X86"或"X64",則會搜索相同平台及所有平台的版本。
而System.Data.Sqlite.dll本身因為使用了 Native Code, 所以不能編譯成所有平台的版本。

閱讀全文

與sqlite使用方法相關的資料

熱點內容
模具製作方法圖片 瀏覽:652
四川玩具檢測方法 瀏覽:78
如何用簡單的方法做蛋炒飯 瀏覽:278
貧窮有什麼解決方法 瀏覽:644
日照廣告牌製作安裝方法 瀏覽:24
爛西瓜如何提取青黴素方法 瀏覽:366
壓力表檢測讀書方法視頻 瀏覽:124
查看電腦位數的方法 瀏覽:7
心臟ct平掃方法步驟 瀏覽:26
用工荒最好的解決方法 瀏覽:87
電腦上網提速的方法win7 瀏覽:274
輸液反應有哪些並簡述處理方法 瀏覽:683
正確沖管方法 瀏覽:586
一年級筆畫的教學方法 瀏覽:403
離子液的製作方法視頻 瀏覽:644
什麼樣背誦方法能讓背誦又快又准 瀏覽:956
小學生的數學教學方法和步驟 瀏覽:498
電線皮線連電線連接方法 瀏覽:92
敏感肌檢測方法圖解 瀏覽:152
醬香壺的鑒別方法 瀏覽:51