Connector/ c++ 8.0支持基于JDBC4规范的遗留c++ API。
这使得使用Connector/ c++ 1.1版本的应用程序可以轻松迁移到Connector/ c++ 8.0版本。
关于遗留c++ API的更详细信息可以在X MySQL连接器/ c++开发指南MySQL在线手册。
使用Connector/ c++和遗留c++ API的示例代码
下面的代码演示了如何使用遗留的c++ API连接到MySQL服务器。
-
请注意
-
连接是在遗留协议上建立的,因此不需要X Plugin,服务器也不需要支持X协议。
建立连接后,代码执行一个简单的SQL语句并从服务器读取结果。源文件可以在testapp/jdbc_test中找到。cc在Connector/ c++ 8.0的源分发版中。看到使用Connector/ c++ 8.0有关如何构建示例代码的说明。
每个使用遗留c++ API的程序都必须包含这个头文件:
# include < mysql / jdbc.h >
为连接、处理命令行参数和其他管理定义凭据:
#定义DEFAULT_URI "tcp://127.0.0.1"
#定义root用户
#定义EXAMPLE_PASS "
#define EXAMPLE_DB "test"
使用命名空间性病;
int主要(int命令行参数个数,常量
字符* * argv)
{
常量
字符*url = (argc > 1 ?argv[1]: DEFAULT_URI;
常量
字符串用户(argc >= 3 ?argv[2]: EXAMPLE_USER);
常量
字符串Pass (argc >= 4 ?argv[3]: EXAMPLE_PASS);
常量
字符串数据库(argc >= 5 ?argv[4]: EXAMPLE_DB);
Cout << endl;
cout < <连接器/ c++独立程序示例…< < endl;
Cout << endl;
试一试{
的实例来建立到MySQL服务器的连接sql:连接
从一个sql: mysql:: MySQL_Driver
对象。一个sql: mysql:: MySQL_Driver
对象返回。sql:: mysql:: get_mysql_driver_instance ()
:
sql::Driver * Driver = sql::mysql::get_driver_instance();
cout < <“在上创建会话”<< url <<“…”
<< endl << endl;
std::unique_ptr< sql::Connection >
Con(驱动->连接(url,用户,通过));
确保你的自由骗子,那个sql:连接
只要你不再需要它,就拒绝它。但不显式释放驱动程序、连接器对象。Connector/ c++负责释放它。
-
请注意
-
get_mysql_driver_instance ()
调用get_driver_instance ()
,这不是线程安全的。要么避免从多个线程中同时调用这些方法,要么用互斥锁将这些调用包围起来,以防止在多个线程中同时执行。
这些方法可以用来检查连接状态或重新连接:
连接sql:::: isValid ()
检查连接是否存在
sql:连接:连接()
如果连接已断开,则重新连接
的sql:连接
用于设置模式和创建语句:
con - > setSchema(数据库);
std::unique_ptr< sql::语句> stmt(con->createStatement());
要运行简单的查询,可以使用sql::声明::execute ()
,sql::声明::executeQuery ()
,sql::声明::executeUpdate ()
方法。使用方法sql::声明::execute ()
如果你的查询没有返回一个结果集,或者你的查询返回多个结果集:
std::unique_ptr< sql::ResultSet >
res(支撑- > executeQuery ("SELECT 'Welcome to Connector/ c++ ' AS _message"));
-
请注意
-
Statement和ResultSet对象是临时的,但它们是动态分配的。因此,当不再需要时,我们使用std::unique_ptr<>来释放内存。
获取结果集的API对于(简单)语句和准备语句是相同的。如果查询返回一个结果集,则使用sql::声明::executeQuery ()
或sql:: PreparedStatement:: executeQuery ()
运行您的查询。两个方法都返回sql:结果集
对象。默认情况下,Connector/ c++会缓冲客户机上的所有结果集,以支持游标。
下面的代码一行一行地遍历整个结果集sql::结果集::next ()
方法,该方法返回真正的
如果成功读取了行。否则它会返回假
,这意味着我们到达了结果集的末尾,没有更多的行要读了。
实际数据是通过getXxxx()函数获得的,例如getInt (), getString ()
等。可以按照结果集中从1开始的顺序用数字对列进行索引。另外,列名也可以用作字符串索引。
而(res - > next ())
{
cout < <“\ t…MySQL回复:"< < res - > getString (“_message”) << endl;
cout < <“\ t…再说一遍,MySQL。”< < endl;
cout < <“\ t…MySQL回复:"<< res->getString(1) << endl;
}
错误处理是通过标准的try/catch块完成的:
抓(sql:: SQLException & e)
{
cout < <"# ERR: SQLException in "< < __FILE__;
cout < <"("<<“EXAMPLE_FUNCTION”<<")上线"<< __LINE__ << endl;
cout < <# err: "< < e.what ();
cout < <MySQL错误代码:< < e.getErrorCode ();
cout < <SQLState: "<< e.getSQLState() <<“)”< < endl;
返回EXIT_FAILURE;
}
以下是遗留c++ API的测试示例的完整c++代码:
# include < stdlib.h >
# include < iostream >
# include < sstream >
# include < stdexcept >
# include <记忆>
# include < mysql / jdbc.h >
#定义DEFAULT_URI "tcp://127.0.0.1"
#定义root用户
#定义EXAMPLE_PASS "
#define EXAMPLE_DB "test"
使用命名空间性病;
int主要(int命令行参数个数,常量
字符* * argv)
{
常量
字符*url = (argc > 1 ?argv[1]: DEFAULT_URI;
常量
字符串用户(argc >= 3 ?argv[2]: EXAMPLE_USER);
常量
字符串Pass (argc >= 4 ?argv[3]: EXAMPLE_PASS);
常量
字符串数据库(argc >= 5 ?argv[4]: EXAMPLE_DB);
Cout << endl;
cout < <连接器/ c++独立程序示例…< < endl;
Cout << endl;
试一试{
sql::Driver * Driver = sql::mysql::get_driver_instance();
cout < <“在上创建会话”<< url <<“…”
<< endl << endl;
std::unique_ptr< sql::Connection >
Con(驱动->连接(url,用户,通过));
con - > setSchema(数据库);
std::unique_ptr< sql::语句> stmt(con->createStatement());
std::unique_ptr< sql::ResultSet >
res(支撑- > executeQuery ("SELECT 'Welcome to Connector/ c++ ' AS _message"));
cout < <“\ t…运行'SELECT 'Welcome to Connector/ c++ ' AS _message'"
< < endl;
而(res - > next ())
{
cout < <“\ t…MySQL回复:"< < res - > getString (“_message”) << endl;
cout < <“\ t…再说一遍,MySQL。”< < endl;
cout < <“\ t…MySQL回复:"<< res->getString(1) << endl;
}
}
抓(sql:: SQLException & e)
{
cout < <"# ERR: SQLException in "< < __FILE__;
cout < <"("<<“EXAMPLE_FUNCTION”<<")上线"<< __LINE__ << endl;
cout < <# err: "< < e.what ();
cout < <MySQL错误代码:< < e.getErrorCode ();
cout < <SQLState: "<< e.getSQLState() <<“)”< < endl;
返回EXIT_FAILURE;
}
Cout << endl;
cout < <“…更多信息请访问http://www.mysql.10bet靠谱com。”< < endl;
Cout << endl;
返回EXIT_SUCCESS;
}