當前位置:首頁 » 編程軟體 » sqlite編程

sqlite編程

發布時間: 2022-05-31 16:19:42

sqlite怎麼使用呀

下載一個sqlite客戶端工具就可以進行編程了,sqlite是用在移動設備上的小型資料庫,比較好用

❷ 如何使用SQLite,Android上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資料庫,遍歷資料庫,並把id存到一個數組里,這樣就可以用與item

如何編程遍歷sqlite資料庫,遍歷資料庫,並把id存到一個數組里,這樣就可以用與item
單獨寫個插入方法,每次做插入操作的時候都用插入方法寫。
插入多行的時候就遍歷list然後循環調用方法。
你在list裡面存的是你要存的對象,插入方法的參數也是那個對象。

❹ 《SQLite權威指南第二版》pdf下載在線閱讀全文,求百度網盤雲資源

《SQLite權威指南第二版》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1BbVWfxQL0V52IRCt3TY60w

?pwd=ggvf 提取碼:ggvf
簡介:本書是一本關於SQLite起源、特性、簡介、使用、深度解析的書。全書首先從SQLite 初起源、特性、設計理念、實際應用講解開始,逐步深入、全面地介紹了在各個平台如何使用SQLite。接著,介紹SQLite的一般SQL和高級功能的SQL,採取舉例說明,使得本書內容生動有趣。然後,全面介紹了各種語言如何與SQLite進行編程交互,重點介紹SQLite原生語言C語言中的API,使得使用者可以不管擴展SQLite的功能。本書還介紹了目前火熱的IOS和Android開發中如何使用SQLite,並給出實際例子。 後,介紹了SQLite內部架構設計,使得讀者可以深入理解SQLite,高級開發者可以進一步參與SQLite開發或者開發自己的SQLite。

❺ sqlite是什麼意思

SQLite,是一款輕型的資料庫,是遵守ACID的關系型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源的世界著名資料庫管理系統來講,它的處理速度比他們都快。SQLite第一個Alpha版本誕生於2000年5月。 至2015年已經有15個年頭,SQLite也迎來了一個版本 SQLite 3已經發布。
SQLite引擎不是個程序與之通信的獨立進程,而是連接到程序中成為它的一個主要部分。所以主要的通信協議是在編程語言內的直接API調用。這在消耗總量、延遲時間和整體簡單性上有積極的作用。整個資料庫(定義、表、索引和數據本身)都在宿主主機上存儲在一個單一的文件中。它的簡單的設計是通過在開始一個事務的時候鎖定整個數據文件而完成的。
參考資料網路《SQLite》。

❻ 如何學習sqlite源碼

先來說說sqlite的資料.
首先sqlite的資料其實是不多不少的.
不少的原因是因為這些資料確實能夠讓你明白sqlite的設計原理.
說它不多的原因是也就讓你明白其原理, 僅此而已.

sqlite的資料主要來自四個地方, 從簡到深依次為:
1.<>, 這是一本介紹sqlite"基本原理"的小書, 只有80頁左右, 介紹了sqlite的"後端"原理. 這本書在網路有下載, 純英文版的, 鏈接:inside sqlite_網路知道. 在上面的github上, 我們項目的同伴對這本書做了翻譯, 不過還沒完成, 建議直接掃原版.

2.官方文檔, 連接:SQLite Documentation. 但是裡面的文檔對於學習者來說也有輕重之分, 建議主要閱讀 "SQLite Technical/Design Documentation" 這一欄的技術文檔.

3.<<SQLite Database System: Design and Implementation>>. 這也是一本說sqlite的小書, 不到200頁. 這本書的內容其實和<<inside sqlite>>有重疊, 甚至不少地方的段落是直接復制過來的... 不過這本書比<<inside sqlite>>詳細很多, 也建議掃描一遍. 這本書我目前在做翻譯, 做了3,4,5,6四章的翻譯了. 不過是很粗翻譯, 不建議直接看...

4.源碼注釋. sqlite的源碼注釋非常詳細, 詳細到比上面兩本書說的還多... sqlite的每份.c代碼內的注釋差不多快比代碼還多了, 而且除了將基本架構外, 很多上述資料沒有提到的細節, 也在源碼注釋中被提了出來.

================================================================

接下來說一下本人推薦的學習方法~~

================================================================

下面是認真學習的方法, 如果想快速暴力的學習, 直接看下一段.

想要認真點學習的話.
應該先去看"Architecture of SQLite"這篇文檔, 該文檔詳細的介紹了sqlite的7層結構, 總體被分為了"前段", "中層VM", "後端".

