BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #4576同步于 2010/7/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

[合集] 问个弱弱的问题,关于ODBC~

coolfantasy
2010/7/5镜像同步0 回复
☆─────────────────────────────────────☆ MeForever (帐房先生|【路】右将军府收账的) 于 (Wed Jun 9 04:13:26 2010) 提到: 其实不大好意思开出口,就是什么是ODBC。以前学数据库的时候打酱油了,╮(╯_╰)╭。 主要是毕设中用到了数据库,MYSQL。应用的很简单,在C中include了mysql头文件,调用了里面的几个接口函数就完成了连接啊插入数据啊什么的功能。在PHP中也是用几个函数就完成了查询啊等功能。这部分测试什么的都没问题,毕竟太简单了,汗一个。。。 结果今天给老师看论文的时候被无情的鄙视了,说知道到底什么是ODBC么。以前理解ODBC就是一种操作方式,在其他的程序代码当中建立和数据库的连接然后对数据库进行操作,不过上网查了一下好像不是这个样子滴,也不大理解,期待大牛教导。还有PHP和C中对数据库的操作都属于ODBC么~谢过先哈 ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Wed Jun 9 08:23:09 2010) 提到: 个人很鄙视odbc方式访问数据库,纯属个人意见,觉得odbc很sb,楼主不知道也罢 ☆─────────────────────────────────────☆ zzcc (足兆叉虫) 于 (Wed Jun 9 11:08:23 2010) 提到: 我也这么觉得的。。 【 在 newtj 的大作中提到: 】 : 个人很鄙视odbc方式访问数据库,纯属个人意见,觉得odbc很sb,楼主不知道也罢 ☆─────────────────────────────────────☆ MeForever (帐房先生|【路】右将军府收账的) 于 (Wed Jun 9 11:50:02 2010) 提到: 好吧。。。不管ODBC如何SB但是毕设还是要过的,ODBC属于微软提供的一种对数据库操作的接口,可以这样理解么 【 在 newtj 的大作中提到: 】 : 个人很鄙视odbc方式访问数据库,纯属个人意见,觉得odbc很sb,楼主不知道也罢 : -- ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Wed Jun 9 12:24:51 2010) 提到: 用MySQL Connector,下载网址http://www.mysql.com/products/connector/ c MySQL Connector方式连接mysql的例子:http://www.51cto.com/art/200509/3282.htm 很少用odbc,因为odbc还得在Windows的管理工具中配置,这样跟操作系统关系太紧密了,把程序拷到别的机子上就得配置odbc,所以我觉得odbc很sb 【 在 MeForever 的大作中提到: 】 : 好吧。。。不管ODBC如何SB但是毕设还是要过的,ODBC属于微软提供的一种对数据库操作的接口,可以这样理解么 ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Wed Jun 9 21:26:33 2010) 提到: 如果您是软件开发人员,需要连接10种不同的数据库,将来软件升级,还要陆续能够连接100种不同的数据库,就会知道配置ODBC和重写100次软件程序,哪个更SB了。当然现在有Java,有JDBC,不过要知道ODBC是Java还没有出现之前,C/C++大行其道的时候面世的。 话说,您用MySQL Connector连接我的Oracle数据库吧,(假如)我这里是大银行,只有Oracle,不使用MySQL。 【 在 newtj 的大作中提到: 】 : 用MySQL Connector,下载网址http://www.mysql.com/products/connector/ : c MySQL Connector方式连接mysql的例子:http://www.51cto.com/art/200509/3282.htm : 很少用odbc,因为odbc还得在Windows的管理工具中配置,这样跟操作系统关系太紧密了,把程序拷到别的机子上就得配置odbc,所以我觉得odbc很sb ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Thu Jun 10 11:59:59 2010) 提到: 不用odbc不代表重写100此程序吧????。。。。。。。。。。可以把数据库连接信息写在配置文件中,每次更改数据库只需修改配置文件即可 【 在 dragon2000 的大作中提到: 】 : 如果您是软件开发人员,需要连接10种不同的数据库,将来软件升级,还要陆续能够连接100种不同的数据库,就会知道配置ODBC和重写100次软件程序,哪个更SB了。当然现在有Java,有JDBC,不过要知道ODBC是Java还没有出现之前,C/C++大行其道的时候面世的。 : 话说,您用MySQL Connector连接我的Oracle数据库吧,(假如)我这里是大银行,只有Oracle,不使用MySQL。 ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Thu Jun 10 16:10:30 2010) 提到: 我很想知道这个配置文件是由什么程序来读取的,又是怎么连接不同数据库的。 换句话说,您不用重写程序,又不用ODBC接口,那是什么东西在让配置文件自动连接不同数据库的呢? 【 在 newtj 的大作中提到: 】 : 不用odbc不代表重写100此程序吧????。。。。。。。。。。可以把数据库连接信息写在配置文件中,每次更改数据库只需修改配置文件即可 ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Fri Jun 11 08:37:42 2010) 提到: 当然得自己写接口程序读,按照不同的驱动比如sqlClient driver --》sql server oledb-->acess ,oracleClient-->oracle,mysql connector-->mysql,针对不同的驱动对应不同的数据库,当然如果按你说的搞100个数据库类型那真没辙。。。。。事实上没人这么干的。 odbc最大的不便就是,如果cs结构的,给用户用的话,就得去用户的机子配odbc,这样岂不是很麻烦,而且用户愿意给他的机子给你配吗,具体项目中用odbc确实不多见,而是自己写个数据库访问接口,读特定的几种常用数据库。一个系统不可能适应任何数据库的,即使用odbc也不敢保证换数据库不需要重写代码,不同的数据库,sql语法以及其中的函数,比如时间函数(sql server-->getdate(),oracle-->sysdate,db2-->current date)还有些微小区别。适应总是有限的 【 在 dragon2000 的大作中提到: 】 : 我很想知道这个配置文件是由什么程序来读取的,又是怎么连接不同数据库的。 : 换句话说,您不用重写程序,又不用ODBC接口,那是什么东西在让配置文件自动连接不同数据库的呢? ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Fri Jun 11 08:44:40 2010) 提到: odbc最大的不便在于,一个系统高度依赖于运行的操作系统,假如这个系统有10000个用户,需要安装在10000个客户机上,而且这10000个客户机还不在一个地方。而且用户的机器因为保密方面的要求不允许其他用户操作,这种情况用odbc还真不好解决。 ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Fri Jun 11 09:03:09 2010) 提到: 敝人曾经在一个小系统中写了类似的代码;把所有需要访问的数据库写在xml配置文件中,用户名密码加密存储 <?xml version="1.0" encoding="gb2312"?> <system name ="111111111111111111111111111111111 test"> <DATABASE> <DBSYSNAME>*****</DBSYSNAME> <DBTYPE>sqlserver</DBTYPE> <DBPROVIDER></DBPROVIDER> <DBLOCATION>172.19.96.*****</DBLOCATION> <DBSOURCE>*****</DBSOURCE> <DBUID>*****</DBUID> <DBPWD>*****!</DBPWD> </DATABASE> <DATABASE> <DBSYSNAME>*****</DBSYSNAME> <DBTYPE>sqlserver</DBTYPE> <DBPROVIDER></DBPROVIDER> <DBLOCATION>172.19.32.*****</DBLOCATION> <DBSOURCE>*****</DBSOURCE> <DBUID>*****</DBUID> <DBPWD> <![CDATA[SmisHre4^&*(J]]> </DBPWD> </DATABASE> <DATABASE> <DBSYSNAME>*****</DBSYSNAME> <DBTYPE>db2as400</DBTYPE> <DBPROVIDER>IBMDA400.DataSource.1</DBPROVIDER> <DBLOCATION>172.19.32.*****</DBLOCATION> <DBSOURCE></DBSOURCE> <DBUID>*****</DBUID> <DBPWD> <![CDATA[S9c6o3M@]]> </DBPWD> </DATABASE> <DATABASE> <DBSYSNAME>11111111111111111</DBSYSNAME> <DBTYPE>db2udb</DBTYPE> <DBPROVIDER>IBMDADB2.DB2COPY1</DBPROVIDER> <DBLOCATION>172.111111.32.*****</DBLOCATION> <DBSOURCE>qqqqqqq</DBSOURCE> <DBUID>qqqqqqq</DBUID> <DBPWD>qqqqqqq</DBPWD> </DATABASE> <DATABASE> <DBSYSNAME>111111111111111111</DBSYSNAME> <DBTYPE>sqlserver</DBTYPE> <DBPROVIDER></DBPROVIDER> <DBLOCATION> <![CDATA[LENOVOO\SQLEXPRESS]]> </DBLOCATION> <DBSOURCE>s111db</DBSOURCE> <DBUID>*****</DBUID> <DBPWD>test</DBPWD> </DATABASE> <DATABASE> <DBSYSNAME>cn7c073</DBSYSNAME> <DBTYPE>sqlserver</DBTYPE> <DBPROVIDER></DBPROVIDER> <DBLOCATION> <![CDATA[LENOVOO\SQLEXPRESS]]> </DBLOCATION> <DBSOURCE>cn7c073_db</DBSOURCE> <DBUID>*****</DBUID> <DBPWD>test</DBPWD> </DATABASE> <DATABASE> <DBSYSNAME>cn7c073_remote</DBSYSNAME> <DBTYPE>sqlserver</DBTYPE> <DBPROVIDER></DBPROVIDER> <DBLOCATION> <![CDATA[121.198.163.*]]> </DBLOCATION> <DBSOURCE>cn7c073_db</DBSOURCE> <DBUID>*****</DBUID> <DBPWD>111111111111111111111</DBPWD> </DATABASE> </system> 类似这种,针对这几个数据库的访问,封装成统一的数据库访问接口,在外一律是excuteQuery,excuteUpdate操作,变更地址,只需修改配置文件就行,当然代码量可能比odbc多,不过多不了多少代码,换来的是不需在具体的客户机中配置odbc,用户方便,自己也省心。 【 在 newtj 的大作中提到: 】 : 当然得自己写接口程序读,按照不同的驱动比如sqlClient driver --》sql server oledb-->acess ,oracleClient-->oracle,mysql connector-->mysql,针对不同的驱动对应不同的数据库,当然如果按你说的搞100个数据库类型那真没辙。。。。。事实上没人这么干的。 : odbc最大的不便就是,如果cs结构的,给用户用的话,就得去用户的机子配odbc,这样岂不是很麻烦,而且用户愿意给他的机子给你配吗,具体项目中用odbc确实不多见,而是自己写个数据库访问接口,读特定的几种常用数据库。一个系统不可能适应任何数据库的,即使用odbc也不敢保证换数据库不需要重写代码,不同的数据库,sql语法以及其中的函数,比如时间函数(sql server-->getdate(),oracle-->sysdate,db2-->current date)还有些微小区别。适应总是有限的 ☆─────────────────────────────────────☆ zzcc (足兆叉虫) 于 (Fri Jun 11 13:15:47 2010) 提到: 数据库的选择肯定要比软件的选择稳定得多,即使要链接不同的数据库,也可以把连接方法进行一次封装,进行更改就行了。 而且即使有ODBC也没用,我们学数据库那个合作的SB SYSBASE,甚至都不提供单独的ODBC连接器。难道去一台机器上用还得完全安装他的服务器程序?除非用户就那么一两个还差不多 【 在 dragon2000 的大作中提到: 】 : 如果您是软件开发人员,需要连接10种不同的数据库,将来软件升级,还要陆续能够连接100种不同的数据库,就会知道配置ODBC和重写100次软件程序,哪个更SB了。当然现在有Java,有JDBC,不过要知道ODBC是Java还没有出现之前,C/C++大行其道的时候面世的。 : 话说,您用MySQL Connector连接我的Oracle数据库吧,(假如)我这里是大银行,只有Oracle,不使用MySQL。 ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Fri Jun 11 20:24:44 2010) 提到: 也就是说,您的自己写接口程序的方法,如果也象您所说的的是CS架构的,给用户用的话,就得去用户的机子装各种驱动程序,比如sqlClient driver --》sql server oledb-->acess ,oracleClient-->oracle,mysql connector-->mysql …… 我们不用100个数据库了,就上面几种数据库好不?您去每个用户的机子装几个数据库驱动,别人就去装一个ODBC。不知道谁更麻烦一些。 具体项目中ODBC不多见,这个不知道您遇到的具体项目有多少个,覆盖了多大的业务范围,尤其是Java还没有兴起的时候做过多少项目。这个确实会影响到您接触到的视野范围,以及对数据库接口的理解。 写死单独一个数据库的程序,不兼容其它数据库的项目不是没有,而且我也做过不少,封闭式系统自有封闭式系统的用途。但是单凭这个经验是不可能理解ODBC或者JDBC接口的,拿封闭式系统来评价ODBC(其中O就是Open,DB就是数据库),您觉得说服力有多大? 【 在 newtj 的大作中提到: 】 : 当然得自己写接口程序读,按照不同的驱动比如sqlClient driver --》sql server oledb-->acess ,oracleClient-->oracle,mysql connector-->mysql,针对不同的驱动对应不同的数据库,当然如果按你说的搞100个数据库类型那真没辙。。。。。事实上没人这么干的。 : odbc最大的不便就是,如果cs结构的,给用户用的话,就得去用户的机子配odbc,这样岂不是很麻烦,而且用户愿意给他的机子给你配吗,具体项目中用odbc确实不多见,而是自己写个数据库访问接口,读特定的几种常用数据库。一个系统不可能适应任何数据库的,即使用odbc也不敢保证换数据库不需要重写代码,不同的数据库,sql语法以及其中的函数,比如时间函数(sql server-->getdate(),oracle-->sysdate,db2-->current date)还有些微小区别。适应总是有限的 ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Fri Jun 11 20:31:48 2010) 提到: 还XML文件,这是典型的用热兵器时代的武器来打史前的武士。谁都知道现在是B/S架构取代了C/S架构。您用这个的话,别人完全可以在B/S架构的应用服务器上装个ODBC,只需要配一个ODBC,然后每个客户端只要有浏览器就行了,连到Web服务器上,更省事。 【 在 newtj 的大作中提到: 】 : 敝人曾经在一个小系统中写了类似的代码;把所有需要访问的数据库写在xml配置文件中,用户名密码加密存储 : <?xml version="1.0" encoding="gb2312"?> : <system name ="111111111111111111111111111111111 test"> : ................... ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Fri Jun 11 20:35:10 2010) 提到: ODBC是C/S架构时代的产物,但是从来没人说过ODBC只能用在C/S架构上。B/S三层架构中,把ODBC装在应用服务器上就行了,更简单的两层架构,ODBC装在Web服务器上就行。10000个用户全是用的浏览器。 【 在 newtj 的大作中提到: 】 : odbc最大的不便在于,一个系统高度依赖于运行的操作系统,假如这个系统有10000个用户,需要安装在10000个客户机上,而且这10000个客户机还不在一个地方。而且用户的机器因为保密方面的要求不允许其他用户操作,这种情况用odbc还真不好解决。 ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Fri Jun 11 20:45:02 2010) 提到: 也就是说,要想连接不同的数据库,您的方法还得先进行一次封装,而别人直接用ODBC(也可以JDBC或者其它接口)就行了。 对于不支持ODBC的数据库,那就是它本来就不打算兼容,就是准备要做封闭式系统的。这种情况可不是ODBC的责任啊,选择这种数据库本身就是选择封闭的道路嘛。道不同不相为谋,虽然我是两条路都支持,都包容,但是正在这条路上的时候,是不会去评判另一个世界的ODBC的。 【 在 zzcc 的大作中提到: 】 : 数据库的选择肯定要比软件的选择稳定得多,即使要链接不同的数据库,也可以把连接方法进行一次封装,进行更改就行了。 : 而且即使有ODBC也没用,我们学数据库那个合作的SB SYSBASE,甚至都不提供单独的ODBC连接器。难道去一台机器上用还得完全安装他的服务器程序?除非用户就那么一两个还差不多 ☆─────────────────────────────────────☆ xfsofi (sofi) 于 (Fri Jun 11 22:55:47 2010) 提到: 受益匪浅 ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Sat Jun 12 08:06:50 2010) 提到: 配置odbc也需要驱动的哦,比如配置db2 as400的odbc,就得安装db2 as400的驱动,配置oracle odbc就得安装oracle客户端(装了后才有驱动),不信你试试。 对于系统更换数据库来说,数据库连接这一块修改最少,更多的修改在于里面的sql语法和书写方式。看我前几个回复贴举的例子,当然如果真觉得odbc好那你还是用odbc,各有特点吧 【 在 dragon2000 的大作中提到: 】 : 也就是说,您的自己写接口程序的方法,如果也象您所说的的是CS架构的,给用户用的话,就得去用户的机子装各种驱动程序,比如sqlClient driver --》sql server oledb-->acess ,oracleClient-->oracle,mysql connector-->mysql …… 我们不用100个数据库了,就上面几种数据库好不?您去每个用户的机子装几个数据库驱动,别人就去装一个ODBC。不知道谁更麻烦一些。 : 具体项目中ODBC不多见,这个不知道您遇到的具体项目有多少个,覆盖了多大的业务范围,尤其是Java还没有兴起的时候做过多少项目。这个确实会影响到您接触到的视野范围,以及对数据库接口的理解。 : 写死单独一个数据库的程序,不兼容其它数据库的项目不是没有,而且我也做过不少,封闭式系统自有封闭式系统的用途。但是单凭这个经验是不可能理解ODBC或者JDBC接口的,拿封闭式系统来评价ODBC(其中O就是Open,DB就是数据库),您觉得说服力有多大? ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Sat Jun 12 08:23:23 2010) 提到: 这个比喻挺好,我不知道xml文件诞生多久了,不过敝人从事开发确实没多久,对于冷兵器时代的产物很少接触,比如大学学的Pascal只是个传说,刚开始接触odbc的时候真有点抵触情绪。后来发现xml这个强大的东西,很是不错,连sql都可以写在里面(成熟的框架iBATIS(java和dotnet都有)),xml真是好东西 【 在 dragon2000 的大作中提到: 】 : 还XML文件,这是典型的用热兵器时代的武器来打史前的武士。谁都知道现在是B/S架构取代了C/S架构。您用这个的话,别人完全可以在B/S架构的应用服务器上装个ODBC,只需要配一个ODBC,然后每个客户端只要有浏览器就行了,连到Web服务器上,更省事。 ☆─────────────────────────────────────☆ dragon2000 (龙之梦工作室) 于 (Sat Jun 12 16:29:13 2010) 提到: SQL语句细节不兼容的问题,算是几个大数据库厂商不厚道,其实它们支持通用接口的时候想要统一格式的话,对厂商来说是轻而易举的事。这个的具体处理方法就不讨论了,网上也有不少。 确实是先装驱动才有ODBC,那么打包连接程序和ODBC的区别,就剩下自己写配置程序还是手工来配置了。至于用XML文件直接配置,那是因为别人已经写好了连接程序,例如JDBC和一些新的软件框架,或者CICS之类的中间件。这些跟ODBC接口的理念是一脉相承的,当然越新的接口会做得越完善。用发展的眼光来看这些东西就行。 所以我说用ODBC、JDBC或者其它,其实一样是利用了通用接口,而不是自己针对具体的数据库来写连接程序。(典型的,使用MySQL库文件来编程,就属于针对特定数据库。如果多几种数据库就会吃不消。) 写程序多了,就不想再耗时间在编写代码来处理数据库连接上,用ODBC手工配置也不算复杂,熟练了就很容易,反正系统总还是需要安装调试的。尤其用了B/S之类的轻量级客户端的架构,已经不需要做多少重复性工作。用JDBC之类更没问题。 【 在 newtj 的大作中提到: 】 : 配置odbc也需要驱动的哦,比如配置db2 as400的odbc,就得安装db2 as400的驱动,配置oracle odbc就得安装oracle客户端(装了后才有驱动),不信你试试。 : 对于系统更换数据库来说,数据库连接这一块修改最少,更多的修改在于里面的sql语法和书写方式。看我前几个回复贴举的例子,当然如果真觉得odbc好那你还是用odbc,各有特点吧 ☆─────────────────────────────────────☆ newtj (纽特购) 于 (Sun Jun 13 08:12:12 2010) 提到: 明白你的意思了,不过你说的: (典型的,使用MySQL库文件来编程,就属于针对特定数据库。如果多几种数据库就会吃不消。) 这多的“几种数据库”,也不妨写成一个统一的数据库访问接口,上面我那个xml文件举的例子就是这样的,都是针对几种特定类型的数据库(把这几种数据库类型写在配置文件中,写个xml解析类,统一数据库访问接口,代码也就100来行就能搞定)。一个系统能做到同时可以访问几种常用的数据库类型就可以了。 不过我上面说的理念和odbc表达的理念还是一样的,只是配置的方式不一样,odbc需要odbc配置管理工具,xml配置比较方便移植。个人还是倾向后者 【 在 dragon2000 的大作中提到: 】 : SQL语句细节不兼容的问题,算是几个大数据库厂商不厚道,其实它们支持通用接口的时候想要统一格式的话,对厂商来说是轻而易举的事。这个的具体处理方法就不讨论了,网上也有不少。 : 确实是先装驱动才有ODBC,那么打包连接程序和ODBC的区别,就剩下自己写配置程序还是手工来配置了。至于用XML文件直接配置,那是因为别人已经写好了连接程序,例如JDBC和一些新的软件框架,或者CICS之类的中间件。这些跟ODBC接口的理念是一脉相承的,当然越新的接口会做得越完善。用发展的眼光来看这些东西就行。 : 所以我说用ODBC、JDBC或者其它,其实一样是利用了通用接口,而不是自己针对具体的数据库来写连接程序。(典型的,使用MySQL库文件来编程,就属于针对特定数据库。如果多几种数据库就会吃不消。) : ................... [em18]
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。