Sqlite源码编译为DLL步骤及利用MFC在WINCE5.0下操作sqlite数据库步骤

前期工作:通过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

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值