看完arch.html那文過後, 你就知道"前端"主要做的是語法分析, "後端"主要實現了資料庫性質(ACID, 增刪查改).
個人建議從後端開始學習, 畢竟學習sqlite是學習怎麼實現資料庫.

後端的tree, pager, os三層, 其實都不難(起碼理解起來不難),
我建議OS->PAGER->TREE這樣邊學習, 邊寫demo.
簡要說一下我在學習這三層過程中遇到的一些點, 希望能幫到樓主.

OS:
os是很薄的一層, 主要是為了提高可移植性而被設計出來的.
學習這一層的方法很粗暴:看"The OS Backend (VFS) To SQLite", 然後去看源碼中的"test_demovfs.c".
主要搞清下面三個結構體.
sqlite3_vfs
sqlite3_io_methods
sqlite3_file
在我github中的demo1.1中, 有一個更簡單的demo, 可以參考看下裡面的os.c, os.h, unix_os.c三份代碼.

-------------------------------------------------

Pager:
Pager主要實現了三段功能: ACID, log, cache.
先說ACID:
ACID的這部分我只看了最最基本的方法, 然後選擇跳過的, sqlite實現ACID的方法可以看"Atomic Commit In SQLite",
這里是我翻譯的, 能看,
"how-to-implement-a-DB-like-sqlite/SQLite怎樣實現原子性.md at master · qw4990/how-to-implement-a-DB-like-sqlite · GitHub".
除了這篇最基本的文檔, 推薦看<<SQLite Database System: Design and Implementation>>的3章和4章, 看完能理解sqlite實現ACID的基本方法.

接著是cache, sqlite提供了插件式的cache結構, 所以你或許會驚訝為什麼sqlite裡面同時有pager.c, pcache.c, pcache1.c:
cache這個部分比較簡單, <<inside sqlite>>第三章, <<SQLite Database System>>第五章都有詳細的介紹, 主要講解了pager實現cache的方法.
在我github中的demo1.1中, cache的功能也已經完成了, 1 可以參考看下裡面的pager.h, pager.c, pcache.c, pcahce1這四份代碼.

最後是log:
這部分我現在直接選擇了忽視...

----------------------------------------------------

Tree層:
sqlite的tree層就是用B+/B-樹維護數據, 以達到快速"增刪查改"的目的.
這一層在官方文檔里沒多少資料.
先是演算法本身, 也就是B+/B-/B樹, 沒什麼好說的, 很多演算法書都有.
接下來重點是sqlite怎麼將B樹應用到自身的資料庫中的.
這一點可以看<<inside sqlite>>的第5章, <<SQLite Database System>>的第6章, 都有很詳細的介紹.
<<SQLite Database System>>講得更為仔細, 除了說原理外, 還說了sqlite里btree大致被分為了幾個結構體在工作.

以上就是我學習後端遇到的一些點吧.

=============================================================

如果嫌棄上面的學習方法麻煩的話,
可以先掃一下"Architecture of SQLite",
接著再看一下"Atomic Commit In SQLite",
最後簡單粗暴的把推薦的那兩本書掃完,
也大致知道sqlite是怎麼設計的了.

不過個人認為sqlite是一個"大師級的精緻的工藝品", 光看完兩本書就說自己學完了它, 未免有點"暴殄天物".
除了基本的資料庫設計方法(也就是那兩本書的內容), sqlite的源代碼中所蘊含的編程技巧, 工程設計, 以及各種小考慮, 也是非常值得吸收學習的.

=============================================================

最後總結一下
如果想簡單粗暴快捷的學習, 直接掃arch.html, atomiccommit.html和那兩本書, 就能明白sqlite是怎樣被設計的了.
如果想深入學習, 建議從7層開始向前學, 邊翻文檔邊看源碼邊寫demo.

❼ 編程實現sqlite資料庫讀取excel表格的內容,並用android提取sqlite中的數據

你可以先用poi框架,將Excel中的內容讀取出來,然後寫入資料庫中,然後就可以從資料庫中讀取你想要的內容了,希望這些對你有所幫助。

❽ 安卓sqlite需要有什麼基礎

