- 浏览: 24900 次
- 性别:
- 来自: 东莞
最新评论
-
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 1049隔一段时间就忘了怎么在D2下win32 SDK框架里使用中文, ... -
MS ODBC for DMD 2.053
2011-05-20 16:49 1242东拼西凑,终于在dmd2.053下成功连接上了ODBC 数据库 ... -
截屏、闪屏(Timer)、输入窗口--DFL for D2.053
2011-05-16 17:41 1277这个小练习用D2.053+DFL完成了以下功能: 1.截屏(C ... -
SDK写的一个画树(花)程序
2009-11-23 17:53 1081[img]C:\Documents and Settings\ ... -
json for D2.034
2009-10-13 19:54 722作者:Jeremie Pelletier 链接: [url] ... -
D2 中使用VC的Windows资源文件
2009-09-15 15:26 1232终于试成功了。总结一下: 一.在*.RC里包含window ... -
windows vfw.lib
2009-09-07 20:06 1347上传到这里,因为有时候改变工作地点后另一台机上没有。:P -
Windows D编程类封装初步学习并请教
2009-09-01 18:37 1237首先把要请教的问题写在最顶部: 1。事件最好的包装方法是怎样的 ... -
"D"iving Into the D Programming Language
2009-08-04 16:23 1594"D"iving Into the D P ... -
练习:boost.timer 转D2
2009-07-21 12:32 1335中间解决了好几个问题,尚有几个问题没解决,已在NG上提问。备忘 ... -
Sqlite3 C++类库Sharplite 转D
2009-07-17 16:32 1672这是一份作业,因为所有创作的部分都是前人的。 材料:1.sql ... -
D2 反射和defineEum! 练习
2009-07-16 14:21 875备忘: module DioApp; imp ... -
D2 std.stream 文件读写小练习
2009-07-13 19:12 1788笔记要点: 1。个人工具包samsTools 工具之一Prom ... -
DFL for DMD2.031
2009-07-10 16:33 914从NG里要到的,俺测过了,OK 的啦. 原贴原下载地址链接: ... -
D2/Phobos与D2/Tango一键切换编译环境设置
2009-05-08 18:01 1175一。适合谁: 象俺一样,反反复复搭不起D编译环境的小菜 二。不 ... -
(翻译)Phobos 2.029 R部 std.random
2009-04-27 14:58 1334std.random ... -
(翻译)Phobos 2.029 P部 std.process
2009-04-23 11:57 1166std.process ... -
(翻译)Phobos 2.029 P部 std.path
2009-04-23 10:52 1322std.path ...
相关推荐
SQLite3 API的封装是数据库开发中的一个重要环节,它允许开发者以更加简洁、高效的方式与SQLite数据库进行交互。在本文中,我们将深入探讨SQLite3 API的封装技术,以及如何通过实例来调用这些封装好的接口。 SQLite...
1. SQLite3 C API:SQLite3的C API提供了许多函数,如`sqlite3_open()`用于打开或创建数据库连接,`sqlite3_close()`用于关闭数据库连接,`sqlite3_exec()`用于执行SQL语句,以及`sqlite3_prepare_v2()`和`sqlite3_...
这个帮助文件是学习和参考SQLite API的重要资源,它覆盖了如`sqlite3_open()`用于打开数据库连接,`sqlite3_exec()`用于执行SQL语句,`sqlite3_prepare_v2()`和`sqlite3_step()`用于编译和执行预编译的SQL语句等关键...
`sqlite3.h`是SQLite3的头文件,包含了所有用于访问SQLite3数据库的API(应用程序编程接口)声明。开发人员在编写代码时需要包含这个头文件,以便能够调用如`sqlite3_open()`、`sqlite3_exec()`等函数来创建、查询或...
同时,SQLite API还提供了错误处理机制,如`sqlite3_errcode()`和`sqlite3_errmsg()`,帮助开发者调试和诊断问题。 总之,这个压缩包提供的源码示例是关于如何使用SQLite API在C语言环境中进行数据库操作的实例,...
包含的`SqliteAPI`可能是一个包含上述功能的类,开发者可以参考其提供的示例代码来学习如何在Blackberry应用中使用SQLite数据库。例如,创建一个新用户可能涉及如下步骤: - 打开数据库 - 创建(或检查是否存在)...
本源码使用不同的Sqlite库API,对数据库创建表、读取、插入、更新等操作,是学习API的例子。sqlite数据库是一款比较小巧的数据库,应用到好多设备和软件中。从本质上说,SQLite数据库本质上来讲就是一个磁盘上的文件...
中文文档是学习SQLite3的重要资料,它包含了关于SQLite3的详细信息,包括安装、使用、SQL语法、API参考等内容。有了这份中文文档,即使是对数据库不熟悉的开发者也能迅速上手。 总的来说,这个压缩包为学习SQLite3...
`sqlite3.h` 是SQLite的头文件,定义了SQLite的API接口,供外部程序调用。这个头文件包含了创建、打开、关闭数据库,执行SQL语句,以及获取查询结果等一系列操作的函数声明。开发者可以通过这些API与SQLite进行交互...
【Golang Gin RESTFul API with SQLite】是一个项目,它教你如何使用Go语言的Gin框架来构建符合RESTful架构的API,并结合SQLite数据库进行数据存储。在这个项目中,我们将探讨Gin框架的核心特性,RESTful API设计...
SQLite3是一种轻量级的、开源的、嵌入式的关系型数据库管理系统,广泛应用于移动设备、桌面应用甚至服务器环境中。它的设计目标是提供一个可移植的、可靠的、自包含的数据库解决方案,无需单独的服务器进程,可以...
5. SQLite3 API:SQLite3提供了一套C语言接口,包括了各种函数,如`sqlite3_open()`用于打开或创建数据库,`sqlite3_exec()`用于执行SQL命令,`sqlite3_prepare_v2()`和`sqlite3_step()`用于预编译和执行SQL语句,...
在提供的压缩包"sqlite3资源包"中,你应该能找到sqlite3.h头文件,它是SQLite3的API接口定义,以及.lib和.dll文件,分别代表静态库和动态库。在Windows环境下,.lib文件用于链接阶段,而.dll文件则是在运行时提供...
`sqlite3.h`是头文件,包含了所有与SQLite3 API相关的声明,而`sqlite3.c`则是实现文件,包含了SQLite3的全部功能。 在DEMO中,`TestSqlite3.c`是主要的C语言源码文件。这个文件通常会展示如何打开一个SQLite3...
在Windows环境下,SQLite3通常通过编程接口(API)与C++等编程语言集成,用于开发数据库应用程序。在这个"sqlite3数据库.rar"压缩包中,包含了几个与SQLite3开发相关的资源。 首先,`vld-内存检查工具.rar`可能是一...
在使用SQLite3数据库时,有时会遇到一个常见问题:无法处理中文路径。这主要是由于SQLite3默认不支持非ASCII字符,包括中文字符,导致在读取或写入带有中文路径的数据库时出现乱码或错误。针对这个问题,我们可以...
这篇教程将深入探讨 SQLite 的使用以及它在 Android API 中的应用。 首先,SQLite 提供了一个 SQL 接口,使得开发者可以通过执行 SQL 语句来创建、更新、查询和删除数据库中的数据。这些基本操作包括: 1. **创建...
在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 应用程序中使用SQLite3数据库引擎。这个示例项目是使用Visual Studio 2010开发的,它演示了MFC对话框中对SQLite数据库的基本操作,包括添加、删除...
MicroPython的sqlite3库提供了与标准Python环境相似的API接口,使得在MicroPython环境中创建、操作数据库变得简单易行。 使用MicroPython的sqlite3库,首先需要确保你的MicroPython环境已经集成了该库。例如,对于...
在C++中封装Sqlite3,可以创建一个易于使用的API,使得在C++应用中集成数据库操作变得更加便捷。 首先,Sqlite3的核心功能包括: 1. 数据库创建:通过调用`sqlite3_open()`函数,可以打开或创建一个新的数据库文件...