QSqlDabase db = QSqlDabase::addDatabase(“QSQLITE”);
db.setHostName(“XXX”); //设置主机名
db.setDabaseName(“XXX”);//设置数据库名
db.setUserName(“XXX”);//设置用户名
db.setPassword(“XXX”);//设置密码
if(!db.open())//打开数据库连接
{
}
上面的第一行中”QSQLITE”是对应数据库的驱动名称,也就说访问不同的数据库对应的驱动是不一样的。通常可以通过以下代码:
QStringList drivers = QSqlDabase::drivers();
Foreach(QString driver,drivers)
这样就可以知道自己版本的qt有几种不同的驱动。我的版本是Qt5.3,下面是在帮助文档看到Qt支持的所有驱动。例如我们常见的access数据库对应的是QODBC,MySql的驱动是QMYSQL,Oracle数据的驱动是QOCI。
现在我们要了解一个数据库,就是上面例子”QSQLITE”所对应的数据库。它所连接的是SQLite数据库,是一种轻型的文件型数据库,主要应用于嵌入式领域而且支持跨平台,Qt的默认数据连接就是SQlite数据。SQlite没有对应的数据库系统,它通过我们写的代码直接编译可生成这样的一个数据库文件。例如上面的代码执行完后QSqlDabase db = QSqlDabase::addDatabase(“QSQLITE”);
db.setHostName(“XXX”); //设置主机名
db.setDabaseName(“XXX”);//设置数据库名
db.setUserName(“my.db”);//设置用户名
db.setPassword(“XXX”);//设置密码
if(!db.open())//打开数据库连接
{
}
就在我们编译生成Debug文件夹看到一个my.db的文件。
For the QOCI (Oracle) driver, the database name is the TNS Service Name.
For the QODBC driver, the
For example, Microsoft Access users can use the following connection string to open an
...
db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
}
...
上面就是说如果采用QOCI驱动,那么database的name要使用TNS服务的名称。而如果采用QODBC驱动,那么database的name就要采用DNS名称或者连接字符串这两种方式。这里的name就是指void QSqlDatabase::setDatabaseName(const QString & name)里面这个name参数。然后它给出了采用连接字符串这种方法的例子就是上面那段代码,其中最关键的就是这句:
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
如果你本地的access文件是file.mdb,那么只要把上面DBQ=后面的这个换成你自己的文件,
DBQ = file.mdb,其他都相同,这样就能成功连接你本地的access数据库了。到这里虽然能实现预期的目的,但总感觉一头雾水,我本身对数据库的了解也仅次于那些sql语句,上面连接字符串的其他部分代表什么含义,ODBC是什么东西,还有另外一种方法中提到的DSN是什么东西都不知道,所以花了一段时间在网上查找相关资料,终于大致了解ODBC,DNS还有应用程序连接数据库之间的过程原理等。
在百科上ODBC是这样定义的:开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这样讲很抽象,为了弄懂它来看这张在网上找的图,如下图中应用层就是指我们的应用程序,数据层就是我们要访问的数据库了,所以你可以简单把ODBC当作桥梁。ODBC管理器是关键的组成,ODBC管理器不是属于应用层,也不是属于数据层,也就是说这个ODBC管理器不属于Qt的范畴,也不属于Access,它是基于windows系统的一个ODBC部分。它是用来管理不同的数据源,应用程序要访问数据库,首先必须在ODBC管理器创建一个数据源。
也就是我们在ODBC管理器设置一些内容后,ODBC管理器就会帮我们把应用层和数据库之间的道路打通,至于它是怎么打通的,那就是微软提供的ODBC中的内容,我们不必知道也没办法知道,那么ODBC管理器应该设置一些什么东西呢?其实就是设置数据源。
点击添加按钮,出现一个驱动对话框,选择access对应的驱动如图然后点击完成后出现一个对话框,看到了吗有一个光标处就是填写数据源名称也就是DSN,例如我填的是connectDatabase,然后点击数据库连接弹出一个选择数据库对话框,之后我们在目录选择我们要连接的数据库文件的路径,然后点击确定,那么ODBC管理器就帮助我们把应用程序和数据库连接了,此时记住这个数据源名connectDatabase,然后回到上面QSqlDatabase::setDatabaseName属性,大致代码如下:
QSqlDabase db = QSqlDabase::addDatabase(“QODBC”);//选择QODBC驱动
db.setDabaseName(“connectDatabase”);//设置数据库名,我们自己起的数据源名
if(!db.open())//打开数据库连接
{
}