最近在学习数据库的内容,起先是在windows下用mysql c++ connector进行编程,之所以选用c++而不是c的api,主要是考虑到c++ connector是按照JDBC的api进行实现的,使用比较方便。废话不多说,直接上代码。代码主要是对常用操作的测试与封装,包括DDL、DQL、DML,以及文本、图像的读写方法

/*
* SQLWork.cpp
*
* Created on: Dec 29, 2016
* Author: tla001
*/ #include "SQLWork.h" SQLWork::SQLWork(string url,string user,string passwd) {
// TODO Auto-generated constructor stub
turl=url;
tuser=user;
tpasswd=passwd;
}
SQLWork::~SQLWork() {
// TODO Auto-generated destructor stub
if(res)
delete res;
if(stmt)
delete stmt;
if(con)
delete con;
} int SQLWork::doConnect(){
try{
dirver = get_driver_instance(); //连接数据库
con = dirver->connect(turl, tuser, tpasswd);
con->setClientOption("characterSetResults", "utf8");
}catch(SQLException &e){
cout << "ERROR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << ")" << endl; if (e.getErrorCode() == ) {
/*
Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
Message: Unknown command
*/
cout << "\nYour server does not seem to support Prepared Statements at all. ";
cout << "Perhaps MYSQL < 4.1?" << endl;
} return EXIT_FAILURE;
} catch (runtime_error &e) {
cout << "ERROR: " << e.what() << endl; return EXIT_FAILURE;
} return EXIT_SUCCESS;
}
int SQLWork::changeCharacter(string chars){
try{
con->setClientOption("characterSetResults", chars);
}catch(SQLException &e){
cout << "ERROR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << ")" << endl; if (e.getErrorCode() == ) {
/*
Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
Message: Unknown command
*/
cout << "\nYour server does not seem to support Prepared Statements at all. ";
cout << "Perhaps MYSQL < 4.1?" << endl;
} return EXIT_FAILURE;
} catch (runtime_error &e) {
cout << "ERROR: " << e.what() << endl; return EXIT_FAILURE;
} return EXIT_SUCCESS;
}
int SQLWork::chooseDatabase(string db){
try{
con->setSchema(db);
stmt = con->createStatement(); //从表中获取所有信息
}catch(SQLException &e){
cout << "ERROR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << ")" << endl; if (e.getErrorCode() == ) {
/*
Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
Message: Unknown command
*/
cout << "\nYour server does not seem to support Prepared Statements at all. ";
cout << "Perhaps MYSQL < 4.1?" << endl;
} return EXIT_FAILURE;
} catch (runtime_error &e) {
cout << "ERROR: " << e.what() << endl; return EXIT_FAILURE;
} return EXIT_SUCCESS;
} int SQLWork::doWork(){
try{
/*
* 执行具体工作
*/
//buildTest();
//operateTable();
//operateData();
//operateDataPre();
//queryData();
queryDataPre(); }catch(SQLException &e){
cout << "ERROR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << ")" << endl; if (e.getErrorCode() == ) {
/*
Error: 1047 SQLSTATE: 08S01 (ER_UNKNOWN_COM_ERROR)
Message: Unknown command
*/
cout << "\nYour server does not seem to support Prepared Statements at all. ";
cout << "Perhaps MYSQL < 4.1?" << endl;
} return EXIT_FAILURE;
} catch (runtime_error &e) {
cout << "ERROR: " << e.what() << endl; return EXIT_FAILURE;
} return EXIT_SUCCESS;
} void SQLWork::buildTest(){
res = stmt->executeQuery("SELECT * from student"); //循环遍历
while (res->next()) { //输出,id,name,age字段的信息
cout << res->getInt("id")
<< " | " << res->getString()
<< " | " << res->getInt("tage")
<< " | " << res->getString("thome")
<< endl;
} //清理
} /*
* 执行DDL语句Data Definition Language 数据定义语言
*/
void SQLWork::operateTable(){
//string sqlOp="create table contact(id int primary key auto_increment,name varchar(20),gender varchar(2))";
//string sqlOp="drop table contact";
//string sqlOp="ALTER TABLE contact ADD home VARCHAR(30)";
//string sqlOp="ALTER TABLE contact drop home";
//string sqlOp="ALTER TABLE contact MODIFY gender VARCHAR(4)";
//string sqlOp="ALTER TABLE contact CHANGE thome home VARCHAR(20);";
string sqlOp="CREATE TABLE longtest(id INT PRIMARY KEY AUTO_INCREMENT,content LONGTEXT,img LONGBLOB)"; int count=stmt->executeUpdate(sqlOp);
cout<<"count "<<count<<endl;
} /*
* DML(Data Manipulation Language 数据操控语言)
*/
void SQLWork::operateData(){
//string sqlOp="INSERT INTO contact VALUES(2,'李','男','shenyang')";
//string sqlOp="insert contact(name,gender) values('王二丫','女')";
//string sqlOp="DELETE FROM contact WHERE id>2 and id<5";
string sqlOp="UPDATE contact SET name='韩' WHERE id=2;";
//string sqlOp="";
//string sqlOp=""; int count=stmt->executeUpdate(sqlOp);
cout<<"count "<<count<<endl;
}
void SQLWork::operateDataPre(){
//预编译插入
// string sqlOp="insert contact(name,gender) values(?,?)";
// pstmt=con->prepareStatement(sqlOp);
// pstmt->setString(1,"李四");
// pstmt->setString(2,"男"); //预编译修改
// string sqlOp="UPDATE contact SET name=? WHERE id=?";
// pstmt=con->prepareStatement(sqlOp);
// pstmt->setString(1,"王二");
// pstmt->setInt(2,1); //预编译删除
// string sqlOp="DELETE FROM contact WHERE id>?";
// pstmt=con->prepareStatement(sqlOp);
// pstmt->setInt(1,4); // int count=pstmt->executeUpdate();
// cout<<"count "<<count<<endl; /***********************文本数据*****************************************/
//保存大文本数据(longtext)
// string sqlOp="insert longtest(content) values(?)";
// pstmt=con->prepareStatement(sqlOp);
// ifstream file;
// file.open("./file.txt");
// if(!file){
// cout<<"open failed"<<endl;
// exit(-1);
// }
// pstmt->setBlob(1,&file);
//
// int count=pstmt->executeUpdate();
// cout<<"count "<<count<<endl;
// file.close(); /***********************二进制数据*****************************************/
//保存二进制数据(longblob)
string sqlOp="insert longtest(img) values(?)";
pstmt=con->prepareStatement(sqlOp);
ifstream file;
file.open("./test.png",ios::binary);
if(!file){
cout<<"open failed"<<endl;
exit(-);
}
pstmt->setBlob(,&file); int count=pstmt->executeUpdate();
cout<<"count "<<count<<endl;
file.close();
}
/*
* 数据查询语句DQL
*/
void SQLWork::queryData(){
string sqlOp="SELECT * FROM contact";
//string sqlOp="";
//string sqlOp=""; res = stmt->executeQuery(sqlOp); //循环遍历
while (res->next()) {
int id=res->getInt("id");
string name=res->getString("name");
string gender=res->getString("gender");
string home=res->getString("home");
cout<<"id: "<<id<<"\t| name: "<<name<<"\t| gender: "<<gender<<"\t| home: "<<home<<endl;
}
} void SQLWork::queryDataPre(){
//预编译查询
// string sqlOp="SELECT * FROM contact";
// //string sqlOp="";
// //string sqlOp="";
// pstmt=con->prepareStatement(sqlOp);
// res = pstmt->executeQuery();
// while (res->next()) {
// int id=res->getInt("id");
// string name=res->getString("name");
// string gender=res->getString("gender");
// string home=res->getString("home");
// cout<<"id: "<<id<<"\t| name: "<<name<<"\t| gender: "<<gender<<"\t| home: "<<home<<endl;
// } /***********************文本数据*****************************************/
//查询大文件数据
// string sqlOp="SELECT * FROM longtest";
//
// pstmt=con->prepareStatement(sqlOp);
// res = pstmt->executeQuery();
// while (res->next()) {
// string content=res->getString("content");
// cout<<content<<endl;
// }
/***********************二进制数据*****************************************/
//查询二进制数据
string sqlOp="SELECT * FROM longtest"; pstmt=con->prepareStatement(sqlOp);
res = pstmt->executeQuery();
int i=;
while (res->next()) {
i++;
ostringstream iname;
iname <<"img"<<i<<".png";
istream *is=res->getBlob("img");
if(is->peek()>){
ofstream file(iname.str().c_str(),ios::binary);
char data[];
while(is->read(data,)){
file.write(data,sizeof(data));
}
file.write(data,sizeof(data));
file.close();
}
}
}

