2006-11-16
DDBI D语言数据库接口
关键字: D语言 数据库
D的数据库 接口 DDBI
所有的程序都可能访问数据库。为了让D兼容其他语言开发的数据库接口,并为开发者提供统一的访问形式,DDBI应运而生。
DDBI 包含几个核心的 类,包装了数据库的基本操作。
Row 包含了多个列的一个行。允许使用索引和列名访问行的数据。
Database 提供了一个抽象的数据库封装,包含了连接,执行Sql语句,返回行的函数。
Result 管理一个从数据库返回的结果集,返回多个Row。
statement 实现了动态参数构建sql语句的类,可以执行sql语句。
例子:
经过我的测试,sqlite兼容性最好。其次是mysql。现在我就一直在用Sqlite。目前的版本还很低,她的论坛也一直在讨论Row的新版本。
网站http://dsource.org/projects/ddbi
论坛http://www.dsource.org/forums/viewforum.php?f=60
SVN http://svn.dsource.org/projects/ddbi/trunk/
所有的程序都可能访问数据库。为了让D兼容其他语言开发的数据库接口,并为开发者提供统一的访问形式,DDBI应运而生。
DDBI 包含几个核心的 类,包装了数据库的基本操作。
Row 包含了多个列的一个行。允许使用索引和列名访问行的数据。
Database 提供了一个抽象的数据库封装,包含了连接,执行Sql语句,返回行的函数。
Result 管理一个从数据库返回的结果集,返回多个Row。
statement 实现了动态参数构建sql语句的类,可以执行sql语句。
例子:
import dbi.sqlite.SqliteDatabase;
import std.stdio;
void main() {
SqliteDatabase db = new SqliteDatabase();
db.connect("test.db");
Row[] rows = db.queryFetchAll("SELECT * FROM names");
foreach (Row row; rows) {
writefln("name: %s\nzip: %s\n", row["name"], row["zip"]);
}
db.close();
}
经过我的测试,sqlite兼容性最好。其次是mysql。现在我就一直在用Sqlite。目前的版本还很低,她的论坛也一直在讨论Row的新版本。
网站http://dsource.org/projects/ddbi
论坛http://www.dsource.org/forums/viewforum.php?f=60
SVN http://svn.dsource.org/projects/ddbi/trunk/
评论
闹海金蛟
2007-03-07
我用的是ddbi 2.4, 没有使用tango,用到的都是英文目录
tomqyp
2007-03-06
你用的是tango还是phobos看看buildme所用到的一些库是不是在中文目录里面
闹海金蛟
2007-03-06
D:\tags\0.2.4>dmd -run buildme.d sqlite
Error: 4invalid UTF-8 sequence
続行するには何かキーを押してください . . .
D:\tags\0.2.4>
Error: 4invalid UTF-8 sequence
続行するには何かキーを押してください . . .
D:\tags\0.2.4>
ideage
2007-03-03
to tomqyp:
原因可能是:
1.和数据库的数据有关系,数据可能是空.
2.printf和writefln有BUG.
原因可能是:
1.和数据库的数据有关系,数据可能是空.
2.printf和writefln有BUG.
tomqyp
2007-03-03
ideage我编译通过了,但是执行程序时出现Access Violation
我参照你在DDBI论坛里的办法,找到是调用mysql_fetch_row函数时就会Access Violation
但是不知道是什么原因
我参照你在DDBI论坛里的办法,找到是调用mysql_fetch_row函数时就会Access Violation
但是不知道是什么原因
ideage
2007-03-03
D:\tags\0.2.4\trunk>dmd -run buildme.d sqlite3 不对.
应该
D:\ProgramFiles\D\OpenSource>dmd buildme.d sqlite
没有3.把tags下的文件复制到opensource下.再试试.
应该
D:\ProgramFiles\D\OpenSource>dmd buildme.d sqlite
没有3.把tags下的文件复制到opensource下.再试试.
闹海金蛟
2007-03-03
我的sc.ini
[Version]
version=7.51 Build 020
[Environment]
LIB="%@P%\..\lib";\dm\lib;D:\ProgramFiles\D\lib
DFLAGS="-I%@P%\..\src\phobos;D:\ProgramFiles\D\OpenSource"
LINKCMD=%@P%\..\..\dm\bin\link.exe
其中,libmysql.lib libmysql.dll sqlite3.lib sqlite3.dll都是在D:\ProgramFiles\D\lib这个目录下,D:\ProgramFiles\D\OpenSource下有dbi(2.4)tango等目录,
我可以成功生成libmysql.lib sqlite3.lib文件,但
dmd -run buildme.d sqlite 编译生成dbi.lib
(buildme.d是不是就是你写的builddbi.d?)时,会提示
D:\tags\0.2.4\trunk>dmd -run buildme.d sqlite3
Error: 4invalid UTF-8 sequence
我已经用了2.4版的dbi了.
而在codeblocks里面,我也已经把sqlite3.lib libmysql.lib都引进来了,并且加了一句import dbi.all;因为sqlite3的例子说是没有定义row,codeblocks提示如下
:: Symbol Undefined _D3dbi6sqlite14SqliteDatabase14SqliteDatabase7__ClassZ
:: Symbol Undefined _D3dbi6sqlite14SqliteDatabase14SqliteDatabase5_ctorMFZC3dbi6sqlite14SqliteDatabase14SqliteDatabase
:: Symbol Undefined _D3dbi8Database8Database13queryFetchAllMFAaZAC3dbi3Row3Row
:: Symbol Undefined _D3dbi3Row3Row7opIndexMFAaZAa
:: === Build finished: 4 errors, 0 warnings ===
跟mysql的错误差不多嘛.
(既然sc.ini已经指定了dbi的路径,codeblock里面应该不用先编译dbi.lib吧?可以直接引用dbi里面的东西嘛?)
[Version]
version=7.51 Build 020
[Environment]
LIB="%@P%\..\lib";\dm\lib;D:\ProgramFiles\D\lib
DFLAGS="-I%@P%\..\src\phobos;D:\ProgramFiles\D\OpenSource"
LINKCMD=%@P%\..\..\dm\bin\link.exe
其中,libmysql.lib libmysql.dll sqlite3.lib sqlite3.dll都是在D:\ProgramFiles\D\lib这个目录下,D:\ProgramFiles\D\OpenSource下有dbi(2.4)tango等目录,
我可以成功生成libmysql.lib sqlite3.lib文件,但
dmd -run buildme.d sqlite 编译生成dbi.lib
(buildme.d是不是就是你写的builddbi.d?)时,会提示
D:\tags\0.2.4\trunk>dmd -run buildme.d sqlite3
Error: 4invalid UTF-8 sequence
我已经用了2.4版的dbi了.
而在codeblocks里面,我也已经把sqlite3.lib libmysql.lib都引进来了,并且加了一句import dbi.all;因为sqlite3的例子说是没有定义row,codeblocks提示如下
:: Symbol Undefined _D3dbi6sqlite14SqliteDatabase14SqliteDatabase7__ClassZ
:: Symbol Undefined _D3dbi6sqlite14SqliteDatabase14SqliteDatabase5_ctorMFZC3dbi6sqlite14SqliteDatabase14SqliteDatabase
:: Symbol Undefined _D3dbi8Database8Database13queryFetchAllMFAaZAC3dbi3Row3Row
:: Symbol Undefined _D3dbi3Row3Row7opIndexMFAaZAa
:: === Build finished: 4 errors, 0 warnings ===
跟mysql的错误差不多嘛.
(既然sc.ini已经指定了dbi的路径,codeblock里面应该不用先编译dbi.lib吧?可以直接引用dbi里面的东西嘛?)
ideage
2007-03-02
1.修改一下sc.ini
例如我的是:
[Version]
version=7.51 Build 020
[Environment]
LIB="%@P%\..\lib";\dm\lib
DFLAGS="-I%@P%\..\src\phobos;D:\D\dmd\import"
LINKCMD=%@P%\..\..\dm\bin\link.exe
2.先编译库.
例如编译sqlite,使用implib和sqlite3.dll生成一个 sqllite3.lib
使用 dmd -run builddbi.d sqlite 编译生成dbi.lib
3.再编译应用程序.引用dbi.lib,sqllite3.lib
dmd test.d dbi.lib sqllite3.lib -I..
例如我的是:
[Version]
version=7.51 Build 020
[Environment]
LIB="%@P%\..\lib";\dm\lib
DFLAGS="-I%@P%\..\src\phobos;D:\D\dmd\import"
LINKCMD=%@P%\..\..\dm\bin\link.exe
2.先编译库.
例如编译sqlite,使用implib和sqlite3.dll生成一个 sqllite3.lib
使用 dmd -run builddbi.d sqlite 编译生成dbi.lib
3.再编译应用程序.引用dbi.lib,sqllite3.lib
dmd test.d dbi.lib sqllite3.lib -I..
tomqyp
2007-03-02
我MSN很少用,加进libmysql.lib用-I你的路径\libmysql.lib
codeblocks里 可能是Project->Build option->Linker setting 这里设置
codeblocks里 可能是Project->Build option->Linker setting 这里设置
闹海金蛟
2007-03-02
:: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase7__ClassZ
:: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase5_ctorMFZC3dbi5mysql13MysqlDatabase13MysqlDatabase
:: Symbol Undefined _D3dbi8Database8Database13queryFetchAllMFAaZAC3dbi3Row3Row
:: Symbol Undefined _D3dbi3Row3Row7opIndexMFAaZAa
:: === Build finished: 4 errors, 0 warnings ===
这是在codeblocks里面编译的结果,请问第一页说的用libmysql.lib怎么加到里面
:: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase5_ctorMFZC3dbi5mysql13MysqlDatabase13MysqlDatabase
:: Symbol Undefined _D3dbi8Database8Database13queryFetchAllMFAaZAC3dbi3Row3Row
:: Symbol Undefined _D3dbi3Row3Row7opIndexMFAaZAa
:: === Build finished: 4 errors, 0 warnings ===
这是在codeblocks里面编译的结果,请问第一页说的用libmysql.lib怎么加到里面
闹海金蛟
2007-03-02
能留下两位的MSN吗?
想请教一下。
想请教一下。
闹海金蛟
2007-03-02
D:\tags\0.2.4>build buildme.d
Error: 4invalid UTF-8 sequence
这是2.4版
Error: 4invalid UTF-8 sequence
这是2.4版
tomqyp
2007-03-02
闹海金蛟你用用build.exe编译试试,或者tango带了一个工具jake应该跟build差不多,我用dmd编译也有你说的情况。
tomqyp
2007-03-02
跟你的情况有点不同,我的在调用mysql_fetch_row时就Access Violation了
ideage
2007-03-02
下载个2.4版本的.别用Tango.再试试.
闹海金蛟
2007-03-02
为什么我的就一直不行呢?
buildme.obj(buildme)
Error 42: Symbol Undefined _D5tango2io9FileProxy9FileProxy7__ClassZ
buildme.obj(buildme)
Error 42: Symbol Undefined _D5tango2io9FileProxy9FileProxy5_ctorMFAabZC5tango2i
o9FileProxy9FileProxy
buildme.obj(buildme)
Error 42: Symbol Undefined _D5tango2io9FileProxy9FileProxy6toListMFDFAaAabZvZv
--- errorlevel 3
buildme.obj(buildme)
Error 42: Symbol Undefined _D5tango2io9FileProxy9FileProxy7__ClassZ
buildme.obj(buildme)
Error 42: Symbol Undefined _D5tango2io9FileProxy9FileProxy5_ctorMFAabZC5tango2i
o9FileProxy9FileProxy
buildme.obj(buildme)
Error 42: Symbol Undefined _D5tango2io9FileProxy9FileProxy6toListMFDFAaAabZvZv
--- errorlevel 3
ideage
2007-03-02
和数据库的数据有关系,如果是空格数据或者是空就会发生.使用writefln就没有问题,用printf就错误.
当时的版本已经修复了我的问题.
最近不使用DDBI了. 不如用C访问,封装DLL方便.
当时的版本已经修复了我的问题.
最近不使用DDBI了. 不如用C访问,封装DLL方便.
tomqyp
2007-03-02
刚在DDBI论坛上看到你Access Violation问题的贴子了,不过我英文不好看不大明折,能说说是怎么解决的吗?
tomqyp
2007-03-02
谢谢 终于编译出来了
不地运行时 提示
Access Violation
这个是mysql的问题吗
不地运行时 提示
Access Violation
这个是mysql的问题吗
ideage
2007-02-28
1. implib /s libmysql.lib libmysql.dll 使用加S的开关.
2.下载最新版本的DDBI.
3. dmd -run builddbi.d mssql 就可以了.
2.下载最新版本的DDBI.
3. dmd -run builddbi.d mssql 就可以了.
发表评论
- 浏览: 114198 次

- 详细资料
搜索本博客
最新评论
-
ANSI和Unicode练习后记
要在dfl的listview控件里显示来自mysql的中文字符。 怎么出错了,提 ...
-- by wandernet -
D语言设计模式 Observer
好文!学习
-- by hqs7636 -
ANSI和Unicode练习后记
新年快乐!
-- by oldrev -
ANSI和Unicode练习后记
支持一个!新年快乐!
-- by DavidL -
D语言的IOCP(完成端口) ...
"iocp的使用例子(哪怕是C方式的)在dsource上都找不到一个,仅此一条i ...
-- by ahadf






评论排行榜