首页 - 技术 - vs2010查数据库_使用C++(VS2010控制台应用程序)连接access数据库并且把查询结果写入文本...

vs2010查数据库_使用C++(VS2010控制台应用程序)连接access数据库并且把查询结果写入文本...

2023-09-19 08:00

右击项目名称-属性,配置引用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;

}