SQLite的基本使用说明

上传人:re****.1 文档编号:562539694 上传时间:2023-11-24 格式:DOCX 页数:5 大小:15.95KB
返回 下载 相关 举报
SQLite的基本使用说明_第1页
第1页 / 共5页
SQLite的基本使用说明_第2页
第2页 / 共5页
SQLite的基本使用说明_第3页
第3页 / 共5页
SQLite的基本使用说明_第4页
第4页 / 共5页
SQLite的基本使用说明_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《SQLite的基本使用说明》由会员分享,可在线阅读,更多相关《SQLite的基本使用说明(5页珍藏版)》请在金锄头文库上搜索。

1、I.SQLite里面的一些基本的操作:1) 数据库的创建2) 表的创建3) 基本的SQL语句的执行4) 数据操作的并发问题2、SQLite的一些类的使用及说明:1) CppSQLite3Table2) CppSQLite3Query3) CppSQLite3Buffe4) CppSQL it e3Exception5) CppSQLiteBinary6) CppSQLite3StatementI.SQLite里面的一些基本的操作:1) 数据库的创建:const char* gszFile = C:test.db;/数据库路径CppSQLite3DB db;remove(gszFile);/清除

2、当前路径的文件db.open(gszFile);/如果数据库存在,则打开数据库,不存在,则创建数据库2) 表的创建:在表创建之前,要先进行检测该表是否存在,来避免出现错误:db.tableExists(emp);/返回true则为该表已存在,false为不存在当不存在同名的表,才进行创建db.execDML(create table emp(empno int, empname char(20););创建完成后,同样可利用db.tableExists(emp)来进行判断,创建是否成功。3) 基本的SQL语句的执行:一般我们通过SQLite里面的execDML来执行SQL语句:db.execDM

3、L(update emp set numcalls = 10 where dayno = 1;);在进行增删改等涉及更新数据的操作时,最好是放在事务里面进行操作,一是有效的锁 定数据库的使用状态,二是可以进行回滚操作。如:db.execDML(begin transaction;);db.execDML(update emp set numcalls = 10 where dayno = 1;); db.execDML(comm it transaction;);4) 数据操作的并发问题SQLite可以允许多个用户或者线程同时执行查询操作,但最多却只允许一个用户在某 一个时段进行数据更新操作。

4、因此,我们在操作数据库的过程中,为了不排除数据库被其他 的用户或者线程所占用,我们在使用的过程中,利用tryCatch来进行捕捉异常,来避 免数据库被占用而导致的错误。tryint nRows = db.execDML(update emp set numcalls = 100 where dayno = 1;);cout Main thread: updated nRows rows endl;catch (CppSQL i te3Exception & e)cout Main thread: e.errorCode() : e.errorMessage() endl;2、SQLite的一些

5、类的使用及说明:1) CppSQLite3Table:CppSQLite3Table是一个SQLite提供的用来专门存放一个完整的表结构,我们也可 以通过CppSQLite3Table里面的一些方法和函数去读取这个表里面的内容。CppSQL it e3Table t = db.getTable(select * from emp;);t.numFields();/返回表里面的总列数t.fieldName(fld);/返回表里面第fld列的列名t.numRows();/返回表里面的总行数t.setRow(i);/i为所在表的第几行t.fieldlsNull(field);/判断第几列是否为空,f

6、ield是指该行的第几列数据t.fieldValue(field);/读取第i行里面的第field列数据例子:CppSQL it e3Table t = db.getTable(select * from emp order by 1;);for (fld = 0; fld t.numFields(); fld+)cout t.fieldName(fld) |;cout endl;for (int row = 0; row t.numRows(); row+)t.setRow(row);for (int fld = 0; fld t.numFields(); fld+)if (!t.field

7、IsNull(fld)cout t.fieldValue(fld) |;elsecout NULL |;cout endl;2) CppSQLite3Query:CppSQLite3Query是SQLite里面用来存放查询的返回结果CppSQLite3Query q = db.execQuery(select * from emp order by 1;); q.numFields();/返回这个数据集的总列数 q.fieldName(fld);/返回第 fld 列的列名q.fieldDeclType(fld);/返回第fld列的的数据类型q.fieldValue(O);/返回某一行的第0列的

