首页 > 代码库 > sqlite3在D语言下之代码流畅体验
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 database10 assert(false, "Error: " ~ e.msg);11 }12 13 // Create a table.14 try15 {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 BLOB23 )"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 try34 {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 table63 try64 {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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。