基于FS2410的SQLite移植(2)

(1)以下#开头的是在开发板终端命令
# cd /home
# ls
adc         fadc        shyi        sqlite-arm
# cd sqlite-arm/
# ls
bin      include  lib
# cd bin/
# ls
sqlite3
# ./sqlite3
SQLite version 3.6.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
这时表示成功,不过此时再也不能做其它事了,只有重启开发板。
(2)下面,编写两个连接sqlite数据库的C程序,在fs2410上运行:
测试程序一:
/rootfs/filesystem/home# vim test1.c (主机上编写哦)

#include <stdio.h>
#include "sqlite3.h"

int main(void)
{
 sqlite3 *db = NULL;
 int rc;

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

if(rc) {
  fprintf(stderr,"Can't open database: %

s\n",sqlite3_errmsg(db));
  sqlite3_close(db);
  exit(1);
 }
 else {
  printf("Open test.db successfully!\n");
 }

sqlite3_close(db);

return 0;
}

 


交叉编译:

/rootfs/filesystem/home# arm-linux-gnu-gcc -I./sqlite-arm/include/ -L./sqlite-arm/lib/ test.c -o test -lsqlite3
-I指定要包含的头文件路径,-L指定动态库的路径,-lsqlite3动态库的名字。在终端进入根文件系统的/home目录中执行:
# ./test
Open test.db successfully!

这时会出现一个test.db文件。
    我们再写个包含连接数据库,创建表,插入数据等SQL语句的C语言程序。
测试程序二:
/rootfs/filesystem/home# vim test2.c (这是官方测试程序,主机上编写哦)

#include <stdio.h>
#include "sqlite3.h"
 
static int  callback(void *NotUsed, int argc, char **argv, char

**azColName)
{
 int i;
 for (i = 0; i < argc; i++) {
    printf("%s = %s\n", azColName, argv[i] ? argv[i] :

"NULL");
 }
 printf("\n"); 
 return 0;
}

int main(int argc, char **argv)
{
 sqlite3        *db;
 char           *zErrMsg = 0;
 int             rc;

if (argc != 3) {
    fprintf(stderr, "Usage: %s database_name SQL-

statement\n", arg
v[0]);
   exit(1);
 }
 rc = sqlite3_open(argv[1], &db);  
 if (rc) {
    fprintf(stderr, "Can't open database: %s\n",

sqlite3_errmsg(d
b));
    sqlite3_close(db);
    exit(1);
 }
 rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
 if (rc != SQLITE_OK) {
   fprintf(stderr, "SQL error: %s\n", zErrMsg);
   sqlite3_free(zErrMsg);
 }
 sqlite3_close(db);
 
 return 0;
}

 

交叉编译:
/rootfs/filesystem/home# arm-linux-gnu-gcc -I./sqlite-arm/include/ -L./sqlite-arm/lib/ test2.c -o test2 -lsqlite3

接下来就可以测试test程序了。test程序接受两个参数:第一个参数为数据库文件名,第二个参数为要执行的SQL语句。程序中与SQLite3的API相关的地方主要有四个:第27行的sqlite3_open(),第33行的sqlite3_exec(),第30行和第38行的sqlite3_close(),第36行的sqlite3_free()。关于SQLite3的API接口请参考上几篇文章。
下面是测试test程序的完整过程
# ./test2 test.db "create table tb(name varchar(10),number smallint);"
# ./test2 test.db "insert into tb values('caoyi',1);"
# ./test2 test.db "insert into tb values('huayun',2);"
# ./test2 test.db "select * from tb;"
@ = caoyi
@ = 1

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzxws.html