QSqlDatabase 如何设置超时等属性
如果你使用 QSqlDatabase().exec(“Set global read_timeout=20”) 这样的,不一定有效,你可以试下 QSqlDatabase 自带的 setConnectOptions 接口。
setConnectOptions使用方法
对于不同的数据库,QSqlDatabase 对应支持的参数也不一样;
ODBC | MySQL | PostgreSQL | SQLite |
---|---|---|---|
SQL_ATTR_ACCESS_MODE SQL_ATTR_LOGIN_TIMEOUT SQL_ATTR_CONNECTION_TIMEOUT SQL_ATTR_CURRENT_CATALOG SQL_ATTR_METADATA_ID SQL_ATTR_PACKET_SIZE SQL_ATTR_TRACEFILE SQL_ATTR_TRACE SQL_ATTR_CONNECTION_POOLING SQL_ATTR_ODBC_VERSION | CLIENT_COMPRESS CLIENT_FOUND_ROWS CLIENT_IGNORE_SPACE CLIENT_ODBC CLIENT_NO_SCHEMA CLIENT_INTERACTIVE UNIX_SOCKET MYSQL_OPT_RECONNECT MYSQL_OPT_CONNECT_TIMEOUT MYSQL_OPT_READ_TIMEOUT MYSQL_OPT_WRITE_TIMEOUT SSL_KEY,SSL_CERT SSL_CA,SSL_CAPATH SSL_CIPHER | connect_timeout options,tty,requiressl service | QSQLITE_BUSY_TIMEOUT QSQLITE_OPEN_READONLY QSQLITE_OPEN_URI QSQLITE_ENABLE_SHARED_CACHE QSQLITE_ENABLE_REGEXP |
具体将对应参数=具体值,多个参数中间用“;”分开,任何地方都不要有空格。
代码示例
设置重链和读超时时间
db.setConnectOptions("MYSQL_OPT_CONNECT_TIMEOUT=2;MYSQL_OPT_READ_TIMEOUT=2");
db.open()
参考:Qt Assistant