Sqlite3.78移植到VxWorks6.6
前端之家收集整理的这篇文章主要介绍了
Sqlite3.78移植到VxWorks6.6,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
1、准备工作
首先从网上下载一个sqlite Developer 3.8.5管理工具,SharpPlus sqlite Developer,强大的sqlite3数据库管理程序,具有如下功能:
☆、强大的sql编辑器
☆、sqlite sql语法高亮
☆、sql编辑历史
☆、sql关键字自动完成
☆、括号高亮匹配
☆、表,字段名自动完成
☆、自动sql语法错误提示
☆、支持Unicode
☆、sql代码格式化器
☆、支持ANSI,UTF8和UTF16数据编辑.
☆、可定制的数据类型映射.
☆、可执行分号分割的多条sql语句.
☆、sql执行监视器.
☆、可视化查询设计器.
☆、可视化表,视图,触发器和索引编辑.
☆、可按文本,16进制,HTML或者位图形式编辑数据.
☆、支持查看和编辑临时表,视图和触发器.
☆、支持查询计划.
☆、自动更新.
☆、可以将数据导出为sql,csv,excel,word,html,xml.
☆、可以导入csv文件.
☆、可以导出数据库的元数据.
☆、支持数据库元数据查找
☆、可以中断长时间查询
☆、支持sqlite可加载扩展及虚拟表
☆、多语言支持(英语,简体中文,日语)
其次从sqlite官方网上http://www.sqlite.org/download.html下载一个sqlite3.85开源代码,怎么下载应该比较简单了!
打开sqlite Developer程序,上面的Sample.db将是我们测试的数据源,我们将利用该数据库的部门表见下图“DEPARTMENT”进行验证是否正确,安装之后把Sample.db文件拷贝至$(FEPHOME)/db/目录下,在$(FEPHOME)/code/目录新建文件夹sqlite378,把下载的sqlite3.78包中的sqlite3.h和sqlite3ext.h拷贝此处。
2、测试代码
-
-
-
- #include"stdafx.h"
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include"sqlite378/sqlite3.h"//$(FEPHOME)/code/inlcude/sqlite378
- intmain(intargc,char*argv[])
- {
- sqlite3*db=NULL;
- char*zErrMsg=0;
- intrc;
- char*szWorkPath="/e/openSUSE3000/fep/db/Sample.db3";
- rc=sqlite3_open(szWorkPath,&db);
- if(rc)
- {
- fprintf(stderr,"Can'topendatabase:%s\n",sqlite3_errmsg(db));
- sqlite3_close(db);
- return(1);
- }
- else
- printf("Youhaveopenedasqlite3databasenamedSample.db3successfully!\n");
-
- }
- intnrow=0,ncolumn=0;
- char**azResult;
- //查询数据
- char*sql="SELECT*FROMDEPARTMENT";
- sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg);
- inti=0;
- printf("row:%dcolumn=%d\n",nrow,ncolumn);
- printf("\nTheresultofqueryingis:\n");
- for(i=0;i<(nrow+1)*ncolumn;i++)
- printf("azResult[%d]=%s\n",i,azResult[i]);
- //释放掉azResult的内存空间
- sqlite3_free_table(azResult);
- #ifdef_DEBUG_
- printf("zErrMsg=%s\n",zErrMsg);
- #endif
- sqlite3_close(db);
- return0;
- }
3、生成库代码libsqlite378
在生成库时需要一些配置,具体内容如下:
DEFINES:-DOS_VXWORKS=1 -D_HAVE_sqlITE_CONFIG_H -DsqlITE_THREADSAFE=0
OS_VXWORKS:说明使用操作系统VxWorks.
_HAVE_sqlITE_CONFIG_H:将使用配置文件“config.h”
#ifndef_CONFIG_H_
- #define_CONFIG_H_
- #definesqlITE_OMIT_LOAD_EXTENSION1//不需要动态库支持
- #defineHAVE_UTIME//使用utime函数而不是utimes函数
- #include<semaphore.h>
- /*
- *不使用VxWorks提供的POSIX标准中的互斥信号量递归接口,因为对于内核程序,POSIX支持*的不是太好
- */
- #definesqlITE_HOMEGROWN_RECURSIVE_MUTEX1
- #include<vxWorks.h>
- #endif//_CONFIG_H_
sqlITE_THREADSAFE=@H_404_484@<0 or 1 or 2>
This option controls whether or not code is included in sqlite to enable it to operate safely in a multithreaded environment. The default is sqlITE_THREADSAFE=1 which is safe for use in a multithreaded environment. When compiled with sqlITE_THREADSAFE=0 all mutexing code is omitted and it is unsafe to use sqlite in a multithreaded program. When compiled with sqlITE_THREADSAFE=2,sqlite can be used in a multithreaded program so long as no two threads attempt to use the samedatabase connectionat the same time.
To put it another way,sqlITE_THREADSAFE=1 sets the defaultthreading modeto Serialized. sqlITE_THREADSAFE=2 sets the defaultthreading modeto Multi-threaded. And sqlITE_THREADSAFE=0 sets thethreading modeto Single-threaded.
The value of sqlITE_THREADSAFE can be determined at run-time using thesqlite3_threadsafe()interface.
When sqlite has been compiled with sqlITE_THREADSAFE=1 or sqlITE_THREADSAFE=2 then thethreading modecan be altered at run-time using thesqlite3_config()interface together with one of these verbs:
TheSQLITE_OPEN_NOMUTEXandSQLITE_OPEN_FULLMUTEXflags tosqlite3_open_v2()can also be used to adjust thethreading modeof individualdatabase connectionsat run-time.
Note that when sqlite is compiled with sqlITE_THREADSAFE=0,the code to make sqlite threadsafe is omitted from the build. When this occurs,it is impossible to change thethreading modeat start-time or run-time.
See thethreading modedocumentation for additional information on aspects of using sqlite in a multithreaded environment.
3、调试代码testsqlite378
testsqlite378生成比较简单,具体可以看前面关于嵌入系统调试的内容了。
4、Console输出的内容:
You have opened a sqlite3 database named Sample.db3 successfully!
row:21 column=7
The result of querying is :
azResult[0] = DEPT_NO
azResult[1] = DEPARTMENT
azResult[2] = HEAD_DEPT
azResult[3] = MNGR_NO
azResult[4] = BUDGET
azResult[5] = LOCATION
azResult[6] = PHONE_NO
azResult[7] = 000
azResult[8] = Corporate Headquarters
azResult[9] =
azResult[10] = 105
azResult[11] = 1000000
azResult[12] = Monterey
azResult[13] = (408) 555-1234
azResult[14] = 100
azResult[15] = Sales and Marketing
azResult[16] = 000
azResult[17] = 85
azResult[18] = 2000000
azResult[19] = San Francisco
azResult[20] = (415) 555-1234
azResult[21] = 600
azResult[22] = Engineering
azResult[23] = 000
azResult[24] = 2
azResult[25] = 1100000
azResult[26] = Monterey
azResult[27] = (408) 555-1234
azResult[28] = 900
azResult[29] = Finance
azResult[30] = 000
azResult[31] = 46
azResult[32] = 400000
azResult[33] = Monterey
azResult[34] = (408) 555-1234
azResult[35] = 180
azResult[36] = Marketing
azResult[37] = 100
azResult[38] =
azResult[39] = 1500000
azResult[40] = San Francisco
azResult[41] = (415) 555-1234
azResult[42] = 620
azResult[43] = Software Products Div.
azResult[44] = 600
azResult[45] =
azResult[46] = 1200000
azResult[47] = Monterey
azResult[48] = (408) 555-1234
azResult[49] = 621
azResult[50] = Software Development
azResult[51] = 620
azResult[52] =
azResult[53] = 400000
azResult[54] = Monterey
azResult[55] = (408) 555-1234
azResult[56] = 622
azResult[57] = Quality Assurance
azResult[58] = 620
azResult[59] = 9
azResult[60] = 300000
azResult[61] = Monterey
azResult[62] = (408) 555-1234
azResult[63] = 623
azResult[64] = Customer Support
azResult[65] = 620
azResult[66] = 15
azResult[67] = 650000
azResult[68] = Monterey
azResult[69] = (408) 555-1234
azResult[70] = 670
azResult[71] = Consumer Electronics Div.
azResult[72] = 600
azResult[73] = 107
azResult[74] = 1150000
azResult[75] = Burlington VT
azResult[76] = (802) 555-1234
azResult[77] = 671
azResult[78] = Research and Development
azResult[79] = 670
azResult[80] = 20
azResult[81] = 460000
azResult[82] = Burlington VT
azResult[83] = (802) 555-1234
azResult[84] = 672
azResult[85] = Customer Services
azResult[86] = 670
azResult[87] = 94
azResult[88] = 850000
azResult[89] = Burlington VT
azResult[90] = (802) 555-1234
azResult[91] = 130
azResult[92] = Field Office: East Coast
azResult[93] = 100
azResult[94] = 11
azResult[95] = 500000
azResult[96] = Boston
azResult[97] = (617) 555-1234
azResult[98] = 140
azResult[99] = Field Office: Canada
azResult[100] = 100
azResult[101] = 72
azResult[102] = 500000
azResult[103] = Toronto
azResult[104] = (416) 677-1000
azResult[105] = 110
azResult[106] = Pacific Rim Headquarters
azResult[107] = 100
azResult[108] = 34
azResult[109] = 600000
azResult[110] = Kuaui
azResult[111] = (808) 555-1234
azResult[112] = 115
azResult[113] = Field Office: Japan
azResult[114] = 110
azResult[115] = 118
azResult[116] = 500000
azResult[117] = Tokyo
azResult[118] = 3 5350 0901
azResult[119] = 116
azResult[120] = Field Office: Singapore
azResult[121] = 110
azResult[122] =
azResult[123] = 300000
azResult[124] = Singapore
azResult[125] = 3 55 1234
azResult[126] = 120
azResult[127] = European Headquarters
azResult[128] = 100
azResult[129] = 36
azResult[130] = 700000
azResult[131] = London
azResult[132] = 71 235-4400
azResult[133] = 121
azResult[134] = Field Office: Switzerland
azResult[135] = 120
azResult[136] = 141
azResult[137] = 500000
azResult[138] = Zurich
azResult[139] = 1 211 7767
azResult[140] = 123
azResult[141] = Field Office: France
azResult[142] = 120
azResult[143] = 134
azResult[144] = 400000
azResult[145] = Cannes
azResult[146] = 58 68 11 12
azResult[147] = 125
azResult[148] = Field Office: Italy
azResult[149] = 120
azResult[150] = 121
azResult[151] = 400000
azResult[152] = Milan
azResult[153] = 2 430 39 39
从控制输出的内容,我们可以看出的结果与表格显示一致,那说明我们的移植成功了
原文链接:https://www.f2er.com/sqlite/202003.html