`
ideage
  • 浏览: 326237 次
社区版块
存档分类
最新评论

DDBI D语言数据库接口

阅读更多
D的数据库 接口 DDBI

所有的程序都可能访问数据库。为了让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/
分享到:
评论
31 楼 闹海金蛟 2007-03-07  
我用的是ddbi 2.4, 没有使用tango,用到的都是英文目录
30 楼 tomqyp 2007-03-06  
你用的是tango还是phobos看看buildme所用到的一些库是不是在中文目录里面
29 楼 闹海金蛟 2007-03-06  

D:\tags\0.2.4>dmd -run buildme.d sqlite
Error: 4invalid UTF-8 sequence
続行するには何かキーを押してください . . .

D:\tags\0.2.4>
28 楼 ideage 2007-03-03  
to tomqyp:
原因可能是:
1.和数据库的数据有关系,数据可能是空.
2.printf和writefln有BUG.
27 楼 tomqyp 2007-03-03  
ideage我编译通过了,但是执行程序时出现Access Violation
我参照你在DDBI论坛里的办法,找到是调用mysql_fetch_row函数时就会Access Violation
但是不知道是什么原因
26 楼 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下.再试试.
25 楼 闹海金蛟 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里面的东西嘛?)
24 楼 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..
23 楼 tomqyp 2007-03-02  
我MSN很少用,加进libmysql.lib用-I你的路径\libmysql.lib
codeblocks里  可能是Project->Build option->Linker setting 这里设置
22 楼 闹海金蛟 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怎么加到里面
21 楼 闹海金蛟 2007-03-02  
能留下两位的MSN吗?
想请教一下。
20 楼 闹海金蛟 2007-03-02  
D:\tags\0.2.4>build buildme.d
Error: 4invalid UTF-8 sequence

这是2.4版
19 楼 tomqyp 2007-03-02  
闹海金蛟你用用build.exe编译试试,或者tango带了一个工具jake应该跟build差不多,我用dmd编译也有你说的情况。
18 楼 tomqyp 2007-03-02  
跟你的情况有点不同,我的在调用mysql_fetch_row时就Access Violation了
17 楼 ideage 2007-03-02  
下载个2.4版本的.别用Tango.再试试.
16 楼 闹海金蛟 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
15 楼 ideage 2007-03-02  
和数据库的数据有关系,如果是空格数据或者是空就会发生.使用writefln就没有问题,用printf就错误.

当时的版本已经修复了我的问题.

最近不使用DDBI了. 不如用C访问,封装DLL方便.
14 楼 tomqyp 2007-03-02  
刚在DDBI论坛上看到你Access Violation问题的贴子了,不过我英文不好看不大明折,能说说是怎么解决的吗?
13 楼 tomqyp 2007-03-02  
谢谢 终于编译出来了
不地运行时 提示
Access Violation
这个是mysql的问题吗
12 楼 ideage 2007-02-28  
1. implib /s libmysql.lib libmysql.dll 使用加S的开关.
2.下载最新版本的DDBI.
3. dmd -run builddbi.d mssql 就可以了.

相关推荐

Global site tag (gtag.js) - Google Analytics