D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: D的数据库接口DDBI

yidabu 2007-4-27 19:36

D的数据库接口DDBI

D的数据库接口DDBI知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org        by:        ideage        from:        http://ideage.javaeye.com/blog/34553        所有的程序都可能访问数据库。为了让D兼容其他语言开发的数据库接口,并为开发者提供统一的访问形式,DDBI应运而生。        DDBI 包含几个核心的 类,包装了数据库的基本操作。        Row 包含了多个列的一个行。允许使用索引和列名访问行的数据。        Database 提供了一个抽象的数据库封装,包含了连接,执行Sql语句,返回行的函数。        Result 管理一个从数据库返回的结果集,返回多个Row。        statement 实现了动态参数构建sql语句的类,可以执行sql语句。        例子:        代码        [Copy to clipboard] [ - ]CODE:                                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/        ideage        2006-12-26 10:30( 本文出处: http://www.d-programming-language-china.org )        代码        [Copy to clipboard] [ - ]CODE:                                module testdbi;                                import dbi.all;                import dbi.mysql.all;                                import std.stdio;                import std.c.stdio;                import std.file;                                void main(char[][] args)                {                    // PgDatabase db = new PgDatabase();                    MysqlDatabase db = new MysqlDatabase();                    db.connect("dbname=test","test1","abc");                                    writefln("\ndump ...");                    Row[] rows;                                    try{                        rows = db.queryFetchAll("select ID,CITY from sample2");                    }                    catch(Object e)                    {                        printf("SysEROR: %.*s\n", e.toString());                    }                                                    foreach (Row row; rows)                    {                        writefln("ID: %s CITY: %s", row["ID"], row["CITY"]);                    }                                    db.close();                                    writefln("\npress ENTER key to continue");                    std.c.stdio.getchar();                }                闹海金蛟        2007-02-24 17:57        你是怎么编译的DDBI的呀,为什么我编译时会出现错误提示呢?        闹海金蛟        2007-02-24 18:08        错误提示:        :: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase7__ClassZ        :: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase5_ctorMFZC3dbi5mysql13MysqlDatabase13MysqlDatabase        :: Symbol Undefined _D3dbi8Database8Database13queryFetchAllMFAaZAC3dbi3Row3Row        :: Symbol Undefined _D3dbi3Row3Row7opIndexMFAaZAa        :: === Build finished: 4 errors, 0 warnings ===        ideage        2007-02-25 12:10        用implib 生成一个libmysql.lib        闹海金蛟        2007-02-26 09:00        刚刚接触D,能说得详细一点吗?( 本文出处: http://www.d-programming-language-china.org )        tomqyp        2007-02-28 00:01        用implib 生成一个libmysql.lib后        objs\MysqlDatabase.obj(MysqlDatabase)        Error 42: Symbol Undefined _mysql_real_connect        objs\MysqlDatabase.obj(MysqlDatabase)        Error 42: Symbol Undefined _mysql_errno        .............        后来在mysqlclient.lib找到这些函数,可mysqlclient.lib是coff格式的        请教一下你怎么编译出来的呢        ideage        2007-02-28 23:18        1. implib /s libmysql.lib libmysql.dll 使用加S的开关.        2.下载最新版本的DDBI.        3. dmd -run builddbi.d mssql 就可以了.        tomqyp        2007-03-02 03:00        谢谢 终于编译出来了        不地运行时 提示        Access Violation        这个是mysql的问题吗        tomqyp        2007-03-02 03:18        刚在DDBI论坛上看到你Access Violation问题的贴子了,不过我英文不好看不大明折,能说说是怎么解决的吗?( 本文出处: http://www.d-programming-language-china.org )        ideage        2007-03-02 11:34        和数据库的数据有关系,如果是空格数据或者是空就会发生.使用writefln就没有问题,用printf就错误.        当时的版本已经修复了我的问题.        最近不使用DDBI了. 不如用C访问,封装DLL方便.        ideage        2007-03-02 17:24        下载个2.4版本的.别用Tango.再试试.        tomqyp        2007-03-02 17:35        跟你的情况有点不同,我的在调用mysql_fetch_row时就Access Violation了( 本文出处: http://www.d-programming-language-china.org )        tomqyp        2007-03-02 17:40        闹海金蛟你用用build.exe编译试试,或者tango带了一个工具jake应该跟build差不多,我用dmd编译也有你说的情况。( 本文出处: http://www.d-programming-language-china.org )        闹海金蛟        2007-03-02 18:35        D:\tags\0.2.4>build buildme.d        Error: 4invalid UTF-8 sequence        这是2.4版        闹海金蛟        2007-03-02 18:39        :: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase7__ClassZ        :: Symbol Undefined _D3dbi5mysql13MysqlDatabase13MysqlDatabase5_ctorMFZC3dbi5mysql13MysqlDatabase13MysqlDatabase        :: Symbol Undefined _D3dbi8Database8Database13queryFetchAllMFAaZAC3dbi3Row3Row        :: Symbol Undefined _D3dbi3Row3Row7opIndexMFAaZAa        :: === Build finished: 4 errors, 0 warnings ===        这是在codeblocks里面编译的结果,请问第一页说的用libmysql.lib怎么加到里面( 本文出处: http://www.d-programming-language-china.org )        tomqyp        2007-03-02 23:25        我MSN很少用,加进libmysql.lib用-I你的路径\libmysql.lib        codeblocks里 可能是Project->Build option->Linker setting 这里设置        ideage        2007-03-02 23:31        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..( 本文出处: http://www.d-programming-language-china.org )        闹海金蛟        2007-03-03 09:14        我的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里面的东西嘛?)( 本文出处: http://www.d-programming-language-china.org )        ideage        2007-03-03 15:18        D:\tags\0.2.4\trunk>dmd -run buildme.d sqlite3 不对.        应该        D:\ProgramFiles\D\OpenSource>dmd buildme.d sqlite        没有3.把tags下的文件复制到opensource下.再试试.        tomqyp        2007-03-03 23:03        ideage我编译通过了,但是执行程序时出现Access Violation        我参照你在DDBI论坛里的办法,找到是调用mysql_fetch_row函数时就会Access Violation        但是不知道是什么原因( 本文出处: http://www.d-programming-language-china.org )        ideage        2007-03-03 23:54        to tomqyp:        原因可能是:        1.和数据库的数据有关系,数据可能是空.        2.printf和writefln有BUG.        闹海金蛟        2007-03-06 19:31        D:\tags\0.2.4>dmd -run buildme.d sqlite        Error: 4invalid UTF-8 sequence        続行するには何かキーを押してください . . .        D:\tags\0.2.4>        tomqyp        2007-03-06 22:24        你用的是tango还是phobos看看buildme所用到的一些库是不是在中文目录里面( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: D的数据库接口DDBI