linux qt mysql

 

Linux下完整的MySQL开发需要安装服务器端,如果安装客户端也没什么不好。

  环境说明:

  ubuntu 10.04.2

  QtSDK (1.5G安装包的那个)

  mysql5.1

  1.安装MySQL

  Linux下完整的MySQL开发需要安装服务器端,如果安装客户端也没什么不好。直接在软件中心搜mysql,把client和server选上。

  server在安装时会提示为root用户设置密码,设一个好了。

  我使用的是mysql5.1版本,用户名密码存储在一个叫mysql的数据库里,只有管理员级别才能看到。

  如果直接在终端中输入 mysql,可能会提示ERROR 1045 (28000),这是因为这时候你是以自己用户名访问数据库,而目前数据库中只有一个root用户。没关系,如果有必要,可以添加一个用户进去:

  mysql -uroot -p -->以root用户登录,

  grant usage on *.* to dummy@localhost; -->授权名为dummy的用户本地登录,这里换成自己的用户名就可以了。

  不过这时候直接mysql只有普通的权限,创建数据库、操作mysql都是不可以的,如果真有将其赋予管理员权限的需要,可以自己查阅有关资料。

  2.安装Qt的MySQL驱动

  方法一:直接sudo apt-get install libqt4-sql-mysql ,这是Qt4的mysql驱动,就不用自己费劲编译了,不过可能会额外下载一些东西。

  将 /usr/lib/qt4/plugins/sqldrivers/libqsqlmysql.so拷贝到你的QtSDK sqldrivers目录下,我当时是直接用普通权限安装,目录为:~/QtSDK/Desktop/Qt/473/gcc/plugins/sqldrivers。

  方法二:其实你也可以sudo apt-get download libqt4-sql-mysql,把包解压缩,然后把里面的so文件搜出来直接拷贝到那里。

  方法三:乖乖按照官方方法编译,但是貌似可行性不大,因为新版本的QtSDK并没有src目录,默认也没有mysql的驱动。

  3.做个demo试一下

  记得在pro文件中 QT +=那里加上sql,否则qmake是不会去找sql的相关部分的。

  #include

  #include

  #include

  int main(int argc, char *argv[])

  {

  QCoreApplication a(argc, argv);

  QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");

  db.setHostName("localhost");

  db.setDatabaseName("study");

  db.setUserName("root");

  db.setPassword("tyh");

  if(!db.open()){

  qDebug()<<"Unable to open database";

  }else{

  qDebug()<<"Database connection established";

  }

  return a.exec();

  }

  这里study这个数据库之前我已经创建过了,如果连接成功,就会显示Database connection established。 我是建立的控制台程序哈。

二:

1.安装unix/ODBC驱动程序

2.重新编译qt/src/plugins/sql drivers/mysql,生成一个so文件,放在QT安装目录下的plugins/sql drivers文件夹下

