sqlite3在D语言下之代码流畅体验

 1 // Open a database in memory.
 2 Database db;
 3 try
 4 {
 5     db = Database(":memory:");
 6 }
 7 catch (SqliteException e)
 8 {
 9     // Error creating the database
10     assert(false, "Error: " ~ e.msg);
11 }
12
13 // Create a table.
14 try
15 {
16     db.execute(
17         "CREATE TABLE person (
18             id INTEGER PRIMARY KEY,
19             last_name TEXT NOT NULL,
20             first_name TEXT,
21             score REAL,
22             photo BLOB
23          )"
24     );
25 }
26 catch (SqliteException e)
27 {
28     // Error creating the table.
29     assert(false, "Error: " ~ e.msg);
30 }
31
32 // Populate the table.
33 try
34 {
35     auto query = db.query(
36         "INSERT INTO person (last_name, first_name, score, photo)
37          VALUES (:last_name, :first_name, :score, :photo)"
38     );
39
40     // Bind everything with chained calls to params.bind().
41     query.params.bind(":last_name", "Smith")
42                 .bind(":first_name", "John")
43                 .bind(":score", 77.5);
44     ubyte[] photo = cast(ubyte[]) "..."; // Store the photo as raw array of data.
45     query.params.bind(":photo", photo);
46     query.execute();
47
48     query.reset(); // Need to reset the query after execution.
49     query.params.bind(":last_name", "Doe")
50                 .bind(":first_name", "John")
51                 .bind(3, null) // Use of index instead of name.
52                 .bind(":photo", null);
53     query.execute();
54 }
55 catch (SqliteException e)
56 {
57     // Error executing the query.
58     assert(false, "Error: " ~ e.msg);
59 }
60 assert(db.totalChanges == 2); // Two ‘persons‘ were inserted.
61
62 // Reading the table
63 try
64 {
65     // Count the Johns in the table.
66     auto query = db.query("SELECT count(*) FROM person WHERE first_name == ‘John‘");
67     assert(query.rows.front[0].get!int() == 2);
68
69     // Fetch the data from the table.
70     query = db.query("SELECT * FROM person");
71     foreach (row; query.rows)
72     {
73         // "id" should be the column at index 0:
74         auto id = row[0].get!int();
75         // Some conversions are possible with the method as():
76         auto name = format("%s, %s", row["last_name"].get!string(), row["first_name"].get!(char[])());
77         // The score can be NULL, so provide 0 (instead of NAN) as a default value to replace NULLs:
78         auto score = row["score"].get!real(0.0);
79         // Use of opDispatch with column name:
80         auto photo = row.photo.get!(ubyte[])();
81
82         // ... and use all these data!
83     }
84 }
85 catch (SqliteException e)
86 {
87     // Error reading the database.
88     assert(false, "Error: " ~ e.msg);
89 }

sqlite3在D语言下之代码流畅体验

时间: 2024-11-06 09:51:44

sqlite3在D语言下之代码流畅体验的相关文章

Swift语言下的单例设计模式实现(SINGLETON)

一.意图 保证一个类公有一个实例,并提供一个访问它的全局访问点. 二.使用场景 1.使用场景 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 2.实现的重要三个步骤 私有化构造方法(Swift不支持) 使用一个静态变量保存实例的引用 提供一个全局的访问方法 三. Swift语言下的实现 Swift语言不支持变量及方法的权限,没有办法隐藏变量及方法,可以随意直接创建一个实例.单例的创建有很多写

第一章 C/C++语言概述 【代码手输一遍】

前情提要:如果不涉及面向对象的部分,那么C++语言和C语言的语法90%以上是一样的,只不过略有扩充,用起来更为方便而已. 查看gcc版本: E:\Program Files\MinGW\bin>gcc -v Reading specs from ./../lib/gcc/mingw32/3.4.5/specs Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi th-gnu-as --h

c语言各类问题 代码

定义一个结构体,有两个成员变量,一个整型的n,一个字符型的c,利用结构体类型声明一个具有5个元素的数组,并随机初始化,根据成员变量n进行从小到大排序,然后输出 冒泡排序然后 在输出结构体#include<stdio.h>struct d{int x;char y;};int main(void){struct d a[5];int i,d;int b[6]; for(i=0;i<5;i++){scanf("%d%c",&a[i].x,&a[i].y);

第8章防范式编程下(代码大全4)

8.4 Exceptions 异常 用异常通知程序的其他部分,发生了不可忽略的错误 只在真正例外的情况下才抛出异常 不能用异常来推卸责任 避免在构造函数和析构函数中抛出异常,除非你在同一地方把它们捕获 在恰当的抽象层次抛出异常 在异常消息中加入关于导致异常发生的全部信息 避免使用空的catch语句 了解所用函数库可能抛出的异常 考虑创建一个集中的异常报告机制 把项目中对异常的使用标准化 对于像C++这类语言,其中允许抛出多种多样的对象.数据及指针的话,那么就应该为到底可以抛出哪些类的异常建立一个

iOS开发-进阶:语言国际化及代码切换语言

语言国际化和使用代码切换语言是很多APP都有的功能, 实现起来也很简单, 没有什么技术难题, 网上有很多相关的资料, 在实现了功能后, 打算把整个过程写在这里.(例子均为中英文, 替换其他语言原理相同, 只需记录保存该语言的key值即可) 需求: 1.应用名跟随系统切换 2.应用内容跟随系统切换 3.使用代码切换应用内容的语言(含后台返回数据切换语言) 实现: 1.应用名跟随系统切换 首先在Project下选择Info, 然后在Localizations中添加程序需要使用的语言,中文. 然后创建

C语言下泊松分布以及指数分布随机数生成器实现

最近实验室的项目需要实现模拟文件访问序列,要求单位时间内的数据请求次数符合泊松分布,而两次请求见的时间间隔符合指数分布.没办法只好重新捡起已经丢掉多时的概率知识.于是也就有了这篇关于在C语言下符合泊松分布和指数分布的随机数生成器的实现. 泊松分布 在实际的事例中,当某一事件,比如进站乘客数量,电话交换机接收到的通话请求以固定的瞬时速率λ独立且随机地出现时,就可以认为该事件在单位时间内发生的次数符合泊松分布. 首先必须由二项分布引出: 如果做一件事情成功的概率是 p 的话,那么独立尝试做这件事情

怎么使用瓦特平台下面的“代码工厂”快速生成BS程序代码

这里说一下怎么使用瓦特平台下面的“代码工厂”快速生成程序代码 使用平台:windows+"visual studio 2010"+"SqlServer2000+" 结构:B/S 生成的结构:前端Html和JS.数据库sql,底层ajax,底层数据交互! 免费下载客户端:(永久有效)----------此版本不附带权限控制! http://pan.baidu.com/s/1hqtGGlA 代码生成介绍 1:打开瓦特平台的设计器: 点击提交:出现---> 在你的机

C语言快速排序算法代码分析

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要.有的时候代码的可维护.可重用.可扩展确实胜过单纯的算法效率高.所以拾起大牛书籍<大话设计模式>同时参考网上诸大牛的博客,开始我的设计模式之旅.由于平时编程时用C/C++,现在是Java,也练练Java语法. 今天先介绍一下命令模式. 概念: 命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作.

通过伪元素指定不同语言下的引号

要指定不同语言下的引号,只需通过伪元素进行生成即可: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style type="text/css"> :lang(en) > q {quotes:'"' '"';}