C++操作mysql
# 1. mysql_init()
MYSQL *
mysql_init(MYSQL *mysql)
# 描述
分配或初始化一个MYSQL
适合于的对象 mysql_real_connect()
。如果 mysql
是NULL
指针,则函数分配、初始化并返回一个新对象。否则,初始化对象并返回对象的地址。如果 mysql_init()
分配了一个新对象,它会在mysql_close()
调用关闭连接时被释放 。
在非多线程环境中, 根据需要自动mysql_init()
调用 mysql_library_init()
。但是, mysql_library_init()
在多线程环境中不是线程安全的,因此mysql_init()
. 在调用之前mysql_init()
,要么mysql_library_init()
在产生任何线程之前调用,要么使用互斥锁来保护 mysql_library_init()
调用。这应该在任何其他客户端库调用之前完成。
# 返回值
一个初始化的MYSQL*
处理程序。 NULL
如果没有足够的内存来分配新对象。
# 错误
如果内存不足,NULL
则返回。
# 2. mysql_options()
int
mysql_options(MYSQL *mysql,
enum mysql_option option,
const void *arg)
# 描述
该option
参数是你想要设置的选项; 该arg
参数是选项的值。如果选项是整数,则指定一个指向整数值的指针作为arg
参数。
下面的列表描述了可能的选项、它们的效果以及如何arg
使用每个选项。对于指示arg
未使用的选项描述 ,其值无关紧要;传0是惯例。
MYSQL_INIT_COMMAND
(参数类型:char *
)连接到 MySQL 服务器时要执行的 SQL 语句。如果发生重新连接,则自动重新执行。
MYSQL_OPT_BIND
(说法:char *
)连接到服务器的网络接口。当客户端主机有多个网络接口时使用。参数是主机名或 IP 地址(指定为字符串)。
MYSQL_OPT_CONNECT_TIMEOUT
(参数类型:unsigned int *
)以秒为单位的连接超时。
MYSQL_OPT_MAX_ALLOWED_PACKET
(说法:unsigned long *
)此选项设置客户端/服务器通信缓冲区的客户端最大大小。如果
mysql
参数是 non-NULL
,则调用设置该会话的选项值。如果mysql
是NULL
,则调用为所有未指定会话特定值的后续会话全局设置选项值。因为可以设置会话或全局最大缓冲区大小,取决于
mysql
参数是 non-NULL
还是NULL
,mysql_get_option()
类似地根据其mysql
参数返回会话或全局值。MYSQL_OPT_NET_BUFFER_LENGTH
(说法:unsigned long *
)此选项设置 TCP/IP 和套接字通信的客户端缓冲区大小。
MYSQL_OPT_PROTOCOL
(参数类型:unsigned int *
)用于连接的传输协议。指定中
mysql_protocol_type
定义的枚举值之一mysql.h
。MYSQL_OPT_READ_TIMEOUT
(参数类型:unsigned int *
)每次尝试从服务器读取的超时时间(以秒为单位)。必要时会重试,因此总有效超时值是选项值的三倍。您可以设置该值,以便在 TCP/IP
Close_Wait_Timeout
值 10 分钟之前检测到丢失的连接 。MYSQL_OPT_RECONNECT
(参数类型:bool *
)如果发现连接已丢失,则启用或禁用与服务器的自动重新连接。重新连接默认关闭;此选项提供了一种显式设置重新连接行为的方法。请参见 第 3.6.7 节,“自动重新连接控制”。
MYSQL_OPT_RETRY_COUNT
(参数类型:unsigned int *
)在连接到服务器或与其通信时中断的 I/O 相关系统调用的重试计数。如果未指定此选项,则默认值为 1(如果初始调用中断 2 次,则重试 1 次)。
此选项只能由链接到使用 NDB Cluster 支持编译的 C 客户端库的客户端使用。
MYSQL_OPT_WRITE_TIMEOUT
(参数类型:unsigned int *
)每次尝试写入服务器的超时时间(以秒为单位)。如有必要,会重试,因此总有效超时值是选项值的两倍。
# 返回值
成功为零。如果指定未知选项,则非零。
# 3. mysql_real_connect()
MYSQL *
mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag)
# 描述
指定参数如下:
- 对于第一个参数,指定现有
MYSQL
结构的地址 。在调用之前mysql_real_connect()
,调用mysql_init()
初始化MYSQL
结构。 host
可以是主机名或 IP 地址。- 该
user
参数包含用户的 MySQL 登录 ID。如果user
是NULL
或空字符串""
,则假定为当前用户。在 Unix 下,这是当前登录名。在 Windows ODBC 下,必须明确指定当前用户名。 - 该
passwd
参数包含 的密码user
。如果passwd
是NULL
,则仅检查user
表中具有空白(空)密码字段的用户条目是否匹配。这使数据库管理员可以设置 MySQL 权限系统,使用户根据是否指定密码获得不同的权限。 db
是数据库名称。如果db
不是NULL
,则连接将默认数据库设置为此值。- 如果
port
不为 0,则该值用作 TCP/IP 连接的端口号。请注意,host
参数决定了连接的类型。 - 如果
unix_socket
不是NULL
,则字符串指定要使用的套接字或命名管道。请注意,host
参数决定了连接的类型。 client_flag
通常为 0
# 返回值
一个MYSQL*
连接处理程序,如果连接成功,NULL
如果连接是不成功的。对于成功连接,返回值与第一个参数的值相同。
# 4. mysql_error()
const char *
mysql_error(MYSQL *mysql)
# 描述
对于由 指定的连接mysql
, mysql_error()
返回一个以空字符结尾的字符串,其中包含最近调用失败的 API 函数的错误消息。如果函数没有失败,则返回值 mysql_error()
可能是前一个错误或空字符串表示没有错误。
# 返回值
描述错误的以空字符结尾的字符串。如果没有发生错误,则为空字符串。
# 5. mysql_stat()
const char *
mysql_stat(MYSQL *mysql)
# 描述
返回包含类似于mysqladmin status 命令提供的信息的字符串。这包括以秒为单位的正常运行时间以及正在运行的线程、问题、重新加载和打开表的数量。
# 返回值
描述服务器状态的字符串。 NULL
表示连接已经关闭。
# 6. mysql_close()
void
mysql_close(MYSQL *mysql)
# 描述
关闭先前打开的连接。
# 7. mysql_query()
int
mysql_query(MYSQL *mysql,
const char *stmt_str)
# 描述
执行空终止字符串指向的 SQL 语句stmt_str
。通常,字符串必须由单个 SQL 语句组成,没有终止分号 ( ;
) 或\g
. 如果启用了多语句执行,则字符串可以包含多个用分号分隔的语句。
要确定语句是否返回结果集,请调用 mysql_field_count()
。
# 返回值
成功为零。如果发生错误,则非零。
# 8. mysql_store_result()
MYSQL_RES *
mysql_store_result(MYSQL *mysql)
# 描述
在调用mysql_query()或者mysql_real_query() 之后,须调用mysql_store_result()或者mysql_use_result() 对于那些成功检索了数据的每个查询(select,show,describe,explain,check table等)。 mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。
调用mysql_num_rows()可以找出结果集中的行数。可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
在对结果集处理完成之后,也必须调用mysql_free_result()函数释放内存。
要使用返回的结果集,需调用 mysql_field_count()
。
mysql_store_result()
将查询的整个结果读取到客户端,分配一个 MYSQL_RES
结构,并将结果放入该结构中。
mysql_store_result()
返回 NULL
如果语句没有返回结果集(例如,如果它是一个 INSERT
语句),或发生错误,结果集的读取失败。
如果没有返回行,则返回空结果集。(空结果集与作为返回值的空指针不同。)
在调用 mysql_store_result()
并取回非空指针的结果后,您可以调用 mysql_num_rows()
以查明结果集中有多少行。
你可以调用mysql_fetch_row()
从结果集读取行,或者 mysql_row_seek()
和 mysql_row_tell()
获取或设置结果集中的当前行位置。
# 返回值
指向带有MYSQL_RES
结果的结果结构的指针。NULL
如果语句没有返回结果集或发生错误。要确定是否发生错误,请检查是 mysql_error()
返回非空字符串、mysql_errno()
返回非零还是 mysql_field_count()
返回零。
# 9. mysql_field_count()
unsigned int
mysql_field_count(MYSQL *mysql)
# 描述
此函数的正常使用是在 mysql_store_result()
返回时 NULL
(因此您没有结果集指针)。在这种情况下,您可以调用 mysql_field_count()
以确定是否 mysql_store_result()
应该产生非空结果。这使客户端程序能够在不知道查询是否是SELECT
(或 类似SELECT
)语句的情况下采取适当的操作。
# 返回值
一个无符号整数,表示结果集中的列数。
# 10. mysql_affected_rows()
uint64_t
mysql_affected_rows(MYSQL *mysql)
它返回改变,删除或插入的最后一条语句的行数,如果它是一个UPDATE
, DELETE
或 INSERT
。对于 SELECT
语句, mysql_affected_rows()
像mysql_num_rows()
if (mysql_query(mysql, sql.c_str()))
{
LOG4CPLUS_ERROR(_logger, "SQL: "<<sql);
LOG4CPLUS_ERROR(_logger, "Query Error: "<<mysql_error(mysql));
}
else
{
result = mysql_store_result(mysql);
if (result) //执行的是select show等语句
{
mysql_free_result(result);
}
else // resutl == null
{
if(mysql_field_count(mysql) == 0) //代表执行的是update,insert,delete类的非查询语句
{
res = mysql_affected_rows(mysql);
}
}
}
# 11. mysql_fetch_row()
MYSQL_ROW
mysql_fetch_row(MYSQL_RES *result)
检索结果集的下一行
# 12. mysql_free_result()
void
mysql_free_result(MYSQL_RES *result)
mysql_free_result()
释放由mysql_store_result()
、 mysql_use_result()
、 mysql_list_dbs()
等为结果集分配的内存 。处理完结果集后,您必须通过调用 来释放它使用的内存 mysql_free_result()
。
在释放结果集后不要尝试访问它。