3.QT编写程序,代码如下

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

  db.setHostName("192.168.1.15");  db.setDatabaseName("test");  db.setUserName("root");  db.setPassword("linqinong");  bool r = db.open();qDebug() << db.isOpen();  if (r) {ui->label->setText("MY SQL Server Connect OK!");  } else {ui->label->setText("no open");  }------------------------------------------------------为了确保QMYSQL驱动是否可用可以在main函数里添加以下代码int main(int argc, char *argv[]){  QApplication a(argc, argv);  Widget w;  w.setGeometry(0,0,320,240);  w.setWindowFlags(Qt::FramelessWindowHint);  w.show(); qDebug() << "Available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() << "\t" << driver; //QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //qDebug() << "ODBC driver valid?" << db.isValid(); //db = QSqlDatabase::addDatabase("QODBC");  return a.exec();}三: 1. #include <QtSql>     2. #include <QMessageBox>     3. #include <QTextStream>     22. out << id << ", " << type << ", " << data <<endl;     2.  #include <QtSql>  <TD style="BORDER-RIGHT: #f0f0f0; BORDER-TOP: #f0f0f0; BORDER-LEFT: #f0f0f0; BORDER-BOTTOM: #f0f0f0; HEIGHT: 14.25pt; BACKGROUND-COLOR: transparent" height=19 x:str="1. #include <QtSql> "> <TD style="BORDER-RIGHT: #f0f0f0; BORDER-TOP: #f0f0f0; BORDER-LEFT: #f0f0f0; BORDER-BOTTOM: #f0f0f0; HEIGHT: 14.25pt; BACKGROUND-COLOR: transparent" height=19 x:str="2. #include <QMessageBox> "> <TD style="BORDER-RIGHT: #f0f0f0; BORDER-TOP: #f0f0f0; BORDER-LEFT: #f0f0f0; BORDER-BOTTOM: #f0f0f0; HEIGHT: 14.25pt; BACKGROUND-COLOR: transparent" height=19 x:str="3. #include <QTextStream> "> <TD style="BORDER-RIGHT: #f0f0f0; BORDER-TOP: #f0f0f0; BORDER-LEFT: #f0f0f0; BORDER-BOTTOM: #f0f0f0; HEIGHT: 14.25pt; BACKGROUND-COLOR: transparent" height=19 x:str='22. out << id << ", " << type << ", " << data < <TD style="BORDER-RIGHT: #f0f0f0; BORDER-TOP: #f0f0f0; BORDER-LEFT: #f0f0f0; BORDER-BOTTOM: #f0f0f0; HEIGHT: 14.25pt; BACKGROUND-COLOR: transparent" height=19 x:str="2. #include <QtSql> ">
之前用 C 语言连了mysql数据库,因为项目毕竟是用QT包装的,还需要在qt的界面里显示,所以这一次就用QT来连一下mysql。
首先说一下我的电脑是ubuntu10.10;之前安装了QT的linux全部套件(包括QT creator),也安装了嵌入式qt的那三个编译环境(X11,X86,ARM),但是这一次我只用QT creatot里的qmake编译(以为之前编译完那三个环境后,我就把编译文件夹全删了)。
首先,安装mysql客户端(mysql-devel),和C语言连接一样,执行命令:
1. sudo apt-get install libmysqlclient-dev   
2. 或   
3. sudo apt-get install libmysqlclient15-dev  
因为我之前安装过,所以这一步就省略了。
然后,连接linux数据库肯定要有驱动,这个在qt的源码里就有:进入文件夹:
1. cd   QTDIR/src/plugins/sqldrivers/mysql                      //这就是qt存放mysql驱动源码的目录 
目录里应该有main.cpp 和moc_qsql_mysql.cpp两个文件
执行命令:

1

qmake  -project  //生成mysql.pro文件,可能这一步会说你没有权限,那么chmod给它权限就可以了  

2

qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/mysql -lmysqlclient_r" mysql.pro   

3

/usr/include/mysql   // mysql所有头文件所在的位置,mysql.h就在此处  

4

/usr/lib/mysql            //mysql库的位置 

然后,执行命令:
1. make  
2. sudo make install 
此时,在QTDIR/src/plugins/sqldrivers/mysql  这个目录下,就生成了一个文件:libqsqlmysql.so;把它拷贝到QTDIR/plugins/sqldrivers, 目录下面;
现在开始编程:随便建工程:加入如下代码:
4. QTextStream out(stdout);    
5. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");    
6. db.setHostName("localhost");    
7. db.setDatabaseName("test");    
8. db.setUserName("root");    
9. db.setPassword("****");    
10. if(!db.open())    
11. {    
12.  QMessageBox::critical(0,QObject::tr("Database Error"),db.lastError().text());    
13. return a.exec();    
14. }    
15. QSqlQuery query;    
16. query.exec("SELECT * FROM t_homedata");    
17. while(query.next())    
18. {    
19. QString id = query.value(0).toString();    
20.  QString type = query.value(1).toString();    
21. QString data = query.value(2).toString();    
23. }   
注意,这段代码,是我加入到工程中的,恩,我就放在main.cpp里;#include <QtSql>这个是必须的;#include <QTextStream>这个是用来进行控制台打印输出的,我的数据库名为test,中间有一个表叫t_homedata,表里有三个varchar型字段:其打印结果为:
1. 100010, 23, 32.45  
2. 100011, 12, 99  
3. 100012, 11, 35.10 
注意,再进行工程的编译和运行之前(恩,因为我的电脑里实际有4个qt编译环境,所以还需要再Qt creator的project选项里设置该项目的编译器,我的编译器设置为qt-opensource,即Qt  creator自带的,因为我之前所进行的mysql驱动编译也都是再Qt creator的安装目录里进行的),一定别忘了在工程的.pro文件里加上下面一行:
1. QT  += sql 
Qt 帮助文档里就是这么说的:
1. To include the definitions of the module's classes, use the following directive:  
3. To link against the module, add this line to your qmake .pro file:  
4.  QT += sql  
5. define DRIVER       "QMYSQL3"  /* see the Qt SQL documentation for a list of available drivers */  
6.  define DATABASE     ":dehua:" /* the name of your database */  
7.  define USER         "root"   /* user name with appropriate rights */  
8.  define PASSWORD     "password"   /* password for USER */  
9.  define HOST         "http://192.168.10.14" /* host on which the database is running */  
10.  bool ServerInfo::connMysql(int csID, QString msg)  
11.  {  
12.    MYSQL mysql;  
13.    char host[32]="localhost";  
14.    char user[32]="root";  
15.    char passwd[32]="password";  
16.    char dbname[32]="dehua";   
17.    QString sql;  
18
19.    if( mysql_init(&mysql) == NULL ) /*初始化数据结构*/  
20.    {  
21.      syslog(LOG_USER|LOG_INFO,"inital mysql handle error\n");  
22.      return FALSE;  
23.    }  
24.    if(mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL) /*连接数据库*/  
25.    {  
26.      syslog(LOG_USER|LOG_INFO, "Failed to connect to database: Error: %s\n",mysql_error(&mysql));  
27.      return FALSE;  
28.    }  
29
30.     msg.replace("'"," ");        //去掉单引号  
     sql=QString("insert into socRec(socketID,message) values(%1,'%2')")  
32.                                     .arg(csID)  
33.                                  .arg(msg); /*构造SQL语句*/  
34.     qWarning(sql);  
35.    if(mysql_query(&mysql,sql) != 0) /*执行SQL语句,进行检索数据*/  
36.    { /*执行SQL语句出错*/  
37.      syslog(LOG_USER|LOG_INFO, "select ps_info Error: %s\n",mysql_error(&mysql));  
38.      qWarning("false");  
39.    }  
40.    else  
41.    {  
42.      qWarning("true");  
43.    }  
44.  } 

你可能感兴趣的:(sql,linux,数据库,mysql,database,qt)