一.基礎知識: 1.SQLite的數據類型: NULL:空值。 INTEGER:帶符號的整型,具體取決有存入數字的范圍大小。 REAL:浮點數字,存儲為8-byte IEEE浮點數。 TEXT:字元串文本。 BLOB:二進制對象。 smallint 16位元的整數。 interger 32位元的整數。 decimal(p,s) p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。 float 32位元的實數。 double 64位元的實數。 char(n) n 長度的字串,n不能超過 254。 varchar(n) 長度不固定且其最大長度為 n 的字串,n不能超過 4000。 graphic(n) 和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是為了支援兩個字元長度的字體,例如中文字。 vargraphic(n) 可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000 date 包含了 年份、月份、日期。 time 包含了 小時、分鍾、秒。 timestamp 包含了 年、月、日、時、分、秒、千分之一秒。 datetime 包含日期時間格式,必須寫成'2010-08-05'不能寫為'2010-8-5',否則在讀取時會產生錯誤! 2.SQLite的基本操作: ①SQLiteOpenHelper 抽象類:通過從此類繼承實現用戶類,來提供資料庫打開、關閉等操作函數。 [java] // 創建資料庫 public void onCreate(SQLiteDatabase db) // 更新資料庫 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打開資料庫 public void onOpen(SQLiteDatabase db) // 得到一個可讀SQLiteDatabase對象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一個可寫SQLiteDatabase對象 public synchronized SQLiteDatabase getWriteableDatabase() // 創建資料庫 public void onCreate(SQLiteDatabase db) // 更新資料庫 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打開資料庫 public void onOpen(SQLiteDatabase db) // 得到一個可讀SQLiteDatabase對象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一個可寫SQLiteDatabase對象 public synchronized SQLiteDatabase getWriteableDatabase() ②SQLiteDatabase 資料庫訪問類:執行對資料庫的插入記錄、查詢記錄等操作。 [java] execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句; rawQuery()方法可以執行select語句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相當於select語句from關鍵字後面的部分。如果是多表聯合查詢,可以用逗號將兩個表名分開。 columns:要查詢出來的列名。相當於select語句select關鍵字後面的部分。 selection:查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用佔位符“?” selectionArgs:對應於selection語句中佔位符的值,值在數組中的位置與佔位符在語句中的位置必須一致,否則就會有異常。 groupBy:相當於select語句group by關鍵字後面的部分 having:相當於select語句having關鍵字後面的部分 orderBy:相當於select語句order by關鍵字後面的部分,如:personid desc, age asc; limit:指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分。 //還有兩個,網上貌似都用的比較少,而我們這個例子中採用的是這些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常設置為null ContentValues values // 待插入的數據 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的內容 String whereClause, // 選擇通過哪個欄位來更新 String [] whereArgs // 為whereClause欄位要查詢的值 ) execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句; rawQuery()方法可以執行select語句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相當於select語句from關鍵字後面的部分。如果是多表聯合查詢,可以用逗號將兩個表名分開。 columns:要查詢出來的列名。相當於select語句select關鍵字後面的部分。 selection:查詢條件子句,相當於select語句where關鍵字後面的部分,在條件子句允許使用佔位符“?” selectionArgs:對應於selection語句中佔位符的值,值在數組中的位置與佔位符在語句中的位置必須一致,否則就會有異常。 groupBy:相當於select語句group by關鍵字後面的部分 having:相當於select語句having關鍵字後面的部分 orderBy:相當於select語句order by關鍵字後面的部分,如:personid desc, age asc; limit:指定偏移量和獲取的記錄數,相當於select語句limit關鍵字後面的部分。 //還有兩個,網上貌似都用的比較少,而我們這個例子中採用的是這些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常設置為null ContentValues values // 待插入的數據 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的內容 String whereClause, // 選擇通過哪個欄位來更新 String [] whereArgs // 為whereClause欄位要查詢的值 ) ③下面為網上常用的訪問資料庫的一般流程: [java] public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4}); db.close(); }; public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4}); db.close(); }; 二.編程實現: 1. 界面編輯(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:text="創建資料庫" android:id="@+id/ButtonCreate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="增加數據" android:id="@+id/ButtonInsert" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="更新數據" android:id="@+id/ButtonUpdate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="查詢數據" android:id="@+id/ButtonQuery" android:layout_width="fill_parent" android:layout_height="wrap_content"> 定義了一個垂直方向上的線性布局,及各操作的按鈕,水平方向充滿父窗口,垂直方向與內容等高。 界面布局效果如下: 2. 代碼編輯(srcwyfzclMyActivity.java): [java] package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相關包 import android.app.Activity; //引入相關包 import android.content.ContentValues; //引入相關包 import android.database.Cursor; //引入相關包 import android.database.sqlite.SQLiteDatabase; //引入相關包 import android.os.Bundle; //引入相關包 import android.view.View; //引入相關包 import android.widget.Button; //引入相關包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //創建資料庫按鈕 private Button insertBut; //增加資料庫記錄按鈕 private Button updateBut; //更新資料庫記錄按鈕 private Button queryBut; //查詢資料庫記錄按鈕 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //實例化創建資料庫按鈕 insertBut=(Button)findViewById(R.id.ButtonInsert); //實例化插入資料庫按鈕 updateBut=(Button)findViewById(R.id.ButtonUpdate); //實例化更新資料庫按鈕 queryBut=(Button)findViewById(R.id.ButtonQuery); //實例化查詢資料庫按鈕 createButton.setOnClickListener(new View.OnClickListener() {//創建資料庫時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Toast.makeText(MyActivity.this, "創建或打開資料庫", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加資料庫記錄時調用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues對象 cv.put("uid", 1); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 cv.put("uname", "zcl"); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "插入記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 sld.insert("sqlitetest", null, cv);//增加資料庫記錄 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //創建資料庫 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 ContentValues cv = new ContentValues(); //得到ContentValues對象 Toast.makeText(MyActivity.this, "更新記錄", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新資料庫記錄 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查詢資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "查詢記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //列印輸出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相關包 import android.app.Activity; //引入相關包 import android.content.ContentValues; //引入相關包 import android.database.Cursor; //引入相關包 import android.database.sqlite.SQLiteDatabase; //引入相關包 import android.os.Bundle; //引入相關包 import android.view.View; //引入相關包 import android.widget.Button; //引入相關包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //創建資料庫按鈕 private Button insertBut; //增加資料庫記錄按鈕 private Button updateBut; //更新資料庫記錄按鈕 private Button queryBut; //查詢資料庫記錄按鈕 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //實例化創建資料庫按鈕 insertBut=(Button)findViewById(R.id.ButtonInsert); //實例化插入資料庫按鈕 updateBut=(Button)findViewById(R.id.ButtonUpdate); //實例化更新資料庫按鈕 queryBut=(Button)findViewById(R.id.ButtonQuery); //實例化查詢資料庫按鈕 createButton.setOnClickListener(new View.OnClickListener() {//創建資料庫時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Toast.makeText(MyActivity.this, "創建或打開資料庫", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加資料庫記錄時調用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues對象 cv.put("uid", 1); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 cv.put("uname", "zcl"); //放入鍵值對,鍵要與列名一致,值要與列的數據類型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "插入記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 sld.insert("sqlitetest", null, cv);//增加資料庫記錄 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //創建資料庫 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 ContentValues cv = new ContentValues(); //得到ContentValues對象 Toast.makeText(MyActivity.this, "更新記錄", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新資料庫記錄 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查詢資料庫記錄時調用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//創建資料庫 Toast.makeText(MyActivity.this, "查詢記錄", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一個SQLiteDatabase對象,用於操控資料庫 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //列印輸出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } (.java): [java] package wyf.zcl.sqlitedb; import android.content.Context; //引入相關包 import android.database.sqlite.SQLiteDatabase; //引入相關包 import android.database.sqlite.SQLiteOpenHelper; //引入相關包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相關包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//繼承SQLiteOpenHelper的類,必須有該構造函數 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //創建資料庫時調用,此方法是在調用了getReadableDatabase()或getWritableDatabase()後才調用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升級資料庫時掉用 } } package wyf.zcl.sqlitedb; import android.content.Context; //引入相關包 import android.database.sqlite.SQLiteDatabase; //引入相關包 import android.database.sqlite.SQLiteOpenHelper; //引入相關包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相關包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//繼承SQLiteOpenHelper的類,必須有該構造函數 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //創建資料庫時調用,此方法是在調用了getReadableDatabase()或getWritableDatabase()後才調用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升級資料庫時掉用 } }

