linuxsqlite3
如果是在編譯階段出現問題則是沒有引用頭文件
如果是鏈接階段則是沒有鏈接sqlite庫
簡單來說
gcc test.c -lsqlite3
這樣編譯, test.c裡面引用#include <sqlite3.h>
要保證有這個文件 /usr/include/sqlite3.h (如果位置不對則使用 -I 參數調整)
這只是最原始的辦法, 稍微好點的是使用gcc test.c `pkg-config --libs --cfalgs sqlite3`這類形式
具體參考pkg-config這個工具
真實項目中一般都不會這樣用,有專門的工程管理工具如autoconfig,cmake之類的。
對於初學者 建議去熟悉 編譯和鏈接這2個過程的一些介紹,和gcc 的-I -L 這2個參數。
2. 怎樣在Linux下從源代碼安裝SQLite 3
安裝 SQLite3
Uncompress the tar.gz file and install SQLite3 as shown below.
解壓tar.gz文件並像下面所示安裝
tar xvfz sqlite-autoconf-3070603.tar.gz
cd sqlite-autoconf-3070603
./configure
make
make install
make安裝命令後會有以下的輸出。
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3
test -z "/usr/local/include" || mkdir -p -- "/usr/local/include"
/usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/include/sqlite3.h'
/usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/include/sqlite3ext.h'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/share/man/man1/sqlite3.1'
test -z "/usr/local/lib/pkgconfig" || mkdir -p -- "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/lib/pkgconfig/sqlite3.pc'
3. 在Linux環境里怎麼打開一個sqlite的資料庫
下載一個Linux 的sqlite3工具(或到SqLite網站下載sqlite的源代碼,在你的系統中編譯出sqlite3工具),用這個工具打開:
sqlite3 /tmp/test.db
4. linux sqlite3怎麼通過命令行退出
ctrl + d 可以直接退出sqlite3
5. 如何在Linux下用C語言操作資料庫sqlite3
示例代碼:
// name: query.c
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey All rights reserved.
// data : 2006/11/18
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
");
//創建一個表,如果該表存在,則不創建,並給出提示信息,存儲在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
//插入數據
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult; //二維數組存放結果
//查詢數據
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d
" , nrow , ncolumn );
printf( "
The result of querying is :
" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s
", i , azResult[i] );
//釋放掉 azResult 的內存空間
sqlite3_free_table( azResult );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}
我們這里用到了一個查詢的語句是 "SELECT * FROM SensorData " ,
在C語言中對應的函數介面是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
這個函數介面的解釋在程序中已經注釋。
下面我們編譯運行下看看,
[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# gcc query.c -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
query.c:29:21: warning: multi-line string literals are deprecated
[root@localhost temp]# ./a.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:2 column=5
The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 1
azResult[12] = 1
azResult[13] = 200605011306
azResult[14] = 16.4
zErrMsg = (null)
這里我們可以看到,azResult 的前面 5 個數據正好是我們的表 SensorData 的列屬性,
之後才是我們要查詢的數據。所以我們的程序中才有 i<( nrow + 1 ) * ncolumn 的判斷條件:
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s ", i , azResult[i] );
輸出中有 zErrMsg = (null) 這樣的字句,這是 zErrMsg 保留的錯誤信息,
正如你所看到的,zErrMsg 為空,表明在執行過程中沒有錯誤信息。
6. 如何在Linux中向sqlite3資料庫中插入數據
0. 引言 我們這篇文章主要講述了如何在C/C++語言中調用 sqlite 的函數介面來實現對資料庫的管理, 包括創建資料庫、創建表格、插入數據、查詢數據、刪除數據等。 1. 說明 這里我們假設你已經編譯好了sqlite的庫文件 : libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig 和可執行文件 : sqlite3 我們再假設你的sqlite3的安裝目錄在 /usr/local/sqlite3 目錄下。 如果不是,我們可以這樣做,將你的安裝文件復制到 /usr/local/sqlite3 這個目錄, 這樣我們好在下面的操作中更加統一,從而減少出錯的概率 例如:[root@localhost home]# cp -rf sqlite-3.3.8-ix86/ /usr/local/sqlite3 這里假設 /home/sqlite-3.3.8-ix86/ 是你的安裝目錄,也就是說你的sqlite原來就是安裝在這里 這樣之後,我們的sqlite3的庫文件目錄是:/usr/local/sqlite3/lib 可執行文件 sqlite3 的目錄是: /usr/local/sqlite3/bin 頭文件 sqlite3.h 的目錄是: /usr/local/sqlite3/include 好拉,現在開始我們的Linux下sqlite3編程之旅。 2. 開始 這里我們現在進行一個測試。 現在我們來寫個C/C++程序,調用 sqlite 的 API 介面函數。 下面是一個C程序的例子,顯示怎麼使用 sqlite 的 C/C++ 介面. 資料庫的名字由第一個參數取得且第二個參數或更多的參數是 SQL 執行語句. 這個函數調用sqlite3_open() 在 16 行打開資料庫,並且sqlite3_close() 在 25 行關閉資料庫連接。 [root@localhost temp]# vi opendbsqlite.c 按下i 鍵切換到輸入模式,輸入下列代碼:// name: opendbsqlite.c // This prog is used to test C/C++ API for sqlite3.It is very simple,ha! // Author : zieckey All rights reserved. // data : 2006/11/13 #include <stdio.h> #include <sqlite3.h> int main( void ) { sqlite3 *db=NULL; char *zErrMsg = 0; int rc; //打開指定的資料庫文件,如果不存在將創建一個同名的資料庫文件 rc = sqlite3_open("zieckey.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("You have opened a sqlite3 database named zieckey.db successfully! Congratulations! Have fun ! ^-^ "); sqlite3_close(db); //關閉資料庫 return 0; } 退出,保存。(代碼輸入完成後,按下 Esc 鍵,然後輸入: :wq ,回車就好拉) 好拉,現在編譯:[root@localhost temp]# gcc opendbsqlite.c -o db.out 或者遇到這樣的問題:[root@localhost temp]# gcc opendbsqlite.c -o db.out opendbsqlite.c:11:21: sqlite3.h: 沒有那個文件或目錄 opendbsqlite.c: In function `main': opendbsqlite.c:19: `sqlite3' undeclared (first use in this function) opendbsqlite.c:19: (Each undeclared identifier is reported only once opendbsqlite.c:19: for each function it appears in.) opendbsqlite.c:19: `db' undeclared (first use in this function) 這是由於沒有找到頭文件的原因。 也許會碰到類似這樣的問題:[root@localhost temp]# gcc opendbsqlite.c -o db.out /tmp/ccTkItnN.o(.text+0x2b): In function `main': : undefined reference to `sqlite3_open' /tmp/ccTkItnN.o(.text+0x45): In function `main': : undefined reference to `sqlite3_errmsg' /tmp/ccTkItnN.o(.text+0x67): In function `main': : undefined reference to `sqlite3_close' /tmp/ccTkItnN.o(.text+0x8f): In function `main': : undefined reference to `sqlite3_close' collect2: ld returned 1 exit status 這是個沒有找到庫文件的問題。 下面我們著手解決這些問題。 由於用到了用戶自己的庫文件,所用應該指明所用到的庫,我們可以這樣編譯: [root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 我用用 -lsqlite3 選項就可以了(前面我們生成的庫文件是 libsqlite3.so.0.8.6 等, 去掉前面的lib和後面的版本標志,就剩下 sqlite3 了所以是 -lsqlite3 )。 如果我們在編譯安裝的時候,選擇了安裝路徑,例如這樣的話:....... # ../sqlite/configure --prefix=/usr/local/sqlite3 # make .......作者:zieckey
insert into thetable values (...)
7. sqlite3 在linux下怎麼使用
如果是ubuntu, 可以用sudo apt-get install sqlite3 安裝
8. 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()里的語句換做讀出來的字元串
9. linux sqlite3使用的一個問題
這個a表是建在main庫里的(此時為內存庫), 而非附加上來的cc.db里
所以在退出(之後被釋放),再進入時沒有存儲。
若要存儲於cc.db中:
# sqlite3 cc.db
SQLite version 3.5.6
Enter ".help" for instructions
sqlite> create table a(id int primary key );
sqlite> .tables
a
sqlite> .quit
[root@localhost root]#
10. 怎樣在Linux下從源代碼安裝SQLite3
安裝 SQLite3
Uncompress the tar.gz file and install SQLite3 as shown below.
解壓tar.gz文件並像下面所示安裝
tar xvfz sqlite-autoconf-3070603.tar.gz
cd sqlite-autoconf-3070603
./configure
make
make install
make安裝命令後會有以下的輸出。
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3
test -z "/usr/local/include" || mkdir -p -- "/usr/local/include"
/usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/include/sqlite3.h'
/usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/include/sqlite3ext.h'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/share/man/man1/sqlite3.1'
test -z "/usr/local/lib/pkgconfig" || mkdir -p -- "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/lib/pkgconfig/sqlite3.pc'
提示:如果你對mysql資料庫有興趣,你也可以安裝在你的系統中。