C++操作mysql方法总结(2)
C++通过ODBC和通过MFC ODBC操作mysql的两种方式
使用vs2013和64位的msql 5.6.16进行操作
项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍
既然使用到了ODBC那么就要需要添加数据源了
控制面板->管理工具->数据源->用户DSN->添加
填写相关的数据库连接配置和使用的数据库,可点击Test进行测试,查看是否成功连接,设置完成后点击OK
其中Data Source Name即MySqlODBC我们会在连接数据库时用到
至此,数据源添加完毕
一、通过ODBC进行操作
开放数据库互连(Open Database Connectivity,ODBC)是微软提供的一组用于数据库访问的规范接口,多数数据库都提供了ODBC驱动
1、新建一个空项目
2、如果使用的mysql是64位的,需要将项目的解决方案平台由win32改成x64
至此,相关配置全部完成
程序代码
main.cpp
- #include <Windows.h>
- #include <iostream>
- #include <iomanip>
- #include <sql.h>
- #include <odbcss.h>
- #include <sqlext.h>
- #define MAXBUFLEN 255
- #define MaxNameLen 20
- #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
- SQLHENV henv = SQL_NULL_HENV;//定义环境句柄
- SQLHDBC hdbc1 = SQL_NULL_HDBC;//定义数据库连接句柄
- SQLHSTMT hstmt1 = SQL_NULL_HSTMT;//定义语句句柄
- using namespace std;
- int main()
- {
- RETCODE retcode;//错误返回码
- retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
- if (retcode < )//错误处理
- {
- cout << "allocate ODBC Environment handle errors." << endl;
- return -;
- }
- retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
- (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
- if (retcode < ) //错误处理
- {
- cout << "the ODBC is not version3.0 " << endl;
- return -;
- }
- retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
- if (retcode < ) //错误处理
- {
- cout << "allocate ODBC connection handle errors." << endl;
- return -;
- }
- char* szDSN = "MySqlODBC";//添加数据源时,为其起的名字
- char* szUID = "root";
- char* szAuthStr = "";
- retcode = SQLConnect(hdbc1,
- (SQLCHAR*)szDSN,
- (SWORD)strlen(szDSN),
- (SQLCHAR*)szUID,
- (SWORD)strlen(szUID),
- (SQLCHAR*)
- szAuthStr,
- (SWORD)strlen(szAuthStr));
- if (retcode < ) //错误处理
- {
- cout << "connect to ODBC datasource errors." << endl;
- return -;
- }
- retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
- if (retcode < )
- {
- cout << "allocate ODBC statement handle errors." << endl;
- return -;
- }
- retcode = SQLExecDirect(hstmt1, (SQLCHAR*)"SElECT * FROM book", SQL_NTS);
- if (retcode < )
- {
- cout << "Executing statement throught ODBC errors." << endl;
- return -;
- }
- SQLCHAR bookname[MaxNameLen + ];
- SQLCHAR size[MaxNameLen + ];
- SQLLEN columnLen = ;
- retcode = SQLBindCol(hstmt1, , SQL_C_CHAR, bookname, MaxNameLen, &columnLen);
- retcode = SQLBindCol(hstmt1, , SQL_C_CHAR, size, MaxNameLen, &columnLen);
- while ((retcode = SQLFetch(hstmt1)) != SQL_NO_DATA)
- {
- cout <<setw() <<"BookName:" << bookname << endl;
- cout << setw() << "Size:" << size << endl;
- }
- system("pause");
- }
运行结果
一、通过MFC ODBC进行操作
MFC提供了对ODBC进行了封装,使得利用MFC创建ODBC的应用程序变得简单
1、新建一个win32的控制台应用程序
2、进行以下修改
MFC的使用:在共享DLL中使用MFC
字符集:使用Unicode字符集
3、如果使用的mysql是64位的,需要将项目的解决方案平台由win32改成x64
至此,相关配置全部完成
程序代码
main.cpp
- #include "stdafx.h"
- #include "afxdb.h"
- #include <iostream>
- #include <iomanip>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- CDatabase db;
- if (!db.IsOpen())//判断数据库是否已经被打开
- {
- BOOL bflag= db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=MySqlODBC;UID=root;PWD=123456"));
- if (!bflag)
- {
- cout << "ERROR" << endl;
- }
- }
- CRecordset rs(&db);
- CString str;
- str.Format(L"select * from book");
- try
- {
- rs.Open(CRecordset::forwardOnly, (L"%s", str));
- short nFields = rs.GetODBCFieldCount();
- while (!rs.IsEOF())
- {
- CDBVariant varValue;
- rs.GetFieldValue(L"bookname", varValue);
- cout << setw() << "BookName:" << *varValue.m_pstringA << endl;
- rs.GetFieldValue(L"size", varValue);
- cout << setw() << "Size:" << *varValue.m_pstringA << endl;
- rs.MoveNext();
- }
- }
- catch (...)
- {
- cout << "ERRPR" << endl;
- }
- db.Close();
- system("pause");
- }
运行结果
C++操作mysql方法总结(2)的更多相关文章
- C++操作mysql方法总结(3)
C++通过mysql++操作mysql的方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍 Mysql ...
- 转:C++操作mysql方法总结(1)
原文:http://www.cnblogs.com/joeblackzqq/p/4332945.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作m ...
- C++操作mysql方法总结(1)
C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为boo ...
- [mysql] C++操作mysql方法总结(1)
From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作 ...
- [mysql] C++操作mysql方法
下载:http://mirrors.sohu.com/mysql/MySQL-5.5/ From: http://www.cnblogs.com/magicsoar/p/3817518.html C+ ...
- python操作mysql方法和常见问题
http://www.cnblogs.com/ma6174/archive/2013/02/21/2920126.html 安装mysql模块 sudo easy_install mysql-pyth ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- nodejs mysql 操作数据库方法二
node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选, ...
- python操作mysql代码讲解(及其实用,未来测试工作主要操作数据库的方法)
pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 1 pip3 install pymysql 使用操作 1.执行SQL 1 2 3 4 ...
随机推荐
- logistic softmax
sigmoid函数(也叫逻辑斯谛函数): 引用wiki百科的定义: A logistic function or logistic curve is a common “S” shape (sigm ...
- ubuntu 装 mysql
sudo apt-get install mysql-server mysql-client
- 2016年JD工作遇到的问题:6-15,日常小问题
6.eclipse通过类名,找到所在的jar包. 解决办法:选中class, 快捷键 Ctrl +Shift+ T!!然后-- 之前经常是,根据类名找到对应的源文件,大脑短路,忘了下面的jar包提示. ...
- EnterpriseDb公司的Postgres Enterprise Manager 安装图解
磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL基础知识与基本操作索引页 回到顶级页面:PostgreSQL索引页 [作者 高健@博客园 luckyjackg ...
- 01- web应用与https协议
1. import socket server = socket.socket() server.bind(("127.0.0.1", 8800)) server.listen(5 ...
- Jenkins +svn +maven +tomcat+ ansible 自动化批量部署
Jenkins +svn +maven +tomcat+ ansible 自动化批量部署 一.部署svn yum install subversion 先创建目录 mkdir /home/svn 创建 ...
- eclipse生成ant build.xml打war包
背景: 最近想实现jenkins+ant命令一键打war包,部署到测试环境,然后自动化接口测试,结果发现用eclipse本身导出的ant buildfiles文件,打包出来都是空文件.很多代码都没 ...
- JUC——线程同步锁(ReentrantReadWriteLock读写锁)
读写锁简介 所谓的读写锁值得是两把锁,在进行数据写入的时候有一个把“写锁”,而在进行数据读取的时候有一把“读锁”. 写锁会实现线程安全同步处理操作,而读锁可以被多个对象读取获取. 读写锁:ReadWr ...
- while循环计算规则:内循环—外循环!
num= 1 #值 =1while num <= 10 : # num(1)小于10 print(num) # 应该打印 这个1的值 num +=1 # num+=1等价于 num再加1 所以这 ...
- 04-matplotlib-柱形图
import numpy as np import matplotlib.pyplot as plt # 柱形图 # 例一 N =5 y = [15,28,10,30,25] index = np.a ...