- 浏览: 23860 次
- 性别:
- 来自: 东莞
最新评论
-
flythink:
oledb是不是更容易弄一些? 纯猜测
MS ODBC for DMD 2.053 -
hqs7636:
8错,继续完善一下。。。
MS ODBC for DMD 2.053 -
rocex:
lz的这个工具好用,可以随时在1.x和2.x上切换。
DEx ...
D2/Phobos与D2/Tango一键切换编译环境设置 -
Colorful:
链接是这个 : http://code.google.com/ ...
Windows D编程类封装初步学习并请教 -
betty_betty2008:
哥们:链接打不开
Windows D编程类封装初步学习并请教
这次进一步看了看SQLigte3 的API,不用上次写的类包装,而直接用C式写法做了一个练习。列在这里备忘。
module sqlite3Ex01; import samsTools.utils; import sqlite4D.sqlite3_imp; import std.stdio; import std.string; import std.conv; import core.stdc.stdlib; import core.stdc.stdio; import core.stdc.string; bool createContacts(sqlite3* db) { char* errmsg; db=initDB(); if(db is null) { printf("error occurred.cann't create new table.\n"); return false; } //printf("Init success.creating new table...\n"); int ret=sqlite3_exec(db,toCstring("create table contacts (\n" " id integer primary key, \n" " first_name char, \n" " last_name char, \n" " email char)"), null, null, &errmsg); if( ret!=SQLITE_OK) { printf("\n----------------------------------\n" "Create table 'contacts' failed because:\n%s.\n" "You can still use this table anyhow.\n" "------------------------------------\n",errmsg); sqlite3_free(errmsg); return false; } else { printf("contacts table was created.\n"); return true; } closeDB(db); assert(0); } sqlite3* initDB(string dbname="progdb") { sqlite* db; int result=sqlite3_open(toCstring(dbname),&db); if( result==SQLITE_OK)//just to make sure 'result' doesn't return other value { printf("Successfully connected to database.\n"); printf("Version:%s\n",sqlite3_libversion); return db; } else { printf("Error occurred.\nError code: %d\nError msg: %s\n", sqlite3_errcode(db),sqlite3_errmsg(db)); sqlite3_free(db); return null; } } bool closeDB(sqlite3* db) { if(sqlite3_close(db)!=SQLITE_OK) return false; return true; } void addRecordsToContacts(sqlite3* db) { db=initDB(); if(db !is null) { char* errmsg; char* first_name; char* last_name; char* email; char* qry; char input;//determine for more input do{ string fname=askFor!(string)("Please enter first name:"); first_name=toCstring(fname); printf("%s\n",first_name); string lname=askFor!(string)("Please enter last name:"); last_name=toCstring(lname); printf("you entered:%s\n",last_name); string stremail=askFor!(string)("Please enter email:"); email=toCstring(stremail); printf("You entered:%s\n",email); char* sql = sqlite3_mprintf(toCstring("INSERT INTO contacts(first_name,last_name,email)\n" "VALUES('%q','%q','%q');"), first_name, last_name, email); int ret=sqlite3_exec(db,sql,null,null,&errmsg); if(ret!=SQLITE_OK) { printf("SQL error:%s\n%s\n",errmsg,sql); sqlite3_free(errmsg); } else { printf("%s %s (%s) was inserted as ID %d\n", first_name, last_name, email, sqlite3_last_insert_rowid(db)); } }while((input=askForChar("continue to add?(N/Y)"))=='y'|| input=='Y'); closeDB(db); } } void menu() { string menuStr="*** SQLite 3 Database System Exam ***\n" "\n" "1. Create contact table\n" "2. Add new record to contacts\n" "3. Update record to contacts\n" "4. Print contacts\n" "5. Drop contacts\n" "6. Quit\n--------------------------------------\n"; write(menuStr); char input=askForChar("Your choice(1-6):"); while(input!='6') { doMenuChoice(input); write(menuStr); input=askForChar("Your choice(1-6):"); } } void updateContacts(sqlite3* db) { db=initDB; char* errmsg; if(db !is null) { char* sql=sqlite3_mprintf( toCstring("UPDATE contacts " " SET first_name=lower(first_name),\n" " last_name=lower(last_name)")); int ret=sqlite3_exec(db,sql,null,null,&errmsg); if( ret!=SQLITE_OK) { printf("Cann't update records because:\n%s\n",errmsg); sqlite3_free(errmsg); } else { printf("%d row(s) were changed\n",sqlite3_changes(db)); } closeDB(db); } } void printContacts(sqlite3* db) { /* below code caused a compile error *** "can not convert 'int function(...) to intC function(...)" *** I don't know why and what the hell intC is. *** So I have to use another way sqlite3_prepare,step,finalize... *** If anybody know the reason why callback can not work, *** please let me know with thank!! int function(void* parg,int argc,char** argv,char** columnNames) callbacks; static int printTable( void* parg,int argc,char** argv,char** columnNames) { for(int i=0;i<argc;i++) { printf("%-10s\t%-8s\t%s\n", columnNames[i],columnNames[i+argc],argv[i]); } return 0; } callbacks=&printTable; printf("will print contents of contacts...\n"); db=initDB; if(db ! is null) { char* errmsg; int ret=sqlite3_exec(db,toCstring("PRAGMA SHOW_DATATYPES=ON;"),null,null,null); ret=sqlite3_exec(db,toCstring("select * from contacts;"), &callbacks,//callbacks,printTable,&printTable all the same,can't compile!! null,&errmsg); if(ret!=SQLITE_OK) { printf("SQL error:%s\n",errmsg); sqlite3_free(db); } closeDB(db); } */ void error(char* msg) { printf("SQLite error:%s\n",msg); } char* sql=toCstring("select * from contacts;"); uint cols; sqlite3_stmt* stmt; db=initDB; uint totalRecords; if(db) { int result=sqlite3_prepare_v2(db, sql, /*strlen(sql)+1,*/-1, &stmt, null); if( result!=SQLITE_OK) { sqlite3_finalize(stmt); error(sqlite3_errmsg(db)); } cols=sqlite3_column_count(stmt); bool read() { result=sqlite3_step(stmt); if(result!= SQLITE_OK && result!=SQLITE_ROW && result!=SQLITE_DONE) { sqlite3_finalize(stmt); error(sqlite3_errmsg(db)); return false; } if( result==SQLITE_DONE) { return false; } return true; } void printSepLine() { printf("------------------------------------" "----------------------------------\n"); } void printColumnHead() { printf("%-8s",sqlite3_column_name(stmt,0)); for(int i=1;i<cols;i++) { printf("%-15s\t",sqlite3_column_name(stmt,i)); } printf("\n"); printSepLine; } void printColumnValue() { char* cValue=sqlite3_column_text(stmt,0); printf("%-8s",strlen(cValue)==0?toCstring("N/A"):cValue); for(int i=1;i<cols;i++) { cValue=sqlite3_column_text(stmt,i); printf("%-15s\t",strlen(cValue)==0?toCstring("N/A"):cValue); } printf("\n"); } printColumnHead(); while(read) { ++totalRecords; printColumnValue(); } printSepLine; printf("Total %8u records.\n\n",totalRecords); if(stmt) { sqlite3_finalize(stmt); } closeDB(db); } } void deleteContacts(sqlite3* db) { printf("will delete table contacts...\n"); } int doMenuChoice(char input) { sqlite3* db; switch(input) { case '1': createContacts(db); return 1; break; case '2': addRecordsToContacts(db); return 2; break; case '3': updateContacts(db); return 3; break; case '4': printContacts(db); return 4; break; case '5': deleteContacts(db); return 5; break; case '6': return 6; break; } assert(0); } int main(string[] args) { menu; pause; return 0; }
发表评论
-
D2 下win32 api 中文框架备忘
2011-07-28 17:49 1004隔一段时间就忘了怎么在D2下win32 SDK框架里使用中文, ... -
MS ODBC for DMD 2.053
2011-05-20 16:49 1177东拼西凑,终于在dmd2.053下成功连接上了ODBC 数据库 ... -
截屏、闪屏(Timer)、输入窗口--DFL for D2.053
2011-05-16 17:41 1230这个小练习用D2.053+DFL完成了以下功能: 1.截屏(C ... -
SDK写的一个画树(花)程序
2009-11-23 17:53 1048[img]C:\Documents and Settings\ ... -
json for D2.034
2009-10-13 19:54 693作者:Jeremie Pelletier 链接: [url] ... -
D2 中使用VC的Windows资源文件
2009-09-15 15:26 1184终于试成功了。总结一下: 一.在*.RC里包含window ... -
windows vfw.lib
2009-09-07 20:06 1275上传到这里,因为有时候改变工作地点后另一台机上没有。:P -
Windows D编程类封装初步学习并请教
2009-09-01 18:37 1182首先把要请教的问题写在最顶部: 1。事件最好的包装方法是怎样的 ... -
"D"iving Into the D Programming Language
2009-08-04 16:23 1543"D"iving Into the D P ... -
练习:boost.timer 转D2
2009-07-21 12:32 1262中间解决了好几个问题,尚有几个问题没解决,已在NG上提问。备忘 ... -
Sqlite3 C++类库Sharplite 转D
2009-07-17 16:32 1602这是一份作业,因为所有创作的部分都是前人的。 材料:1.sql ... -
D2 反射和defineEum! 练习
2009-07-16 14:21 832备忘: module DioApp; imp ... -
D2 std.stream 文件读写小练习
2009-07-13 19:12 1701笔记要点: 1。个人工具包samsTools 工具之一Prom ... -
DFL for DMD2.031
2009-07-10 16:33 845从NG里要到的,俺测过了,OK 的啦. 原贴原下载地址链接: ... -
D2/Phobos与D2/Tango一键切换编译环境设置
2009-05-08 18:01 1129一。适合谁: 象俺一样,反反复复搭不起D编译环境的小菜 二。不 ... -
(翻译)Phobos 2.029 R部 std.random
2009-04-27 14:58 1256std.random ... -
(翻译)Phobos 2.029 P部 std.process
2009-04-23 11:57 1112std.process ... -
(翻译)Phobos 2.029 P部 std.path
2009-04-23 10:52 1289std.path ...
相关推荐
sqlite3的API的进一步封装,及实例调用。 还有SQLite权威指南.pdf,SQLite学习手册_中文全本.pdf,全面解析_SQLite.pdf 和sqlite3图形化工具
本源码使用不同的Sqlite库API,对数据库创建表、读取、插入、更新等操作,是学习API的例子。sqlite数据库是一款比较小巧的数据库,应用到好多设备和软件中。从本质上说,SQLite数据库本质上来讲就是一个磁盘上的文件...
SQLiteAPI接口学习总结.docx
SQLiteAPI接口学习总结.pdf
SQLiteAPI接口学习总结知识.pdf
sqlite API 中文学习手册 常见命令学习手册
SQLiteAPI接口学习总结[归纳].pdf
sqlite3数据库操作模块源码,api有详细说明,方便大家共同学习
FastAPI 学习之路(六十一)使用mysql数据库替换sqlite数据库
参考杨万青写的《ASP.NET Core与Restful API开发实战》,这本书写的不错,但是书中使用的是Sql Server,我一般不用这个数据库,为了学习方便,我的DEMO使用的是Sqlite3,这种数据库太好用了。另外DEMO里面也去掉了书...
sqlite指南,感觉还算挺全的,也挺清晰的,sqlite的资料少,这本书基本从怎么下载怎么安装,API都有涉及。
易语言SQLite3数据库操作类V1.66模块源码例程程序调用API函数实现SQLite3数据库的应用。 易语言SQLite3数据库操作类V1.66模块源码可以学习到数据库类API的应用。 资源作者: 三叶资源网 ...
Vue3采用新的组件式API开发,axios后端接口请求。 flask采用sqlalchemy管理数据库,采用token验证登陆信息。 已实现文章列表显示,文章内容markdown渲染,文章内容创建,修改,删除。 很适合用来入门学习,爱好研究...
struct sqlite3_api_routines { void * (*aggregate_context)(sqlite3_context*,int nBytes); int (*aggregate_count)(sqlite3_context*); int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*)...
android之SQLite数据库开发详解: Android 开发中使用 ...可以,由于 JDBC 不适合手机这种内存受限设备,所以 Android 开发人员需要学习新的 API 来使用 SQLite。本文主要讲解 SQLite 在 Android 环境中的基本使用。
学习SQLite数据库的好东东
本文件给出了sqlite编程实例源码及其执行结果。其中,源码实例中包括了最常用的一些API,非常适合对于初学者学习使用。 有关SQLite安装与编程请参考下面的帖子 Linux下SQLite数据库安装操作与编程 . ...
用VC++6.0开发的基于对话框的应用...目录下有一个名为student.db的文件,是SQLite数据库文件。这个代码说明了怎么用C/C++连接SQLite数据库文件及进行基本的操作,比如插入新的数据,查询数据。对学习SQLite数据库有帮助
- [x] 轻量简洁:Fastapi+Sqlite3+Vue2+ElementUI - [x] 轻松上传:复制粘贴,拖拽选择 - [x] 多种类型:文本,文件 - [x] 防止爆破:错误次数限制 - [x] 防止滥用:IP限制上传次数 - [x] 口令分享:随机口令,存取...
SQLite 是一款非常流行的嵌入式数据库,它支持 SQL 查询,...可以,由于 JDBC 不适合手机这种内存受限设备,所以 Android 开发人员需要学习新的 API 来使用 SQLite。本文主要讲解 SQLite 在 Android 环境中的基本使用。