前期工作:通过CVS客户端连接上sourceforge服务器下载sqlite-wince项目源码,可以看我的一篇博客内容。
Sqlite3源码编译为DLL和LIB步骤:
1.源码下载后会有两个sqlite文件夹,选择sqlite3文件夹里面的源码作为编译DLL用的源码提供包。
2.新建VS项目,应用程序类型选择:Win32——Win32项目——勾选Dll, 同时钩上“Empty project”;不要选择MFC支持。
3.向刚刚添加的空项目中添加上sqlite源码目录里sqlite3文件夹中的所有文件(添加源码文件到工程目录下面,即.vcproj文件所在目录)。注意:需要将tclsqlite.c和shell.c去掉。其中tclsqlite.c用于生成基于tcl的api,如果要编译,这需要另外下 载tcl.h;shell.c用于生成命令行模式的sqlite.exe,如果是静态库形式则可以选择。
4.源码下载后默认是mac平台的,所以编译时会给出提示;这时对头文件和源码文件中的选择任意一个文件单击,提示框选择microsoft平台模式就行。同时对那个def文件也要如此操作;这样就把所有源码变成了microsoft平台下的了。
5.---在VS编辑界面中选中项目(而不是文件),项目->属性->C/C++->预编译头-> 创建/使用预编译头: 选择不使用预编译头。同时‘忽略特定库’中加上LIBC.lib。
---选中项目(而不是文件),项目->属性->链接器->输入-> 模块定义文件: 输入“sqlite3.def”。
---编译即可生成DLL和LIB文件。(编译方法:VS编辑界面中的“生成”)
至此,就完成了DLL和LIB的编译工作。下面是利用编译的DLL和LIB进行WINCE下的MFC嵌入式数据库编程。
--------------------------------------------------------------
利用编译的DLL和LIB进行WINCE下的MFC嵌入式数据库编程步骤:
1.创建VC++2005|智能设备|MFC智能设备应用程序|基于对话框的程序, 把编译SQLITE生成的DLL、LIB和sqlite3.h 放到项目的文件夹下,并添加到工程中。
2.并把项目=》属性=》配置属性=》链接器=》输入=》附加依赖项:输入SQLITE的lib文件名;例如这样输入.\sqlite3.lib。
3.并把项目=》属性=》配置属性=》部署=》附加文件;使DLL文件在程序运行时自动步骤到WINCE下的程序运行目录中:格式例如我的是:
sqlite3.dll|$(ProjectDir)|%CSIDL_PROGRAM_FILES%\sqlite3test|0
至此配置完成;下面就是写测试代码了。
在对话框上加上一个按钮控件,双击加上测试代码:
bool result;
MySQLite *sqlite=new MySQLite();
result=sqlite->sqlite_connect("hellogv.db");
if(!result)
{
AfxMessageBox(_T("失败"));
}
else
{
AfxMessageBox(_T("成功"));
}
这里引用了一个别人封装好的一个类库MySQLite,可以在http://dev.10086.cn/cmdn/wiki/index.php?edition-view-3682-1.html找到。把.h和.cpp加入项目中就能测试了;
详细测试代码:
void Csqlite3TestDlg::InitDataList()
{
DWORD dstyle = m_DataList.GetExtendedStyle();
m_DataList.SetExtendedStyle(dstyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_DataList.InsertColumn(0, _T("编号"), LVCFMT_CENTER, 100);
m_DataList.InsertColumn(1, _T("试验编号"), LVCFMT_CENTER, 100);
m_DataList.InsertColumn(2, _T("试验名称") , LVCFMT_CENTER, 100);
m_DataList.InsertColumn(3, _T("试验日期") , LVCFMT_CENTER, 100);
m_DataList.InsertColumn(4, _T("操作人员") , LVCFMT_CENTER, 100);
}
//连接数据库
void Csqlite3TestDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
bool result;
MySQLite *sqlite=new MySQLite();
result=sqlite->sqlite_connect("hellogv.db");
if(!result)
{
AfxMessageBox(_T("失败"));
}
else
{
AfxMessageBox(_T("成功"));
}
sqlite->sqlite_disconnect();
delete sqlite;
}
//创建表
void Csqlite3TestDlg::OnBnClickedButton2()
{
bool result;
MySQLite *sqlite=new MySQLite();
result=sqlite->sqlite_connect("hellogv.db");
result=sqlite->sqlite_exec("CREATE TABLE TestLog(ID INTEGER PRIMARY KEY,TestName VARCHAR(500),TestTime VARCHAR(500),Operator VARCHAR(100));");
if(!result)
{
AfxMessageBox(_T("失败"));
}
else
{
AfxMessageBox(_T("成功"));
}
sqlite->sqlite_disconnect();
delete sqlite;
}
//插入数据
void Csqlite3TestDlg::OnBnClickedButton3()
{
bool result;
MySQLite *sqlite=new MySQLite();
result=sqlite->sqlite_connect("hellogv.db");
result=sqlite->sqlite_exec("INSERT INTO \"TestLog\" VALUES(NULL,'摩擦试验','201205090912','peer');");
if(!result)
{
AfxMessageBox(_T("失败"));
}
else
{
AfxMessageBox(_T("成功"));
}
sqlite->sqlite_disconnect();
delete sqlite;
}
//查询数据
void Csqlite3TestDlg::OnBnClickedButton4()
{
bool result;
m_DataList.DeleteAllItems();
MySQLite *sqlite=new MySQLite();
result=sqlite->sqlite_connect("hellogv.db");
sqlite->sqlite_search("SELECT * FROM TestLog order by ID desc LIMIT 3;");
int row=0,column=0;
CString strText;
for (row=0;row<=sqlite->GetTableRow()-1;row++)
{
strText.Format(_T("%d"),row+1);
m_DataList.InsertItem(row, strText);
m_DataList.SetItemData(row, row+1);
for (column=0;column<=sqlite->GetTableColumn()-1;column++)
{ //行数多了一行“列名”,所以需要去除(行从第一行开始)
strText=sqlite->GetTableData(column,row+1);
m_DataList.SetItemText(row, column+1,strText);
}
}
sqlite->sqlite_disconnect();
delete sqlite;
//控件变量给控件显示
UpdateData(FALSE);
}
//删除数据
void Csqlite3TestDlg::OnBnClickedButton5()
{
bool result;
m_DataList.DeleteAllItems();
MySQLite *sqlite=new MySQLite();
result=sqlite->sqlite_connect("hellogv.db");
sqlite->sqlite_search("DELETE FROM TestLog;");
sqlite->sqlite_disconnect();
delete sqlite;
//控件变量给控件显示
UpdateData(FALSE);
}
参照博客:
http://hi.baidu.com/%D2%C6%B6%AFpos%D3%A6%D3%C3/blog/item/83da4266695f5404b051b9b3.html