老房原创修改版
-------------------------------------------------------------------------分隔-------------------------------------------------------------------------------------------------------
sqlite是一款轻型的数据库,它的设计目标是嵌入式的,目前已经在很多嵌入式产品中使用了它,占用资源非常的低,在嵌入式设备中可能只需要几百K的内存就够了;@H_404_5@ 以下采用arm-linux-gcc4.2.2 eabi,经老房测试,在飞凌6410开发板上运行通过:@H_404_5@ 1、下载sqlite3源代码、解压@H_404_5@ http://www.sqlite.org/sqlite-src-3070900.zip@H_404_5@ 下载sqlite-src-3070900.zip解压@H_404_5@ 2、配置交叉编译到arm平台:@H_404_5@ ./configure --prefix=/usr/local/sqlite --host=arm-linux CC=arm-linux-gcc@H_404_5@ 3、编译:@H_404_5@ make @H_404_5@ 4、安装:@H_404_5@ make install 头文件和生成的库文件将安装到PC的/usr/local/sqlite目录;@H_404_5@ 将sqlite目录拷贝到开发板文件系统的/usr/local;@H_404_5@ 将/usr/local/sqlite/lib添加到LD_LIBRARY_PATH(在开发板文件系统/etc/profile中修改);@H_404_5@ 将/usr/local/sqlite/bin添加到PATH(在开发板文件系统/etc/profile中修改);@H_404_5@ 5、写自己的数据库程序,保存为radiodb.c(这个程序我不是原创)
#include <stdio.h>@H_404_5@ #include <sqlite3.h>
static int callback(void *NotUsed,int argc,char **argv,char **azColName){@H_404_5@ int i;@H_404_5@ for(i=0; i<argc; i++){@H_404_5@ printf("%s = %s\n",azColName[i],argv[i] ? argv[i] : "NULL");@H_404_5@ }@H_404_5@ printf("\n");@H_404_5@ return 0;@H_404_5@ }
int main(int argc,char **argv){@H_404_5@ sqlite3 *db;@H_404_5@ char *zErrMsg = 0;@H_404_5@ int rc;
if( argc!=2 ){@H_404_5@ fprintf(stderr,"Usage: %s DATABASE \n",argv[0]);@H_404_5@ return 0;@H_404_5@ }@H_404_5@ rc = sqlite3_open(argv[1],&db);@H_404_5@ if( rc ){@H_404_5@ fprintf(stderr,"Can't open database: %s\n",sqlite3_errmsg(db));@H_404_5@ sqlite3_close(db);@H_404_5@ return 0;@H_404_5@ }
char *sql = " CREATE TABLE SensorData( \@H_404_5@ ID INTEGER PRIMARY KEY,\@H_404_5@ SensorID INTEGER,\@H_404_5@ SiteNum INTEGER,\@H_404_5@ Time VARCHAR(12),\@H_404_5@ SensorParameter REAL \@H_404_5@ );";@H_404_5@ //使用sql字符串指定的sql语言 创建数据表SensorData@H_404_5@ sqlite3_exec( db,sql,callback,&zErrMsg );
//插入数据到数据表
sql = "INSERT INTO 'SensorData' VALUES( 0,1,'200605011206',18.9 );" ;
sqlite3_exec( db,&zErrMsg );
//插入数据到数据表@H_404_5@ sql = "INSERT INTO 'SensorData' VALUES(1,'200605011306',16.4 );" ;@H_404_5@ sqlite3_exec( db,&zErrMsg );@H_404_5@ @H_404_5@ int nrow = 0,ncolumn = 0;@H_404_5@ char **azResult;@H_404_5@ int i;
//从数据表查询数据@H_404_5@ sql = "SELECT * FROM SensorData ";@H_404_5@ sqlite3_get_table( db,&azResult,&nrow,&ncolumn,&zErrMsg );
printf( "row:%d column=%d",nrow,ncolumn );@H_404_5@ printf( "The result of querying is :" );@H_404_5@ for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ){@H_404_5@ printf( "azResult[%d] = %s \r\n",i,azResult[i] );@H_404_5@ }
sqlite3_free_table( azResult );
if( rc!=sqlITE_OK ){@H_404_5@ fprintf(stderr,"sql error: %s\n",zErrMsg);@H_404_5@ sqlite3_free(zErrMsg);@H_404_5@ }@H_404_5@ sqlite3_close(db);
return 0;@H_404_5@ }
6、编写Makefile@H_404_5@ prefix=/usr/local/sqlite@H_404_5@ exec_prefix=${prefix}@H_404_5@ libdir=${exec_prefix}/lib@H_404_5@ includedir=${prefix}/include@H_404_5@ Libs = -L${libdir} -lsqlite3 -lpthread@H_404_5@ Cflags = -I${includedir}@H_404_5@ @H_404_5@ CROSS_COMPILE = arm-linux-@H_404_5@ CC = $(CROSS_COMPILE)gcc@H_404_5@ LD = $(CROSS_COMPILE)ld@H_404_5@ @H_404_5@ radiodb: radiodb.o@H_404_5@ $(CC) $^ $(Libs) -o $@@H_404_5@ radiodb.o: radiodb.c@H_404_5@ $(CC) $(Cflags) -c $^ -o $@@H_404_5@ clean:@H_404_5@ rm -rf radiodb *.o@H_404_5@ 7、编译,得到radiodb,拷贝到开发板文件系统/usr/local,NFS挂载根文件系统后,超级终端执行:@H_404_5@ cd /usr/local@H_404_5@ ./radiodb testdb