8、数据q.nextRow();/指向数据集当前行的下一行q.eof();/判断当前行是否为空例子:CppSQL i te3Query q = db.execQuery(select * from emp order by 1;);for (fid = 0; fid q.numFields(); fld+)cout q.fieldName(fld) ( q.fieldDeclType(fld) )|;cout endl;while (!q.eof()cout q.fieldValue(O) ;cout q.fieldValue(1) endl;q.nextRow();3) CppSQLite3Bu

9、ffer:CppSQLite3Buffer是SQLite里面提供的一个可包含特殊字符的字符串类型。比如在 我们以前的程序中的SQL语句中,SQL语句里面涉及到单引号的情况:CString str;str.Append( select * from table where uid = str.Append(m_id);str.Append(,”);有时候显得特别不方便,但是在SQLite里面,通过它提供的这个类型,我们可以这样 使用:CppSQLite3Buffer bufSQL;bufSQL.format(insert into emp(empno, empname) values (%Q,%

10、Q);, no, name);db.execDML(bufSQL);4) CppSQLite3Exception:CppSQLite3Exception是SQLite里面提供给我们进行捕获异常错误消息的类。可以 捕获在我们使用SQLite的过程中出现的异常错误例如:trycatch (CppSQL it e3Exception & e)cout e.errorCode() : e.errorMessage() endl;5) CppSQLiteBinary:CppSQLite3Binary可以一些包含空格符、回车符的一些数据转换成相应的二进制数 据和编码进行保存和读取,来保证这条数据的完整性。

11、可以通过setEncoded()和setBinary()方法来对数据进行转换。通过getEncoded() and getBinary()方法来进行获取数据。通过getBinaryLength()来获取数据的长度。例子:unsigned char bin256;CppSQLite3Binary blob;for (i = 0; i sizeof bin; i+) bini = i;blob.setBinary(bin, sizeof bin);bufSQL.format(insert into bindata values (testing, %Q);, blob.getEncoded();d

12、b.execDML(bufSQL);cout Stored binary Length: sizeof bin endl;q = db.execQuery(select data from bindata where desc = testing;);if (!q.eof()blob.setEncoded(unsigned char*)q.fieldValue(data); cout Retrieved binary Length: blob.getBinaryLength() endl;q.finalize();6) CppSQLite3Statement:如果要插入多条SQL语句,但这些S

13、QL语句又仅仅只是插入的数据不一样,格式都 是一样的话,那么就可以用这个CppSQLite3Statement来进行保存模版,然后只用往这 个模版里面赋予不同的值,然后进行执行就可以。例如:db.execDML(begin transaction;);CppSQL it e3Statement stmt = pileStatement(insert into emp values (?, ?););for (i = 0; i nRowsToCreate; i+)char buf16;sprintf(buf, EmpName%06d, i);stmt.bind(1, i);stmt.bind(2

14、, buf);stmt.execDML(); stmt.reset();db.execDML(comm it transaction;);SQLite嵌入式数据库使用注意:1、在对SQLite嵌入式数据库使用时,首先要进行判断,判断存放SQLite数据库的文件 是否存在,然后再进行操作。同样,对SQLite数据库里面的表进行操作时,也要先进 行检测,检测表是否存在。db.open(gszFile);/如果数据库存在,则打开数据库,不存在,则创建数据库db.tableExists(emp);/返回true则为该表已存在,false为不存在2、任何对数据进行更新操作的SQL语句,执行时,一定要放在事务里面进行操作。使用 事务,一方面有利于数据回滚,另一方面可对数据库进行独占式操作。SQLite数据库 允许多个用户同时进行读操作,但最多却只允许一个用户在某一时刻对数据库进行更新 操作和多个用户进行读操作。db.execDML(begin transaction;);db.execDML(update emp set numcalls = 10 where dayno = 1;); db.exec

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号