android 中SQliteDatabase数据库使用SQLiteOpenHelper辅助类来创建SQLite数据库视图,如下代码:
1
create view 表名 as 定义
SQLiteOpenHelper类是一个辅助类,用于创建或打开数据库。
该类的使用方法一般是自定义一个子类,继承自SQLiteOpenHelper,并覆写其中最关键的两个方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。当新建一个数据库时会调用前者,一般在里面做一些创建表或视图的 *** 作。数据库版本升级时则会调用后者。
定义好子类后(假如叫SqlHelper),只要调用SqlHelper对象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一个SQLiteDatabase对象。如果是第一次调用,则会创建数据库。随后可使用SQLiteDatabase对象的方法进行数据 *** 作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。
PS:通过该方法创建的数据库存放的目录是固定的,其路径为/data/data/packageName/databases/。
这里以学生信息的录入与读取来作为演示,主要目的是演示数据库的 *** 作,至于数据的显示等不在演示范围内,请您自行研究。
首先,在Qt中建立一个图形界面的程序项目。
然后,我们在命令行下用sqlite命令创建了数据库 C:\StudentInfo\sutdentdatadb,并且建立了一个数据库表student,该表有四个字段ID、Name、Sex、Age,未向表中添加任何数据。
关于sqlite的简单使用,可以参考我们的另一篇经验。
2SQLite的简单使用方法
在读写SQLite数据库中,我们最主要用到的是QSqlDatabase类及QSqlQuery类,前者负责创建数据库连接并打开数据库,后者负责执行查询 *** 作。实际上前者也可以进行查询 *** 作并将结果返回给QSqlQuery对象,但是Qt并不建议这么做。
在干活前,依然是先看看Assitant,这是培养独立解决问题的一个好习惯。
好,下面给 录入 按钮的点击事件编写代码。关于如何给按钮的某一事件进行编码,可以参考我们另一篇经验。
首先在pro文件中加上sql,然后别忘了#include <QSqlDatabase>以及#include <QSqlQuery>。
好了,下面在录入按钮的槽中加入如下代码:
QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE","wconntosqlite");
mydbsetDatabaseName("c:\\StudentInfo\\studentdatadb");
if(mydbopen())
{
QSqlQuery query(mydb);
QString sqlstr="insert into student (ID,Name,Sex,Age) values ('"
+ui->le_id->text()+"','"
+ui->le_name->text()+"','"
+ui->le_sex->text()+"',"
+ui->le_age->text()+")";
bool isok=queryexec(sqlstr);
if(isok)
qDebug()<<"数据写入成功";
}
上面我们先调用了QSqlDatabase的静态函数addDatabase创建了一个名为wconntosqlite的连接。然后给其传递数据库名称。
如果数据库打开成功,就创建一个关联的QSqlQuery对象,最后由QSqlQuery来执行插入数据工作。
特别注意:QSqlQuery对象的创建必须在mydb open成功以后才行,否则会出错。
我们来看看效果如何。
4c++怎么做界面
我们接着来写查询按钮的代码,输入以下代码:
QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE","rconntosqlite");
mydbsetDatabaseName("c:\\StudentInfo\\studentdatadb");
if(mydbopen())
{
QSqlQuery query(mydb);
QString sqlstr="select from student";
bool isok=queryexec(sqlstr);
if(isok)
qDebug()<<"数据读取成功";
queryfirst();
QString result="学号:"+queryvalue(0)toString()+" "
+"姓名:"+queryvalue(1)toString()+" "
+"性别:"+queryvalue(2)toString()+" "
+"年龄:"+queryvalue(3)toString();
ui->lbl_query->setText(result);
}
与写入数据基本差不多,这里需要特别注意的是queryfirst();。看看Assistant怎么说的就知道了。原来,query对象在执行完查询语句后,query的位置被置于一个不可用的位置,如果想从query中获取数据,需要设置query到一个可用的记录中才行。方法有好几种,这里我们用了first()成员函数。
好,来看看运行结果。
可以看到软件读取的数据与控制台窗口的数据是一致的。
我们来总结下Qt *** 作SQLite数据库的五步走法决:
第一步,建立一个连接:QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
第二步,关联数据库文件:dbsetDatabaseName("这里你的数据库文件路径")
第三步,打开数据库:dbopen()
第四步,如果数据库打开成功,就建立一个相关联的QSqlQuery对象:QSqlQuery query(db)
第五步,执行SQL语句:queryexec("你的SQL语句字符串")
1 说明 这里我们假设你已经编译好了sqlite的库文件 : libsqlite3a libsqlite3la libsqlite3so libsqlite3so0 libsqlite3so086 pkgconfig 和可执行文件 : sqlite3 我们再假设你的sqlite3的安装目录在 /usr/local/sqlite3 目录下。 如果不是,我们可以这样做,将你的安装文件复制到 /usr/local/sqlite3 这个目录, 这样我们好在下面的 *** 作中更加统一,从而减少出错的概率 例如:[root@localhost home]# cp -rf sqlite-338-ix86/ /usr/local/sqlite3 这里假设 /home/sqlite-338-ix86/ 是你的安装目录,也就是说你的sqlite原来就是安装在这里 这样之后,我们的sqlite3的库文件目录是:/usr/local/sqlite3/lib 可执行文件 sqlite3 的目录是: /usr/local/sqlite3/bin 头文件 sqlite3h 的目录是: /usr/local/sqlite3/include 好拉,现在开始我们的Linux下sqlite3编程之旅。 2 开始 这里我们现在进行一个测试。 现在我们来写个C/C++程序,调用 sqlite 的 API 接口函数。 下面是一个C程序的例子,显示怎么使用 sqlite 的 C/C++ 接口 数据库的名字由第一个参数取得且第二个参数或更多的参数是 SQL 执行语句 这个函数调用sqlite3_open() 在 16 行打开数据库,并且sqlite3_close() 在 25 行关闭数据库连接。 [root@localhost temp]# vi opendbsqlitec 按下i 键切换到输入模式,输入下列代码:// name: opendbsqlitec // This prog is used to test C/C++ API for sqlite3It is very simple,ha! // Author : zieckey All rights reserved // data : 2006/11/13 #include <stdioh> #include <sqlite3h> int main( void ) { sqlite3 db=NULL; char zErrMsg = 0; int rc; //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 rc = sqlite3_open("zieckeydb", &db); if( rc ) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("You have opened a sqlite3 database named zieckeydb successfully! Congratulations! Have fun ! ^-^ "); sqlite3_close(db); //关闭数据库 return 0; } 退出,保存。(代码输入完成后,按下 Esc 键,然后输入: :wq ,回车就好拉) 好拉,现在编译:[root@localhost temp]# gcc opendbsqlitec -o dbout 或者遇到这样的问题:[root@localhost temp]# gcc opendbsqlitec -o dbout opendbsqlitec:11:21: sqlite3h: 没有那个文件或目录 opendbsqlitec: In function `main': opendbsqlitec:19: `sqlite3' undeclared (first use in this function) opendbsqlitec:19: (Each undeclared identifier is reported only once opendbsqlitec:19: for each function it appears in) opendbsqlitec:19: `db' undeclared (first use in this function) 这是由于没有找到头文件的原因。 也许会碰到类似这样的问题:[root@localhost temp]# gcc opendbsqlitec -o dbout /tmp/ccTkItnNo(text+0x2b): In function `main': : undefined reference to `sqlite3_open' /tmp/ccTkItnNo(text+0x45): In function `main': : undefined reference to `sqlite3_errmsg' /tmp/ccTkItnNo(text+0x67): In function `main': : undefined reference to `sqlite3_close' /tmp/ccTkItnNo(text+0x8f): In function `main': : undefined reference to `sqlite3_close' collect2: ld returned 1 exit status 这是个没有找到库文件的问题。 下面我们着手解决这些问题。
以上就是关于如何通过Android SQLiteDatabase 创建SQLite数据库视图全部的内容,包括:如何通过Android SQLiteDatabase 创建SQLite数据库视图、怎样在Qt下连接读写sqlite数据库、如何在Linux下用C/C++语言 *** 作数据库sqlite3等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)