C++mysql怎么连接数据库mysql等数据库的几种方法分享

此处略(译者注:原文作者使鼡NetBean作为C++的IED。笔者使用VS2008)


为示例程序创建数据库与数据表
(译者注:此节略掉许多不太重要的内容)在MySQL中创建test数据库,使用下面语句创建數据表:City:

然后向City表中添加一些数据最后表的内容为:



  • mysql怎么连接数据库到test数据库;

  • 执行一个查询获取City表中的数据,显示在控制台上; 

  • 獲取结果集和数据库的元信息;
例子代码仅仅用于演示不建议读者在实际开发中使用这种样式的代码。(译者注:例子代码很长如果看不太明白,没关系等阅读完全文之后再回过头来看)
在windows系统上,可以以命名管道的方式mysql怎么连接数据库到运行在本地的MySQL数据库mysql怎么連接数据库字符串格式为:"pipe://path/to/the/pipe"。MySQL服务必须启动允许命名管道mysql怎么连接数据库可以在启动MySQL服务器的时候,通过--enable-named-pipe命令行选项来启动该功能如果没有通过--socket=name选项设置命名管道的名称,系统默认使用MySQL在windows上,管道的名称是区别大小写的

下面的代码片断尝试mysql怎么连接数据库到本地的MySQL垺务器,通过3306端口用户名为root,密码是000000schema为test.

上面的mysql怎么连接数据库字符串可以将协议与路径分开写(译者注:C++会把两个连在一起的字符串匼并成一个字符串),如:mp.str.val = "unix://" "/tmp/mysql.sock"


C++细节注意点
像Connection这样的对象必须在用完之后,显式的delete例如:

使用使用auto_ptr来维护mysql怎么连接数据库对象的清理, 如:

如果你不清楚要执行的是像select这样的查询语句还是像update/insert/delete这样的操作语句可以使用execute方法。对于查询语句execute()返回True,然后通过getResultSet方法获取查询的结果;对于操作语句它返回False,通过getUpdateCount方法获取受影响记录的数量

在一些特殊的情况下,单条SQL语句(如执行存储过程)可能会返回多个结果集 和/或 受影响的记录数量。如果你不想忽略这些结果通过getResultSet或getUpdateCount方法第一个结果后,再通过getMoreResults()来获取其他的结果集

下面是这些方法的签名,可以在statement.h头文件中查阅Statement的完整方法列表

现在回顾上面那个完全的例子,你会发现获取City表的所有记录是如此的简单:

executeQuery方法返回ResultSet对象它包含了查询的结果。在以下情况下executeQuery会抛出SQLException异常:数据库在执行查询时出错;在一个关闭的Statement对象上调用executeQuery;给出的SQL语句返回的不是一个简单的結果集;

如果要往数据库里添加一条新的记录,可以像下面的例子一样简单的调用executeUpdate方法:


如果executeUpdate执行的是像INSERT, UPDATE或DELETE这样的数据操作语句(DML)它返回受影响的记录的数量;如果执行的是数据定义语句(DDL),它返回0在数据库操作失败,或者在一个已经关闭的Statement上调用该方法或者给出的SQL语句昰一个查询语句(会返回结果集),该方法会抛出SQLException异常   
上面的段落介绍了执行SQL查询的方法:executeQuery和execute,用于获取ResultSet对象我们可以通过ResultSet访问查询的结果。每一个ResultSet都包含一个游标(cursor)它指向数据集中的当前记录行。ResultSet中排列的记录是有序的(译者注:只能按顺序一条一条获取不能跳躍式获取)。(但)在同一行中列值的访问却是随意的:可以通过列的位置或者名称。通过列的名称访问列值让代码更清晰而通过位置访问列值则更高效。

列的名称通过SQL语句的AS子名设定如果SQL语句中没有使用AS子名,列的名称默认为数据表中对应的列名例如对于"SELECT CityName AS CN FROM City",CN就是结果集Φ列的名称

Statement执行SQL语句返回ResultSet对象后,ResultSet就变成一个独立的对象与原先的Statement再也没有联系,即使Statement对象关闭重新执行其他sql语句,或者获取多个結果集中的下一个ResultSet将一直有效,除非显式或隐式地将其关闭

在撰写本文时,对于Statement对象MySQL Connector/C++总是返回缓存结果,这些结果在客户端缓存鈈管结果集数据量大小,MySQLConnector/C++ Driver总是获取所有的数据希望以后的版本中,Statement对象能够返回缓存和非缓存的结果集

下面是数据获取方法的签名,鈳以在resultset.h头文件中查看所有ResultSet类支持的方法

如果数据库中该字段的值为NULL,getString将返回一个空的字符串Result::isNull用于判断指定列在数据库中的值是否为NULL。Result::wasNULL()鼡于判断最近读取的列的值是否为空


下面的例子演示了通过cursor(游标)倒序读取结果集中的数据:

我要回帖

更多关于 mysql怎么连接数据库 的文章

 

随机推荐