Sqlite3 語句解析
自己看示例吧,解釋的很清楚了。
void GetTable()
{
sqlite3 * db;
int result;
char * errmsg = NULL;
char **dbResult; //是 char ** 類型,兩個*號
int nRow, nColumn;
int i , j;
int index;
result = sqlite3_open( “c:\\Dcg_*”, &db );
if( result != SQLITE_OK )
{
//數據庫打開失敗
return -1;
}
//數據庫操作代碼
//假設前面已經創建了 MyTable_1 表
//開始查詢,傳入的 dbResult 已經是 char **,這里又加了一個 & 取地址符,傳遞進去的就成了 char ***
result = sqlite3_get_table( db, “select * from MyTable_1”, &dbResult, &nRow, &nColumn, &errmsg );
if( SQLITE_OK == result )
{
//查詢成功
index = nColumn; //前面說過 dbResult 前面第一行數據是字段名稱,從 nColumn 索引開始才是真正的數據
printf( “查到%d條記錄\n”, nRow );
for( i = 0; i < nRow ; i )
{
printf( “第 %d 條記錄\n”, i 1 );
for( j = 0 ; j < nColumn; j )
{
printf( “字段名:%s ?>; 字段值:%s\n”, dbResult[j], dbResult [index] );
index; // dbResult 的字段值是連續的,從第0索引到第 nColumn - 1索引都是字段名稱,從第 nColumn 索引開始,后面都是字段值,它把一個二維的表(傳統的行列表示法)用一個扁平的形式來表示
}
printf( “-------\n” );
}
}
//到這里,不論數據庫查詢是否成功,都釋放 char** 查詢結果,使用 sqlite 提供的功能來釋放
sqlite3_free_table( dbResult );
//關閉數據庫
sqlite3_close( db );
return 0;
}
}*/
linux下怎樣能執行sqlite3多條SQL語句,比如一個txt文檔里存放多條語
只能循環讀出來執行,還要看 是不是帶參數,
下面是個讀sql 語句的函數
int db_order(sqlite3 *db,char *sql)
{
va_list ap;
int ret = 0;
ret = sqlite3_exec(db, sql, NULL, NULL, NULL);
sqlite3_free(sql);
if(ret != SQLITE_OK) {
fputs("insert error\n",stderr);
}
return ret;
}
int main(void)
{
sqlite3 *db;
char *sql=NULL;
sql = sqlite3_mprintf("select * from datebase;");
db_order(db,sql);
}
你把sqlite3_mprintf()里的語句換做讀出來的字符串
Sqlite3中replace話語用法詳解怎么解決
由于自己的孤陋寡聞, 也由于之前的項目中, 很少參與過數據庫模塊的開發, 以至于前幾天才知道Sqlite數據庫也支持replace語句。 本文主要講解在Sqlite中replace語句的行為,也算是學習筆記。此外, replace語句和update語句有相似的地方, 但是也有很多不同之處。 本文還要對比一下Sqlite中的 replace語句和update語句 。
在本例中使用如下數據庫表:
(圖 1)
該表的表名為student, 存儲學生信息。 所有字段的數據類型都是TEXT 。 其中id和name作為復合主鍵。 email字段加上了唯一約束。建表語句如下:
[sql] view plain copy
CREATE TABLE IF NOT EXISTS student (
"id" TEXT,
"name" TEXT NOT NULL,
"sex" TEXT,
"email" TEXT UNIQUE,
"fenshu" TEXT CHECK(fenshu > 0),
"tecid" TEXT REFERENCES teacher(id),
"class" TEXT,
PRIMARY KEY(id, name)
)
ios sqlite3修改語句怎么寫
sqlite數據庫中數據類型存在sqlite_master表中
select sql from sqlite_master where tb_name='tbname'
把這條sql語句改了,表結構就改了。
sqlite的alter table限制很多,所以一般直接把原表改名。
復制一個表名與原表一樣的,再把改名后的那個原表刪了,以下sql語句可以用。
新表改完字段類型如果不兼容原表,新表中的該字段數據讀不出。
所以要改類型可以不用聲明字段類型
begin
alter table zb RENAME TO tempxxx_1
create table zb(rkdh char(15) ,gbdh char(15) ,cph nchar(9) )
INSERT INTO zb(rkdh,gbdh,cph,) select rkdh,gbdh,cph FROM tempxxx_1
drop table tempXXX_1
commit
如何在Linux下用C/C++語言操作數據庫sqlite3
*數據庫特點(1)SQLite數據庫是開源的嵌入式數據庫,無需獨立的數據庫引擎,直接嵌入到應用程序進程中,因此,通過API,應用程序可以直接操作它。
(2)事務的處理是原子的,一致的,獨立的,可持久化的(ACID),即使在系統崩潰和掉電后。(3)SQLite數據庫通過獨占性與共享鎖來實現事務的獨立處理。
(4)一個單獨的跨平臺的磁盤文件就能夠存儲一個數據庫。(5)能支持2TB級的數據。
(6)自包含,無外部依賴性。(7)支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等數據類型。
(8)SQLite數據庫沒有用戶帳戶的概念。數據庫的權限僅依賴于文件系統。
*數據庫的基本操作(1)建立數據庫*3在當前目錄下建立了名為*3的數據庫。(2)建立數據表createtablecall_list(idINTEGERPRIMARYKEY,typeNUMERIC,telnumNUMERIC,bttimeTEXT,tcountNUMERIC,charge_rateNUMERIC,charge_sumNUMERIC);建立了名為call_list的數據表,有7個字段,分別為id,type,telnum,bttime,tcount,charge_*_rate.(3)向數據表中插入數據insertintocall_listvalues($num,1,2,'new',4,5,6);(4)查詢數據表中的數據select*fromcall_list;(5)修改call_list表中的數據updatecall_listsetid=00001000whereid=10001;(6)刪除表中的數據記錄deletefromcall_listwhereid=1000;(7)SQlite中的其它常用命令.tables-列出所有的數據庫中的數據表.schematablename-列出指定數據表的結構.quit-離開數據庫(8)SQLite數據庫的導入與導出a.將*數據庫的數據全部導出:*>.*>.dump這樣,數據就保存在*的文件中,注意這個文件不是數據庫,而是SQL語句。
然后再把這些數據導入到另外一個數據庫*數據庫中。*>.*這樣,數據就從*數據庫復制到*數據庫中去了。
b.將數據表中的數據導出到*中去.**/輸出重定向到*ect*fromcall_list;c.將導出的表中的數據導入到另一個數據庫的新建的表中去如:當從*中的call_list表中導出了數據,再導入到另外一個數據庫表call中去。首先建立表call.然后.*l即可。
3.C語言操作Sqlite數據庫API:intsqlite3_open(constchar*filename,sqlite3**ppdb);第一個參數用來指定數據庫文件名。第二個參數是一個數據庫標識符指針。
如果打開數據庫成功,則返回0,否則返回一個錯誤代碼。intsqlite3_close(sqlite3*);傳遞的參數是數據庫標識符指針用來關閉數據庫,操作成功是返回0,否則返回一個錯誤代碼。
intsqlite3_errcode(sqlite3*db);constchar*sqlite3_errmsg(sqlite3*db);constchar*sqlite3_errmsg16(sqlite3*db);這三個函數都是返回錯誤信息,第一個函數返回的是最近調用數據庫接口的錯誤代碼,第二,第三個函數是返回最近調用數據庫接口的錯誤信息。第二個函數返回的錯誤信息是用UTF-8編碼的,第三個函數返回的錯誤信息是用UTF-16編碼的。
intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);這個函數非常重用,是用來執行SQLite數據庫的SQL語句的。第一個參數是sqlite數據庫標識符指針。
第二個參數是要執行的SQL語句。第三個參數是一個回調函數,在執行查詢操作時用到,其它的操作可以傳空值即NULL。
第四個參數是傳遞給回調函數第一個參數的實參。第五個參數是一個錯誤信息。
回調函數:intcallback(void*,intargc,char**argv,char**cname);第一個參數是從sqlite3_exec傳遞過來的參數,可以為任意的類型。第二個參數是查詢的列數。
第三個參數是查詢結果集的值。第四個參數是列名。
intsqlite3_get_table(sqlite3*db,constchar*sql,char***result,int*row,int*col,char**errmsg);這個函數主要是用來查詢的。第一個參數是數據庫描述符指針第二個參數是SQL語句。
第三個參數是查詢的結果集。第四個參數是結果集中的行數。
第五個參數是結果集中的列數。第六個參數是錯誤信息。
它查詢出的行數是從字段名開始的。即第0行是字段名。
實例:/**本例主要實現用Sqlite的回調函數進行查詢intsqlite3_exec(sqlite3*,constchar*sql,int(*callback)(void*,int,char**,char**),void*,errmsg);第一個參數是數據庫標識符第二個參數是要執行的sql命令第三個參數是回調函數第四個參數是回調函數的第一個參數第五個參數是用于指示錯誤信息其中回調函數的形式:int_sql_callback(void*arg,intargc,char**argv,char**cname);第二個參數指示結果集中的列數第三個參數是保存結果集的字符串第四個參數是結果集中的列名**/#include#include#include#include#include#includeint_call_back(void*arg,intargc,char**argv,char**cname);intmain(){intres;constchar*dbfile="*1";char*errmsg=NULL;sqlite3*db;res=sqlite3_open(dbfile,&db);if(res!=0){perror("數據庫打開失敗");exit(EXIT_FAILURE);}//創建一張數據表constchar*sqlcreate="createtablecall_list(idINTEGERPRIMARYKEY,typeNUMERIC,telnum。