❾ Android開發 sqlite作用

SQLite簡介
Google為Andriod的較大的數據處理提供了SQLite,他在數據存儲、管理、維護等各方面都相當出色,功能也非常的強大。SQLite具備下列特點:

1.輕量級
使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。
2.獨立性
SQLite 資料庫的核心引擎不需要依賴第三方軟體,也不需要所謂的「安裝」。
3.隔離性
SQLite 資料庫中所有的信息(比如表、視圖、觸發器等)都包含在一個文件夾內,方便管理和維護。
4.跨平台
SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統也是能夠運行,比如:Android。
5.多語言介面
SQLite 資料庫支持多語言編程介面。
6.安全性
SQLite 資料庫通過資料庫級上的獨占性和共享鎖來實現獨立事務處理。這意味著多個進程可以在同一時間從同一資料庫讀取數據,但只能有一個可以寫入數據。
Android中的SQLite使用
首先創建資料庫類

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DB_NAME = "mydata.db"; //資料庫名稱
private static final int version = 1; //資料庫版本

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}

SQLiteOpenHelper類介紹
SQLiteOpenHelper是SQLiteDatabase的一個幫助類,用來管理資料庫的創建和版本的更新。一般是建立一個類繼承它,並實現它的onCreate和onUpgrade方法。