获取整个工程GitHub

Linux下MySQL c++ connector示例的更多相关文章

  1. linux 下mysql的启动 、调试、排错

    Linux 下 MySQL 启动与关闭 说明 一.启动 1.1  MySQL 进程 可以用ps 命令查看进程: [root@rac2 ~]# ps -ef|grep mysql root     21 ...

  2. linux下MySQL安装登录及操作

    linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...

  3. Linux下MySQL数据库的备份与恢复

    Linux下MySQL数据库的备份与恢复 作者:Grey 原文地址: Github 语雀 博客园 基于版本 MySQL5.7 Deepin Linux 15.11 xtrabackup-2.4.18 ...

  4. Linux下MySQL忘记密码

    系统:CentOS6.6 64位 参考文档(截图请看原网址): Linux下MySQL忘记root密码怎么办_百度经验 http://jingyan.baidu.com/article/1709ad8 ...

  5. linux下mysql远程访问

    // */ // ]]>   linux下mysql远程访问 Mysql默认root用户只能本地访问,不能远程连接管理mysql数据库,但项目中必须要远程导 入导出数据,所以研究了一下. Tab ...

  6. linux下mysql字符集编码问题的修改

    安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件:由于linux下MySQL的默认安装目录分布在不同的文件下:不像windo ...

  7. Linux下MySQL的备份与还原

    Linux下MySQL的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [roo ...

  8. linux下mysql定时备份数据库

    linux下mysql定时备份数据库 (2010-10-21 12:40:17) 转载▼ 标签: 杂谈   一.用命令实现备份 首页进入mysql的bin目录 1.备份数据#mysqldump -uu ...

  9. 设置Linux下Mysql表名不区分大小写

    1.Linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写:2.用root帐号登录后,在/etc/my.cnf中的[mysqld]后添加添加lower_case_table_nam ...

随机推荐

  1. ASP.NET MVC 长连接(服务器推)完整实现

    1.什么是"服务器推"(百科来一波)? 传统模式的 Web 系统以客户端发出请求.服务器端响应的方式工作.这种方式并不能满足很多现实应用的需求,譬如: 监控系统:后台硬件热插拔.L ...

  2. windows phone 8.0 的网络图片异步加载方案

    买了一本林政的8.1UI的书,看到一个使用弱引用对像来解决图片缓存的问题,刚好自已写的应用也遇到这个问题,于是小改动了一下代码,搬到了8.0版本来使用,代码由 zhxilin℃+ 大神提供了部分解决代 ...

  3. IOS 移除栈顶的控制器

    - (IBAction)back2Two:(id)sender { // 移除当前栈顶的控制器 [self.navigationController popViewControllerAnimated ...

  4. Matlab 中实用数据结构之 containers.Map

    概要   熟悉 Python 的都知道字典 Dict 类型数据结构功能的强大,Matlab 中虽然有表结构,但是其列名必须是亦变量名类型的字符串,如果我想用数字开头的字符串作键值,其表结构就无能为力了 ...

  5. springboot集成shiro的session污染问题

    问题起因是这样的,有两套系统,系统a和系统b.两套系统均使用shiro做的权限管理,之前部署在两台机器上.使用浏览器打开a系统后另开页签打开b系统,互不干扰都能正常使用,后因业务迁移,两套系统部署到了 ...

  6. [转] 防止js全局变量污染方法总结

    javaScript 可以随意定义保存所有应用资源的全局变量.但全局变量可以削弱程序灵活性,增大了模块之间的耦合性.在多人协作时,如果定义过多的全局变量 有可能造成全局变量冲突,也就是全局变量污染问题 ...

  7. JDBC开发,数据库的连接

    JDBC开发步骤 1.建完工程后,右击工程,new,新建一个文件夹Folder,装jar包,        2.将下载好的驱动包打开,找到jar文件,CTRL+C,选中装jar包的文件夹,CTRL+V ...

  8. C# 运用FileInfo类创建、删除文件

    通过FileInfo类,我们可以方便地创建出文件,并可以访问文件的属性同时还可以对文件进行打开文件.关闭文件.读写文件等基本的操作.下面的代码显示了如何创建一个文本文件并且去访问其创建时间.文件的绝对 ...

  9. C#继承机制 多级继承

    一些面向对象语言允许一个类从多个基类中继承,而另一些面向对象语言只允许从一个类继承,但可以随意从几个接口或纯抽象类中继承. 只有C++支持多级继承,许多程序员对此褒贬不一.多级继承常会引起继承来的类之 ...

  10. vue-awesome-swiper实现轮播图

    1.首先通过npm安装vue-awesome-swiper,我在项目中用的是2.6.7版本 npm install vue-awesome-swiper@2.6.7 –save 2. 在main.js ...