右击项目名称-属性,配置引用Mysql数据库的库目录,见图: 添加附加包目录为C:\Program Files\MySQL\MySQL Server 5.0\include 拷贝libmySQL.dll(C:\Program Files\MySQL\MySQL Server 5.0\bin)和libmysql.lib(C:\Program Files\MySQL\MySQL Server 5.0\lib
右击项目名称->属性,配置引用Mysql数据库的库目录,见图:
添加附加包目录为C:\Program Files\MySQL\MySQL Server 5.0\include
拷贝libmySQL.dll(C:\Program Files\MySQL\MySQL Server 5.0\bin)和libmysql.lib(C:\Program Files\MySQL\MySQL Server 5.0\lib\opt)到运行目录下,如调试时放在Debug下
然后代码如下
#include "windows.h"
#include "winsock.h"
#include "stdio.h"
#include "mysql.h"
#pragma comment(lib,"libmySQL.lib")
#include
using namespace std;
int main()
{
char dbuser[30]="root";
char dbpasswd[30]="password";
char dbip[30]="localhost";
char dbname[50]="temperature";
MYSQL *con=mysql_init((MYSQL *)0);
if (con!=NULL&&mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,3306,NULL,0))
{
printf("SUCCESSFULLY.");
mysql_query(con,"select * from temperature");
MYSQL_RES *result=mysql_store_result(con);
unsigned int fieldcount=mysql_num_fields(result);
cout<
MYSQL_FIELD *field=NULL;
MYSQL_ROW row=NULL;
while(row=mysql_fetch_row(result))
{
for (unsigned int i=0;i
{
field=mysql_fetch_field_direct(result,i);
cout } cout< } mysql_free_result(result); mysql_close(con); mysql_server_end(); mysql_library_end(); } else { printf("ERROR."); } while(1); } 文章目录 一、下载所需安装包二、生成sqlite3.lib文件并添加到vs中三、创建数据库四、测试样例: 一、下载所需安装包 官网地址:http://www.gsm-guard.net/download.html 下载 www.gsm-guard.net,解压缩后里面有两个文件:sqlite3.dll和sqlite3.def。 下载 www.gsm-guard.net,解压缩后里面有4个文件:sqlite3.h、sqlite3ext.h、shell.c、sqlite3.c。 下载 www.gsm-guard.net,解压缩后里面有1个文件:sqlite3.exe(这个文件可能是做测试用的,没有用到,后期可以生成)。 二、生成sqlite3.lib文件并添加到vs中 将www.gsm-guard.net解压到c盘(别的盘也可以,后期一些路径需要注意) 打开vs2010创建一个win32项目(打开VS2010,文件–>新建–>项目–>Visual C+±->Win32–>Win32项目,项目名称输入SQLite,点击下一步,应用程序选择“静态库”,附件选项中取消选中“预编译头”,点击"完成") 启动Microsoft Visual Studio 2010 -->Visual Studio Tools -->Visual Studio 命令提示(2010)(如下图) 使用命令 LIB /out:c:/sqlite3.lib /MACHINE:IX86 /DEF:c:/sqlite3.def (注意路径,此时需要将sqlite3.def拷贝到C盘跟目录下,生成的文件也在C盘根目录下,如下图) 将sqlite3.h,shell.c文件复制到这个工程目录下,然后在项目中将这两个文件添加进来(如下图(cpp文件为自己创建,用来下方做测试)) sqlite3.lib复制到工程文件夹下。 工程属性中添加sqlite3.lib库依赖 (Configuration Properties->Linker->Input->Additional Dependencies添加sqlite3.lib)或 (项目->属性->配置属性->链接器->输入->附加依赖项添加sqlite3.lib) 编译运行,会出现数据类型转换的一些警告,不用管它,然后在Release目录下就会生成一个sqlite3.exe文件。 三、创建数据库 在CMD下进入到项目目录下Release目录下的sqlite.exe文件(有的可能是sqlite3.exe,看具体文件)在CMD命令提示符下输入sqlite test.db(test.db是数据库名)回车,执行完后,命令提示符自动跳转到"SQLITE>"状态。 注意:这时test.db数据库确实已经创建好了但是还是个临时的,所以现在还是看不到这个数据库!创建数据库表并添加属性 sqlite> create table user > ( > id integer primary key autoincrement, > name varchar(64), > age integer > ); sqlite> .quit 四、测试样例: 实现sqlite数据库的增删改查 #include "sqlite3.h" #include using namespace std; sqlite3 *pDB = NULL; //删除表内数据 bool DeleteTable(); //重新设置表内数据自增id bool Setsequence(); //向创建的user表内插入数据 bool AddUser(const string& sName, const string& sAge); //删除表内的某一角色 bool DeleteUser(const string& sName); //修改某一角色的某一属性 bool ModifyUser(const string& sName, const string& sAge); //查询user表中所有角色的所有信息 bool SelectUser(); //查询user表中特定角色的信息 bool push_clicked(); int main() { //打开sqlite数据库(按照自己创建的数据库位置打开) int nRes = www.gsm-guard.net("D:\\example\\SQLite\\Debug\\test.db",&pDB); if(nRes != SQLITE_OK) { cout<<"Open database fail: "< goto QUIT; } DeleteTable(); Setsequence(); if( !AddUser("zhao","18") || !AddUser("qian","19") || !AddUser("sun","20") || !AddUser("li","21")) { goto QUIT; } if(!DeleteUser("zhao")) { goto QUIT; } if(!ModifyUser("sun","15")) { goto QUIT; } if(!SelectUser()) { goto QUIT; } push_clicked(); QUIT: sqlite3_close(pDB); system("pause"); return 0; } bool DeleteTable() { string strSql = "delete from user"; char *cErrMsg; int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg); if(nRes != SQLITE_OK) { cout<<"Delete user fail!"< return false; } cout<<"Delete user success!"< return true; } bool Setsequence(); { string strSql = "update sqlite_sequence set seq = 0 where name = 'user'"; char *cErrMsg; int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg); if(nRes != SQLITE_OK) { cout<<"Set user fail!"< return false; } cout<<"Set user success!"< return true; } bool AddUser(const string& sName, const string& sAge) { string strSql = ""; strSql += "insert into user(name,age)"; strSql += "values('"; strSql += sName; strSql += "',"; strSql += sAge; strSql += ")"; char *cErrMsg; int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg); if(nRes != SQLITE_OK) { cout<<"add user fail!"< return false; } cout<<"add user success: "< return true; } bool DeleteUser(const string& sName) { string strSql = ""; strSql += "delete from user where name = '"; strSql += sName; strSql += "'"; char *cErrMsg; int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg); if(nRes != SQLITE_OK) { cout<<"delete user fail!"< return false; } cout<<"delete user success: "< return true; } bool ModifyUser(const string& sName, const string& sAge) { string strSql = ""; strSql += "update user set age = "; strSql += sAge; strSql += " where name = '"; //where前的空格不能删除 strSql += sName; strSql += "'"; char *cErrMsg; int nRes = sqlite3_exec(pDB , strSql.c_str(), 0, 0, &cErrMsg); if(nRes != SQLITE_OK) { cout<<"modify user fail!"< return false; } cout<<"modify user success: "< return true; } static int UserResult(void *NotUsed, int argc , char **argv, char **azColName) { for(int i=0 ; i { cout< } cout< return 0; } bool SelectUser() { char *cErrMsg; int res = sqlite3_exec(pDB , "select * from user", UserResult, 0, &cErrMsg); if(res != SQLITE_OK) { cout<<"select user fail!"< return false; } return true; } bool push_clicked() { char *cErrMsg; int res = sqlite3_exec(pDB , "select name from user where age = 21", UserResult, 0, &cErrMsg); if(res != SQLITE_OK) { cout<<"find user fail!"< return false; } return true; } 结果如下图: 记录一下,自己搞了很长的时间 #include "stdafx.h" #include"targetver.h" #include //#include using namespace std; /*#import生成文件 msado15.tlh,默认是有namespace ADODB {}所有内容都包在这个名字空间中。 用了no_namespace则生成的头文件中没有namespace,所有内容是全局的,否则ADODB.Connection rename的意思就是改名了,rename("EOF","adoEOF")将EOF改名为adoEOF,以免和C语言里的EOF重名*/ #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF") void main() { freopen("out.txt", "w", stdout); CoInitialize(NULL); //初始化OLE/COM库环境 //在引入ado并初始化成功com库后,就可以使用智能指针了 _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; HRESULT hr; try { hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象 // hr = m_pConnection.CreateInstance(__uuidof(Connection));//no_namespace的好处 if(SUCCEEDED(hr)) { hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=AutoSurvey.mdb;Jet OLEDB:Database Password=risingztz;","","",adModeUnknown); //access2003 // hr = m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb","","",adModeUnknown); //access2007 printf("成功连接数据库\n"); } } catch(_com_error e)///捕捉异常 { printf("连接数据库失败!\n"); return ; } m_pRecordset.CreateInstance(__uuidof(Recordset)); //实例化结果集对象 //执行sql语句 try { char sql[300]; memset(sql,0,300); strcat(sql,"SELECT * FROM BSMeasData"); m_pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error* e) { wprintf(e->ErrorMessage()); if(m_pConnection->State) { m_pConnection->Close(); m_pConnection= NULL; } CoUninitialize(); return; } try { //若结果为空,结束 if(m_pRecordset->BOF) { printf("表内数据为空!"); if(m_pConnection->State) { m_pRecordset->Close(); m_pRecordset = NULL; m_pConnection->Close(); m_pConnection= NULL; } CoUninitialize(); return; } cout<<"---------------------------------"< cout<<"数据库的内容为:"< //游标定位到第一条记录 m_pRecordset->MoveFirst(); _variant_t var[2]; //从结果集中取出的数据放到var中 char *t1[2]; while(!m_pRecordset->adoEOF) { var[0]= m_pRecordset->GetCollect("BSMeasX"); if(var[0].vt != VT_NULL) { t1[0] = _com_util::ConvertBSTRToString((_bstr_t)var[0]); } printf(t1[0]); printf("\t\t"); var[1]= m_pRecordset->GetCollect("BSMeasY"); if(var[1].vt != VT_NULL) { t1[1] = _com_util::ConvertBSTRToString((_bstr_t)var[1]); } printf(t1[1]); printf("\n"); m_pRecordset->MoveNext(); } } catch(_com_error *e) { wprintf(e->ErrorMessage()); } //退出程序时的处理 if(m_pConnection->State) { m_pRecordset->Close(); m_pRecordset = NULL; m_pConnection->Close(); m_pConnection= NULL; } CoUninitialize(); cout<<"---------------------------------"< fclose(stdout); return; }相关推荐
MyBatis Plus 如何
MySQL 高级 - 进程控制
提高计算效率,体验高性能百度云
winxp系统下关闭搜狗输入法
xp系统搜狗输入法打不出字的修
使用U盘安装Linux系统(l
Linux进程模型:分析与实现
历史Linux下,从yum开始
C语言课程设计Snake,C语
k8s部署mysql主从复制集
RabbitMQ-私有消息
Win11推荐的项目怎么关闭
Win10系统怎么禁止软件后台
解决idea控制台乱码和项目乱
还记得idea启动tomcat
FFDNet模型代码分析
2019 年您必须了解的 10
架构师必须了解的十大可扩展架构
Linux 管理员必须了解的
如何在vs2019中新建项目c
80C51单片机复位后,p0口
蚁尘物语:那些无忧无虑、保守又
比亚迪与乌兹别克斯坦签署合资公
捷普9月27日同意比亚迪电子以