内容简介:SqlHelp.hSqlHelp.cpp
SqlHelp.h
点击( 此处 )折叠或打开
- #ifndef SQLHELP_H
- #define SQLHELP_H
- #include < QString >
- #include < QSqlDatabase >
- #include < QSqlQuery >
- #include < QVector >
- class SqlHelp
- {
- public :
- SqlHelp ( ) ;
- ~ SqlHelp ( ) ;
- void createConnection ( QString dbFile ) ;
- void closeConnection ( ) ;
- void createDb ( QString dbFile ) ;
- void deleteDb ( ) ;
- void createTable ( QString tableName , QVector < QString > fdNameTypePairs ) ; / / fdNameTypePairs 字段名称,类型对列表
- void deleteTable ( QString tableName ) ;
- void addRecord ( QString tableName , QVector < QString > fdNameValuePairs ) ;
- void delRecord ( QString tableName , QString condition ) ;
- void setRecord ( QString tableName , QVector < QString > fdNameValuePairs , QString condition ) ;
- void showTableUI ( QString tableName ) ;
- QVector < QString > getFirstRecord ( QString tableName , QVector < QString > fdNames , QString condition ) ;
- QVector < QString > getAllTableName ( ) ;
- void execSql ( const QString sqlStr ) ;
- QString getLastSqlString ( ) const ;
- QString getLastErrorText ( ) const ;
- QString vectorToString ( const QVector < QString > & list , QString split ) const ;
- void testCase ( ) ;
- private :
- QSqlDatabase connection ;
- QString lastSqlString ;
- QString lastErrorText ;
- } ;
- #endif / / SQLHELP_H
SqlHelp.cpp
点击( 此处 )折叠或打开
- #include "SqlHelp.h"
- #include < QMessageBox >
- #include "ui/MessageDialog.h"
- #include < QSqlError >
- #include < QSqlTableModel >
- #include < QTableView >
- #include "debug.h"
- / * *
- * @brief SqlHelp : : SqlHelp
- *
- * QT SQLite 辅助库
- * Authour : dikui
- * 测试方式:main . cpp 中添加两行
- SqlHelp h ;
- h . testCase ( ) ;
- 其中MessageDialog为自定义的对话框
- debug . h仅包含了TRACE_MSG定义,用于调试打印输出,实际是封装了qDebug ( ) 而已
- testCase ( ) ; 执行完后会产生一个数据库test . db ,里面包含了10条数据
- * /
- SqlHelp : : SqlHelp ( )
- {
- }
- SqlHelp : : ~ SqlHelp ( )
- {
- closeConnection ( ) ;
- }
- void SqlHelp : : createConnection ( QString dbFile )
- {
- connection = QSqlDatabase : : addDatabase ( "QSQLITE" ) ;
- connection . setDatabaseName ( dbFile ) ;
- if ( ! connection . open ( ) ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "ERROR" ) ;
- msgBox . setMessage ( "Cannot open database :" + dbFile ) ;
- }
- }
- void SqlHelp : : closeConnection ( )
- {
- if ( connection . isOpen ( ) ) {
- connection . close ( ) ;
- }
- }
- void SqlHelp : : createDb ( QString dbFile )
- {
- Q_ASSERT ( dbFile . isEmpty ( ) = = false ) ;
- connection = QSqlDatabase : : addDatabase ( "QSQLITE" ) ;
- connection . setDatabaseName ( dbFile ) ;
- if ( ! connection . open ( ) ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "ERROR" ) ;
- msgBox . setMessage ( "Cannot open database :" + dbFile ) ;
- }
- }
- void SqlHelp : : deleteDb ( )
- {
- }
- QVector < QString > SqlHelp : : getAllTableName ( )
- {
- / *
- SQLite数据库中一个特殊的表叫 sqlite_master,sqlite_master的结构。
- CREATE TABLE sqlite_master (
- type TEXT ,
- name TEXT ,
- tbl_name TEXT ,
- rootpage INTEGER ,
- sql TEXT
- ) ;
- 我们可以通过查询这个表来获取数据库所有的表名:
- SELECT name FROM sqlite_master WHERE type = ' table ' ORDER BY name ;
- * /
- QVector < QString > result ;
- QString sqlStr = "SELECT name FROM sqlite_master WHERE type='table' ORDER BY name" ;
- QSqlQuery query ( connection ) ;
- if ( ! query . exec ( sqlStr ) ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "ERROR" ) ;
- msgBox . setYesVisible ( false ) ;
- lastSqlString = sqlStr ;
- lastErrorText = query . lastError ( ) . text ( ) ;
- msgBox . setMessage ( "SQL string :" + lastSqlString + "\n" + "Error text:" + lastErrorText ) ;
- msgBox . exec ( ) ;
- }
- / / 遍历表名
- while ( query . next ( ) ) {
- result . append ( query . value ( 0 ) . toString ( ) ) ;
- }
- return result ;
- }
- / * *
- * @brief SqlHelp : : createTable 创建表
- * @param tableName 表名称
- * @param fdNameTypePairs 字段名,字段值类型对。比如表字段为 id,name,类型分别为int primary key , varchar
- * 那么 fdNameTypePairs 数组的值依次设置为 "id" , "int primary key" , "name" , "varchar"
- * /
- void SqlHelp : : createTable ( QString tableName , QVector < QString > fdNameTypePairs )
- {
- / * *
- QVector < QString > fdDeclareList ;
- fdDeclareList < < "id" < < "int primary key" ;
- fdDeclareList < < "name" < < "varchar" ;
- fdDeclareList < < "color" < < "varchar" ;
- fdDeclareList < < "picture" < < "varchar" ;
- fdDeclareList < < "barcode" < < "int" ;
- fdDeclareList < < "stage" < < "varchar" ;
- h . createTable ( "recipe" , fdDeclareList ) ;
- * /
- / / query1 . exec ( "create table student (id int primary key, name varchar(20))" ) ;
- / / 检查表是否已存在
- QVector < QString > existTables = getAllTableName ( ) ;
- if ( existTables . indexOf ( tableName ) > = 0 ) {
- return ;
- }
- QString createStr = "create table " + tableName ;
- QString nameTypeStr ;
- if ( fdNameTypePairs . count ( ) % 2 ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "Error" ) ;
- msgBox . setMessage ( "fdNameTypePairs count error" ) ;
- msgBox . exec ( ) ;
- }
- for ( int i = 0 ; i < fdNameTypePairs . count ( ) ; i + = 2 ) {
- nameTypeStr + = fdNameTypePairs . at ( i ) + " " + fdNameTypePairs . at ( i + 1 ) + "," ;
- }
- nameTypeStr = nameTypeStr . mid ( 0 , nameTypeStr . length ( ) - 1 ) ; / / remove last ","
- QString sqlStr = createStr + " (" + nameTypeStr + ")" ;
- execSql ( sqlStr ) ;
- }
- / * *
- * @brief SqlHelp : : deleteTable 删除表
- * @param tableName
- * /
- void SqlHelp : : deleteTable ( QString tableName )
- {
- QString sqlStr = "drop table " + tableName ;
- execSql ( sqlStr ) ;
- }
- / * *
- * @brief SqlHelp : : addRecord 向表中添加一条记录
- * @param tableName 操作的表名
- * @param fdNameValuePairs 字段名,字段值对。比如添加项为 id = 1 name = "zhangshan"
- * 那么fdNameValuePairs数组的值依次设置为 "id" , "1" , "name" , "'zhangshan'" , 注意字符串类型的值要加上 '
- * /
- void SqlHelp : : addRecord ( QString tableName , QVector < QString > fdNameValuePairs )
- {
- / / INSERT INTO table_name ( 列1 , 列2 , . . . ) VALUES ( 值1 , 值2 , . . . . )
- / / QString ( "INSERT INTO %1 ( %2 ) VALUES ( %3 )" ) . arg ( tableName ) . arg ( nameStr ) . arg ( valueStr ) ;
- if ( fdNameValuePairs . count ( ) % 2 ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "Error" ) ;
- msgBox . setMessage ( "fdNameValuePairs count error" ) ;
- msgBox . exec ( ) ;
- return ;
- }
- QVector < QString > names ;
- QVector < QString > values ;
- for ( int i = 0 ; i < fdNameValuePairs . count ( ) ; i + = 2 ) {
- names . append ( fdNameValuePairs . at ( i ) ) ;
- values . append ( fdNameValuePairs . at ( i + 1 ) ) ;
- }
- QString nameStr ;
- QString valueStr ;
- / / 拼接 name
- for ( int i = 0 ; i < names . count ( ) ; + + i ) {
- nameStr + = names . at ( i ) + "," ;
- }
- nameStr = nameStr . mid ( 0 , nameStr . length ( ) - 1 ) ; / / remove last ","
- / / 拼接 value
- for ( int i = 0 ; i < values . count ( ) ; + + i ) {
- valueStr + = values . at ( i ) + "," ;
- }
- valueStr = valueStr . mid ( 0 , valueStr . length ( ) - 1 ) ; / / remove last ","
- / / sqlStr = actionStr + " (" + nameStr + ") VALUES (" + valueStr + ")" ;
- QString sqlStr = QString ( "INSERT INTO %1 ( %2 ) VALUES ( %3 )" ) . arg ( tableName ) . arg ( nameStr ) . arg ( valueStr ) ;
- execSql ( sqlStr ) ;
- }
- void SqlHelp : : delRecord ( QString tableName , QString condition )
- {
- / / DELETE FROM 表名称 WHERE 列名称 = 值
- QString sqlStr ;
- if ( condition . isEmpty ( ) ) {
- sqlStr = QString ( "DELETE FROM %1" ) . arg ( tableName ) ;
- } else {
- sqlStr = QString ( "DELETE FROM %1 WHERE %2" ) . arg ( tableName ) . arg ( condition ) ;
- }
- execSql ( sqlStr ) ;
- }
- void SqlHelp : : setRecord ( QString tableName , QVector < QString > fdNameValuePairs , QString condition )
- {
- / / 参数说明
- / / condition为空时,应用到所有列
- / / 返回值
- / / 更新某一行中的若干列
- / / UPDATE Person SET Address = ' Zhongshan 23 ' , City = ' Nanjing ' WHERE LastName = ' Wilson '
- / / QString ( "UPDATE %1 SET %2 WHERE %3" ) . arg ( tableName ) . arg ( nameValueStr ) . arg ( condition ) ;
- QString nameValueStr ;
- if ( fdNameValuePairs . count ( ) % 2 ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "Error" ) ;
- msgBox . setMessage ( "fdNameValuePairs count error" ) ;
- msgBox . exec ( ) ;
- return ;
- }
- QVector < QString > names ;
- QVector < QString > values ;
- for ( int i = 0 ; i < fdNameValuePairs . count ( ) ; i + = 2 ) {
- names . append ( fdNameValuePairs . at ( i ) ) ;
- values . append ( fdNameValuePairs . at ( i + 1 ) ) ;
- }
- / / 拼接 name = value
- for ( int i = 0 ; i < names . count ( ) ; + + i ) {
- nameValueStr + = names . at ( i ) + " = " + values . at ( i ) + "," ;
- }
- nameValueStr = nameValueStr . mid ( 0 , nameValueStr . length ( ) - 1 ) ; / / remove last ","
- QString sqlStr ;
- if ( condition . isEmpty ( ) ) {
- sqlStr = QString ( "UPDATE %1 SET %2 " ) . arg ( tableName ) . arg ( nameValueStr ) ;
- } else {
- sqlStr = QString ( "UPDATE %1 SET %2 WHERE %3" ) . arg ( tableName ) . arg ( nameValueStr ) . arg ( condition ) ;
- }
- execSql ( sqlStr ) ;
- }
- QVector < QString > SqlHelp : : getFirstRecord ( QString tableName , QVector < QString > fdNames , QString condition )
- {
- / / condition为空时,应用到所有列
- / / SELECT LastName , FirstName FROM Persons
- QVector < QString > fdValues ;
- QString nameStr = vectorToString ( fdNames , "," ) ;
- QString sqlStr ;
- if ( condition . isEmpty ( ) ) {
- sqlStr = QString ( "SELECT %1 FROM %2 " ) . arg ( nameStr ) . arg ( tableName ) ;
- } else {
- sqlStr = QString ( "SELECT %1 FROM %2 WHERE %3" ) . arg ( nameStr ) . arg ( tableName ) . arg ( condition ) ;
- }
- QSqlQuery query ( connection ) ;
- if ( ! query . exec ( sqlStr ) ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "ERROR" ) ;
- msgBox . setYesVisible ( false ) ;
- lastSqlString = sqlStr ;
- lastErrorText = query . lastError ( ) . text ( ) ;
- msgBox . setMessage ( "SQL string :" + lastSqlString + "\n" + "Error text:" + lastErrorText ) ;
- msgBox . exec ( ) ;
- }
- if ( query . first ( ) ) {
- for ( int i = 0 ; i < fdNames . count ( ) ; + + i ) {
- fdValues . append ( query . value ( i ) . toString ( ) ) ;
- }
- return fdValues ;
- }
- return fdValues ;
- }
- void SqlHelp : : showTableUI ( QString tableName )
- {
- QSqlTableModel * model = new QSqlTableModel ( ) ;
- model - > setTable ( tableName ) ;
- model - > select ( ) ;
- / / 设置编辑策略
- model - > setEditStrategy ( QSqlTableModel : : OnManualSubmit ) ;
- QTableView * tableView = new QTableView ( ) ;
- tableView - > setModel ( model ) ;
- MessageDialog msgBox ;
- msgBox . setTitle ( tableName ) ;
- msgBox . setWorkUI ( tableView ) ;
- msgBox . exec ( ) ;
- delete tableView ;
- delete model ;
- }
- void SqlHelp : : execSql ( const QString sqlStr )
- {
- if ( ! connection . isOpen ( ) ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "ERROR" ) ;
- msgBox . setMessage ( "connection is not open" ) ;
- msgBox . exec ( ) ;
- return ;
- }
- QSqlQuery query ( connection ) ;
- if ( ! query . exec ( sqlStr ) ) {
- MessageDialog msgBox ;
- msgBox . setTitle ( "ERROR" ) ;
- msgBox . setYesVisible ( false ) ;
- lastSqlString = sqlStr ;
- lastErrorText = query . lastError ( ) . text ( ) ;
- msgBox . setMessage ( "SQL string :" + lastSqlString + "\n" + "Error text:" + lastErrorText ) ;
- msgBox . exec ( ) ;
- }
- }
- QString SqlHelp : : getLastSqlString ( ) const
- {
- return lastSqlString ;
- }
- QString SqlHelp : : getLastErrorText ( ) const
- {
- return lastErrorText ;
- }
- QString SqlHelp : : vectorToString ( const QVector < QString > & list , QString split ) const
- {
- QString result ; / / 转化成val1 , val2 , val3
- for ( int i = 0 ; i < list . count ( ) ; + + i ) {
- result + = list . at ( i ) + split ;
- }
- int index = result . lastIndexOf ( split ) ;
- result . remove ( index , split . length ( ) ) ;
- return result ;
- }
- void SqlHelp : : testCase ( )
- {
- QString tableName = "recipe" ;
- createDb ( "test.db" ) ;
- / / h . deleteTable ( "recipe" ) ;
- QVector < QString > fdDeclareList ;
- fdDeclareList < < "id" < < "INTEGER PRIMARY KEY autoincrement" ;
- fdDeclareList < < "name" < < "varchar" ;
- fdDeclareList < < "color" < < "varchar" ;
- fdDeclareList < < "picture" < < "varchar" ;
- fdDeclareList < < "barcode" < < "int" ;
- fdDeclareList < < "stage" < < "varchar" ;
- createTable ( tableName , fdDeclareList ) ;
- for ( int i = 0 ; i < 10 ; + + i ) {
- QVector < QString > fdDeclareList ;
- / / fdDeclareList < < "id" < < QString : : number ( i ) ;
- fdDeclareList < < "name" < < QString ( "'name%1'" ) . arg ( i ) ;
- fdDeclareList < < "color" < < QString ( "'ff000%1'" ) . arg ( i ) ;
- fdDeclareList < < "picture" < < QString ( "'picture%1'" ) . arg ( i ) ;
- fdDeclareList < < "barcode" < < QString ( "20181219000000%1" ) . arg ( i ) ;
- fdDeclareList < < "stage" < < QString ( "'stage%1'" ) . arg ( i ) ;
- addRecord ( "recipe" , fdDeclareList ) ;
- TRACE_MSG ( i ) ;
- }
- / / h . delRecord ( tableName , "1=1" ) ;
- QVector < QString > fdNameValuePair2 ;
- fdNameValuePair2 < < "barcode" < < "1" ;
- setRecord ( tableName , fdNameValuePair2 , "1=1" ) ;
- showTableUI ( tableName ) ;
- QVector < QString > fdNames ;
- fdNames < < "id" < < "name" ;
- TRACE_MSG ( getFirstRecord ( tableName , fdNames , "" ) ) ;
- }
以上所述就是小编给大家介绍的《QT SQLite 辅助库》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pattern Recognition and Machine Learning
Christopher Bishop / Springer / 2007-10-1 / USD 94.95
The dramatic growth in practical applications for machine learning over the last ten years has been accompanied by many important developments in the underlying algorithms and techniques. For example,......一起来看看 《Pattern Recognition and Machine Learning》 这本书的介绍吧!