支持HW团队,就支付宝领取下面的红包吧!(2018年3月31前,就几毛,也会几块,可以和其他红包叠加使用),你领取消费,HW有奖励。红包使用无条件限制,有条件请注意是不是有病毒。

小伙伴们,给大家发红包喽!人人可领,领完就能用。祝大家领取的红包金额大大大!#吱口令#长按复制此消息,打开支付宝就能领取!er1OEj73Uj

登入 注册 | 验证
| 搜索
HelloWorld论坛 : > 计算机科学、技术、教学> 编程专题> 数据库> [原创]CppSQLite使用
 
 
 
 
类别:数据库 阅读:8073 评论:0 时间:六月 19, 2013, 3:13 p.m. 关键字:sqlite

 

 数据库和表的相关命令

1、列出所有的数据表: .tables

完成上面所有的工作以后,我们就可以列出所有的数据表了
 
2、显示数据库结构:.schema
其实就是一些 SQL 语句,他们描述了数据库的结构,如图
  
 
3、显示表的结构:.schema    表名
 
 

4、导出某个表的数据: .dump    表名

这时我们可以看到,整个表以 SQL 语句的形式为导出来了,但是只是显示在终端上,如何把它导出到文件中呢?
 
5、设置导出目标: 
.output     文件名  
或者
.output   stdout

 数据显示相关命令

1、设置分隔符:.separator    分隔符
我们可以首先运行 SELECT * FROM Names; ,可以看到默认的分隔符是 | 
运行.separator : 以后,再 SELECT * FROM Names;,可以看到分隔符已经变成 : 了
 
2、设置显示模式:.mode    模式
有好几种显示模式,默认的是 list 显示模式,一般我们使用 column 显示模式,还有其他几种显示模式可以 .help 看 mode 相关内容。看看下面的图,和上面是不是显示的不一样了?
 
3、显示标题栏:.headers   on
看看,是不是又不太一样了?
 
4、设置每一列的显示宽度:.width     w1,w2,w3.........
一些内容,默认的宽度显示不下,这个命令就有用了
 
5、设置 NULL 值显示成什么样子: .nullvalue     你想要的NULL值格式
默认情况下NULL值什么也不显示,你可以设置成你自己想要的样子
 
6、列出当前显示格式设置情况:.show
 
7、配置文件 .sqliterc

如果我们每次进入命令行都要重新设置显示格式,很麻烦,其实 .show 命令列出的所有设置项都可以保存到一个 .sqliterc 文件中,这样每次进入命令行就自动设置好了。.sqlterc 文件在 Linux 下保存在用户的 Home 目录下,在 Windows 下可以保存到任何目录下,但是需要设置环境变量让数据库引擎能找到它,感兴趣的可以看看帮助。 

数据类型

NULL - 空值
INTEGER - 有符号整数
REAL - 浮点数
TEXT - 文本字符串
BLOB - 二进制数据,如图片、声音等等

创建表

CREATE TABLE Students(Id integer,Name text,age integer);

 删除表

DROP TABLE Students;

 约束

NOT NULL - 非空
UNIQUE - 唯一
PRIMARY KEY - 主键
FOREIGN KEY - 外键
CHECK - 条件检查
DEFAULT - 默认


CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text);
CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Country text DEFAULT '中国');
CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text,Age integer NOT NULL,City text);
CREATE TABLE Teachers(Id integer PRIMARY KEY,Name text UNIQUE);
CREATE TABLE Teachers(Id integer PRIMARY KEY,Age integer CHECK(Age>22));
CREATE TABLE Students (Id integer PRIMARY KEY,  TeacherId integer,  FOREIGN KEY(TeacherId) REFERENCES Teachers(id) );

 

const char* gszFile = "C:\\test.db";
CppSQLite3DB db;

// 读入数据库
db.open(gszFile);

// 创建表
db.execDML("create table emp(empno int, empname char(20));");

// 插入  返回影响的行数
int nRows = db.execDML("insert into emp values (7, 'David Beckham');");
// 更新  返回影响的行数
nRows = db.execDML("update emp set empname = 'Christiano Ronaldo' where empno = 7;");
// 删除  返回影响的行数
nRows = db.execDML("delete from emp where empno = 7;");


// 批量插入
db.execDML("begin transaction;");
for (i = 0; i < nRowsToCreate; i++)
{
        char buf[128];
        sprintf(buf, "insert into emp values (%d, 'Empname%06d');", i, i);
        db.execDML(buf);
}
db.execDML("commit transaction;");

// 统计个数
int nSumRows = db.execScalar("select count(*) from emp;")



// 自增主键
db.execDML("drop table emp;");
db.execDML("create table emp(empno integer primary key, empname char(20));");
for (int i = 0; i < 5; i++)
{
        char buf[128];
        sprintf(buf, "insert into emp (empname) values ('Empname%06d');", i+1);
        db.execDML(buf);
        int nprimarykeys = db.lastRowId(); // 返回插入记录的自增主键
}



// 查询
CppSQLite3Query q = db.execQuery("select * from emp order by 1;");

for (int fld = 0; fld < q.numFields(); fld++)
{
        q.fieldName(fld); // 字段名
        q.fieldDeclType(fld); // 字段类型
}
while (!q.eof())
{
        q.fieldValue(0); // 字段值
        q.fieldValue(1); // 字段值
        q.nextRow();
}


// 插入空值
CppSQLite3Buffer bufSQL;
bufSQL.format("insert into emp (empname) values (%Q);", "He's bad");
db.execDML(bufSQL);
bufSQL.format("insert into emp (empname) values (%Q);", NULL);
db.execDML(bufSQL);


// 带空值的查询
CppSQLite3Table t = db.getTable("select * from emp order by 1;");
for (int fld = 0; fld < t.numFields(); fld++)
{
        t.fieldName(fld); // 字段名
}
for (int row = 0; row < t.numRows(); row++)
{
        t.setRow(row);
        for (int fld = 0; fld < t.numFields(); fld++)
        {
                if (!t.fieldIsNull(fld))
                {
                        t.fieldValue(fld); // 字段值
                }
                else
                {
                        // 空值
                }
        }
}


// 二进制插入
db.execDML("create table bindata(desc char(10), data blob);");
unsigned char bin[256]={1..255};
CppSQLite3Binary blob;
blob.setBinary(bin, sizeof(bin));
CppSQLite3Buffer bufSQL;
bufSQL.format("insert into bindata values ('testing', %Q);", blob.getEncoded());
db.execDML(bufSQL);

// 二进制查询
CppSQLite3Query q = db.execQuery("select data from bindata where desc = 'testing';");
if (!q.eof())
{
        blob.setEncoded((unsigned char*)q.fieldValue("data"));
}
const unsigned char* pbin = blob.getBinary(); // 值
q.finalize();



// 批量插入
db.execDML("drop table emp;");
db.execDML("create table emp(empno int, empname char(20));");
db.execDML("begin transaction;");
CppSQLite3Statement stmt = db.compileStatement("insert into emp values (?, ?);");
for (int i = 0; i < nRowsToCreate; i++)
{
        char buf[16];
        sprintf(buf, "EmpName%06d", i);
        stmt.bind(1, i);
        stmt.bind(2, buf);
        stmt.execDML();
        stmt.reset();
}
db.execDML("commit transaction;");

 

 

相关博文 首页 上页 1 2 3 下页 尾页 共3条
[挂载人]初学MPEG

个人签名--------------------------------------------------------------------------------

Please Login (or Sign Up) to leave a comment