方法名
方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 構造方法,一般是傳遞一個要創建的資料庫名稱那麼參數
onCreate(SQLiteDatabase db) 創建資料庫時調用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新時調用
getReadableDatabase() 創建或打開一個只讀資料庫
getWritableDatabase() 創建或打開一個讀寫資料庫
下面來介紹調用的方法
創建資料庫
這里特別的地方是通過調用了SQLiteOpenHelper類的getReadableDatabase()方法來實現創建一個資料庫的

1
2
3

DatabaseHelper database = new DatabaseHelper(this);//這段代碼放到Activity類中才用this
SQLiteDatabase db = null;
db = database.getReadalbeDatabase();

SQLiteDatabase類為我們提供了很多種方法,而較常用的方法如下

(返回值)方法名
方法描述

(int) delete(String table,String whereClause,String[] whereArgs) 刪除數據行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加數據行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新數據行的便捷方法
(void) execSQL(String sql) 執行一個SQL語句,可以是一個select或其他的sql語句
(void) close() 關閉資料庫
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查詢指定的數據表返回一個帶游標的數據集
(Cursor) rawQuery(String sql, String[] selectionArgs) 運行一個預置的SQL語句,返回帶游標的數據集(與上面的語句最大的區別就是防止SQL注入)
數據的添刪改查分別可以通過2種途徑來實現
數據的添加
1.使用insert方法

1
2
3

ContentValues cv = new ContentValues();//實例化一個ContentValues用來裝載待插入的數據cv.put("username","Jack Johnson");//添加用戶名
cv.put("password","iLovePopMusic"); //添加密
db.insert("user",null,cv);//執行插入操作

2.使用execSQL方式來實現

1
2

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL語句
db.execSQL(sql);//執行SQL語句

數據的刪除
同樣有2種方式可以實現

1
2
3

String whereClause = "username=?";//刪除的條件
String[] whereArgs = {"Jack Johnson"};//刪除的條件參數
db.delete("user",whereClause,whereArgs);//執行刪除

使用execSQL方式的實現

1
2

String sql = "delete from user where username='Jack Johnson'";//刪除操作的SQL語句
db.execSQL(sql);//執行刪除操作

數據修改
同上,仍是2種方式

1
2
3
4
5

ContentValues cv = new ContentValues();//實例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的欄位及內容
String whereClause = "username=?";//修改條件
String[] whereArgs = {"Jack Johnson"};//修改條件的參數
db.update("user",cv,whereClause,whereArgs);//執行修改

使用execSQL方式的實現

1
2

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL語句
db.execSQL(sql);//執行修改

數據查詢
數據查詢相對前面幾種方法就復雜一些了,因為查詢會帶有很多條件
通過query實現查詢的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
各參數說明:
table:表名稱
colums:列名稱數組
selection:條件子句,相當於where
selectionArgs:條件語句的參數數組
groupBy:分組
having:分組條件
orderBy:排序類
limit:分頁查詢的限制
Cursor:返回值,相當於結果集ResultSet
針對游標(Cursor)也提供了不少方法

方法名稱
方法描述

getCount() 總記錄條數
isFirst() 判斷是否第一條記錄
isLast() 判斷是否最後一條記錄
moveToFirst() 移動到第一條記錄
moveToLast() 移動到最後一條記錄
move(int offset) 移動到指定的記錄
moveToNext() 移動到嚇一條記錄
moveToPrevious() 移動到上一條記錄
getColumnIndex(String columnName) 獲得指定列索引的int類型值
實現代碼

1
2
3
4
5
6
7
8

Cursor c = db.query("user",null,null,null,null,null,null);//查詢並獲得游標
if(c.moveToFirst()){//判斷游標是否為空
for(int i=0;i<c.getCount();i++){
c.move(i);//移動到指定記錄
String username = c.getString(c.getColumnIndex("username");
String password = c.getString(c.getColumnIndex("password"));
}
}

通過rawQuery實現的帶參數查詢

1
2
3
4

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
String password = c.getString(c.getColumnIndex("password"));
}

❿ Android編程中如何在一個SQLite資料庫創建兩個表

完全可以的.

SQLiteDatabase.insert(String
table, String
nullColumnHack, ContentValues
values)

db的插入,查詢,刪除函數的第一個參數就是table_name,就可以對指定的表進行操作

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:646
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:937
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:633
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:822
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:732
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1067
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:300
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:161
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:853
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:764