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

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 就可以了.

相关推荐

    D语言操作Sqlite

    在D语言中,我们需要通过`ddbi`或其他第三方库如`sqlitedome`来封装这个接口,以便于在D程序中进行数据库操作。 4. **数据库连接与操作**:使用`ddbi`或`sqlitedome`,开发者可以创建数据库连接,执行SQL语句,如...

    ddbi:Dynamodb Api 生成库和工具

    DDBI - DynamoDB 接口生成器 这是一个接口生成器,用于通过与 Dynamodb 接口。 本质上,您使用 lispish sexpressions 在 ddbi 文件中定义一条记录,并对该文件调用ddbi命令。 定义记录 记录使用以下语法定义 field-...

    Java连接Mysql,SQL Server, Access,Oracle实例

    本文将详细介绍如何使用 Java 语言连接四种常见类型的数据库:MySQL、SQL Server、Access 和 Oracle,并提供具体的代码示例。 #### 1. Java 连接 MySQL 数据库 为了实现 Java 应用程序与 MySQL 数据库之间的通信,...

    铁塔天馈系统6

    4. **天线增益表示方法**:**DDBI=DBD+2.15**。DBI表示相对于各向同性辐射源的增益,DBD表示相对于偶极子的增益,两者之间的转换关系为DBI=DBD+2.15。 5. **馈线固定方式**:**A扎带捆扎**。当塔上无法使用馈线卡...

    U盘量产工具SM3280&3281&3282-AvidiaV0209整合版

    U盘量产工具FLASH量产工具SM3280&3281&3282-AvidiaV0209整合版

    java课程期末考试.zip

    java课程期末考试

    分布式消息中间件,参考kafka,未完成.zip

    分布式消息中间件,参考kafka,未完成

    修木工施工规范及流程.docx

    修木工施工规范及流程.docx

    汽车电子中MICROSAR OBD协议栈解决方案及其应用

    内容概要:本文详细介绍了VECTOR提供的MICROSAR OBD协议栈解决方案,涵盖了OBD模块、ECU支持、监控功能和服务请求等方面的内容。此外,还讨论了OBD在不同国家和地区的技术标准与法规要求,以及MICROSAR OBD解决方案的优势,如适应不同项目的需求和高度集成于AUTOSAR 4平台。 适合人群:汽车电子工程师、软件开发者、汽车制造商及相关行业从业人员。 使用场景及目标:① 适用于车辆诊断系统的开发和维护;②帮助工程师理解和掌握OBD协议的具体实施方法和应用场景;③ 提供了一个成熟、可扩展的解决方案,用于满足OBD相关标准和法规的要求。 其他说明:本文不仅提供了技术层面的详细解析,还探讨了实际操作过程中可能遇到的问题和解决方案。同时强调了屏蔽信息过载的重要性,提醒工程师保持内心平静,专注做好本职工作。

    适用于 Python 的 LINE 消息 API SDK.zip

    适用于 Python 的 LINE 消息 API SDK适用于 Python 的 LINE Messaging API 的 SDK。介绍适用于 Python 的 LINE Messaging API SDK 可以轻松使用 LINE Messaging API 开发机器人,您可以在几分钟内创建一个示例机器人。文档请参阅官方 API 文档了解更多信息英语https //developers.line.biz/en/docs/messaging-api/overview/日语https://developers.line.biz/ja/docs/messaging-api/overview/要求Python >= 3.9安装$ pip 安装 line-bot-sdk概要用法from flask import Flask, request, abortfrom linebot.v3 import ( WebhookHandler)from linebot.v3.exceptions import ( InvalidSig

    Java字节码工程工具包.zip

    Java字节码工程工具包Javassist 版本 3版权所有 (C) 1999-2023 Shigeru Chiba,保留所有权利。Javassist(JAVA 编程助手)使 Java 字节码操作变得简单。它是一个用于编辑 Java 字节码的类库它使 Java 程序能够在运行时定义新类并在 JVM 加载类文件时对其进行修改。与其他类似的字节码编辑器不同,Javassist 提供两个级别的 API源代码级别和字节码级别。如果用户使用源代码级别 API,他们可以编辑类文件而无需了解 Java 字节码的规范。整个 API 仅使用 Java 语言的词汇表进行设计。您甚至可以以源文本的形式指定插入的字节码Javassist 会即时编译它。另一方面,字节码级别 API 允许用户像其他编辑器一样直接编辑类文件。该软件根据 Mozilla 公共许可证版本 1.1、GNU 宽通用公共许可证版本 2.1 或更高版本或 Apache 许可证版本 2.0 分发。文件README.md 此自述文件。Changes.md 发行说明。License.html 许可证文件。tuto

    毕设源码-基于python的西西家居全屋定制系统的设计与实现_ijsj--论文-期末大作业+说明文档.rar

    本项目是基于Python语言开发的西西家居全屋定制系统,旨在为家居行业提供一个高效、智能的定制解决方案。项目涵盖了从客户需求分析、设计方案生成、材料选购到最终订单生成的全过程,力求实现家居定制的数字化和智能化。 在主要功能方面,系统具备强大的客户管理模块,能够详细记录和分析客户的定制需求。设计模块则采用先进的三维建模技术,为客户提供直观、真实的家居设计方案预览。此外,系统还整合了丰富的材料数据库,方便客户根据自身喜好和预算进行材料选择。 框架方面,项目采用了B/S架构,确保了系统的稳定性和可扩展性。后端使用Python的Django框架,前端则结合了HTML、CSS和JavaScript等技术,实现了用户界面的友好和响应速度。 开发此项目的目的,不仅是为了满足家居行业对个性化定制的需求,也为计算机相关专业的学生提供了一个实践和学习的平台,有助于提升他们的实际开发能力。

    Javascript 是数字化创新的起点,是语言的基础,也是基本概念 .zip

    Javascript 是数字化创新的起点,是语言的基础,也是基本概念。Basecamp JavascriptJavascript 是数字化创新的起点,是语言的基础,也是基本概念。嵌套存储库,可作为启动项下待办事项的实践活动。

    已弃用 - Coinbase Python API.zip

    已弃用 — Coinbase Python APICoinbase Coinbase API V2的官方 Python 库。重要提示此库当前针对的是 API V2,而 OAuth 客户端需要 V2 权限(即wallet:accounts:read)。如果您仍在使用 API V1,请使用此库的旧版本。特征接近 100% 的测试覆盖率。支持API Key + Secret和OAuth 2身份验证。调用 API 的便捷方法 - 为您打包 JSON!自动将 API 响应解析为相关的 Python 对象。使用IPython时,所有对象都具有可制表完成的方法和属性。安装coinbase可以在PYPI上使用。使用以下命令安装pippip install coinbase或者easy_installeasy_install coinbase该库目前针对 Python 版本 2.7 和 3.4+ 进行了测试。注意此软件包名称过去是指George Sibble维护的非官方 coinbase_python 库。George 慷慨地允许我们使用此软件包

    基于RBAC权限控制的基础后台.zip

    基于RBAC权限控制的基础后台

    毕设源码-python-基于Python爬虫的网络小说数据分析系统的设计与实现-期末大作业+说明文档.rar

    本项目是基于Python爬虫的网络小说数据分析系统的设计与实现,旨在为计算机相关专业的大学生提供一个实践平台,特别是在毕业设计和项目实战练习方面。项目通过Python强大的网络爬虫技术,从流行的网络小说网站自动抓取数据,包括书籍信息、章节内容、用户评论等。 主要功能涵盖数据采集、数据清洗、数据存储和数据分析。数据采集模块利用Scrapy等爬虫框架高效抓取网页内容;数据清洗模块确保数据的准确性和一致性;数据存储则采用MySQL等数据库系统,便于数据管理和查询;数据分析模块通过Pandas、NumPy等工具进行数据处理和分析,生成多维度的统计报告和可视化图表。 此项目不仅帮助学生掌握Python编程和网络爬虫技术,还能让他们深入了解数据分析的全过程,提升解决实际问题的能力。同时,系统的实现和应用也反映了现代信息技术在文学创作和消费领域的应用价值和潜力。

    ssm框架Java项目源码-基于Java的在线日语培训平台的设计与实现+jsp毕设-大作业.zip

    本项目是一个基于Java的在线日语培训平台的设计与实现,采用SSM框架(Spring+SpringMVC+MyBatis)进行开发,旨在为计算机相关专业的学生提供一个实践和学习的平台,同时也为日语学习者提供一个在线学习的空间。项目中主要功能涵盖了用户管理、课程管理、学习资源上传下载、在线测试与反馈等多个方面。通过该平台,教师能够轻松管理课程内容和学生信息,学生则可以随时随地访问学习资源,参与在线课程和测试,从而提高学习效率和兴趣。 在开发此项目的过程中,我们重点关注了系统的可维护性和可扩展性,确保代码结构清晰,便于后续的功能迭代和优化。此外,通过使用SSM框架,实现了前后端的分离,提高了开发效率和系统的响应速度。该项目不仅能够满足毕设的需求,还能作为Java学习者提升编程能力和实践经验的实用工具。

    基于java的机票管理系统设计与实现.docx

    基于java的机票管理系统设计与实现.docx

    基于Java实现的数据结构设计源码学习指南

    该项目为《基于Java实现的数据结构设计源码》,共包含51个文件,主要由46个Java源文件构成,辅以2个文本文件、1个Git忽略文件、1个许可证文件以及1个XML文件,全面涵盖了数据结构设计的核心内容。

    绿色食品 水稻生产操作规程.docx

    绿色食品 水稻生产操作规程.docx

Global site tag (gtag.js) - Google Analytics