开放式数据连接(精选5篇)
开放式数据连接 篇1
在搭建FTP文件传输服务器时, 使用最多的是向导傻瓜式的配置方式。近日由于业务拓展的需要, 笔者在防火墙的DMZ区搭建了一个FTP文件传输平台。借此机会, 笔者对FTP的数据传输方式进行了研究, 并特别对FTP数据连接的主动方式与被动方式作了深入分析。
一、FTP的工作原理
FTP (File Transfer Protocol, 文件传输协议) 的会话建立时包含了2个通道, 一个叫控制通道, 另一个叫数据通道。控制通道是与FTP服务器进行沟通的通道, 连接FTP和发送FTP指令都是通过控制通道来完成的。数据通道是与FTP服务器进行文件传输或列表通道。与其他网络服务不同的是FTP使用2个端口, 一个数据传输端口和一个命令端口 (也叫做控制端口) 。通常来说, 这2个端口代码是21 (命令端口) 和20 (数据传输端口) 。
二、FTP数据连接的工作方式
FTP服务器处理防火墙和其他网络连接问题时, 最常见的一个难题是明确主动FTP与被动FTP的区别, 以及如何完美地支持它们。FTP是仅基于TCP协议的网络服务, 而不支持UDP协议。在FTP协议会话中, 控制连接均由客户端发起, 而数据连接有2种工作方式, 下面分别详解这2种方式。
(一) FTP主动方式 (PORT)
1. 主动方式FTP的工作原理
客户端从一个任意的非特权端口N (N>1 024) 连接到FTP服务器的命令端口, 即21端口;然后客户端开始监听N+1端口, 并发送FTP命令“port N+1”到FTP服务器;接着服务器会从数据端口 (20) 连接到客户端指定的数据端口 (N+1) 。
针对FTP服务器前面的防火墙来说, 必须允许以下通信才能支持主动方式FTP:任何客户端端口到FTP服务器的21端口 (客户端初始化的连接Server←Client) ;FTP服务器的21端口到大于1 024的客户端端口 (服务器响应客户端的控制端口Server→Client) ;FTP服务器的20端口到大于1 024的客户端端口 (服务器端初始化数据连接到客户端的数据端口Server→Client) ;大于1024客户端端口到FTP服务器的20端口 (客户端发送ACK响应到服务器的数据端口Server←Client) 。基本连接过程如图1所示。
第1步, 客户端的命令端口与FTP服务器的命令端口建立连接, 并发送命令“PORT 1027”;
第2步, FTP服务器给客户端的命令端口返回一个“ACK” (应答代码) ;
第3步, FTP服务器发起一个从数据端口 (20) 到客户端先前指定的数据端口 (1027) 的连接;
第4步, 客户端给服务器端返回一个“ACK”。
2. 主动方式FTP分析
主动方式FTP面临的问题实际上在客户端, FTP的客户端并没有实际建立一个到服务器数据端口的连接, 只是简单地告诉服务器自己监听的端口号, 服务器再回来连接客户端这个指定的端口。对于客户端操作系统的防火墙来说, 这是从外部系统建立到内部系统客户端的连接, 通常来讲这是会被阻塞的。
(二) 被动FTP方式 (PASV)
为了解决服务器发起到客户的连接问题, 人们开发了一种不同的FTP连接方式——被动方式 (PASV) , 当客户端通知服务器处于被动模式时才启用。在被动方式FTP中, 命令连接和数据连接都由客户端发起, 这样就可以解决从服务器端到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
1. 被动方式FTP的工作原理
当开启一个FTP连接时, 客户端打开2个任意的非特权本地端口 (N>1 024和N+1) 。第一个端口连接服务器的21端口, 但与主动方式的FTP不同, 客户端不会提交PORT命令并允许服务器来回连它的数据端口, 而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口 (P>1 024) , 并发送“PORT P”命令给客户端, 然后客户端发起从本地端口N+1到服务器的端口P的连接, 用来传送数据。
对于服务器端的防火墙来说, 必须允许下面的通信才能支持被动方式的FTP:从任何客户端端口到服务器的21端口 (客户端初始化的连接Server←Client) ;服务器的21端口到任何大于1 024的客户端端口 (服务器响应到客户端的控制端口的连接Server→Client) ;从任何客户端端口到服务器的大于1 024端口 (客户端初始化数据连接到服务器指定的任意端口Server←Client) ;服务器的大于1 024端口到远程的大于1 024的客户端端口 (服务器发送ACK响应和数据到客户端的数据端口Server→Client) 。基本连接过程如图2所示。
图2中各步行为具体过程描述为:
第1步, 客户端的命令端口与服务器的命令端口建立连接, 并发送命令“PASV”;
第2步, 服务器返回命令“PORT 2024”, 告诉客户端服务器端用哪个端口侦听数据连接;
第3步, 客户端初始化一个从数据端口到服务器端指定的数据端口的数据连接;
第4步, 服务器给客户端的数据端口返回一个“ACK”响应。
2. 被动方式FTP分析
被动方式FTP解决了客户端的许多问题, 但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是, 许多FTP守护程序, 允许管理员指定FTP服务器使用的端口范围。第二个问题是有的客户端支持被动模式, 有的不支持被动模式, 必须考虑如何能支持这些客户端。例如, Solaris提供的FTP命令行工具就不支持被动模式, 需要第三方的FTP客户端;大多数浏览器只在访问ftp://URL地址时才支持被动模式。
三、主动方式与被动方式的比较分析
主动方式FTP对FTP服务器的管理有利, 但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接, 而这个端口很有可能被客户端的防火墙阻塞。被动方式FTP对FTP客户端的管理有利, 但对服务器端的管理不利。因为客户端要与服务器端建立2个连接, 其中一个连到高位随机端口, 而这个端口很有可能被服务器端的防火墙阻塞。
经过不断的探索研究, 人们找到了一种折衷的办法。既然FTP服务器的管理员需要有最多的客户端连接, 那么必须支持被动方式FTP, 可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样, 不在这个范围的任何端口会被服务器的防火墙阻塞, 虽然没有彻底消除所有针对服务器的危险连接, 但已经大大降低了风险程度。
开放式数据连接 篇2
通过监听
TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED
这条broadcast,
然后通过如下方式可以获取当前是哪张卡在建立数据链接:
GB,ICS,ICS2,JB版本请使用:
String state =intents.getStringExtra(Phone.STATE_KEY);
JB2,JB3,JB5版本请使用
String state =intents.getStringExtra(PhonConstants.STATE_KEY);
if(state.equals(CONNECTED)){
SIMInfo si = SIMInfo.getSIMInfoBySlot(context, intent.getIntExtra (Phone.GEMINI_SIM_ID_KEY,Phone.GEMINI_SIM_1));
int simId = (int)si.mSimId;
,
Android 获取当前数据连接的状态
,
。。。。
}
2.如果需要同时监听WIFI和Mobile State
可以监听
ConnectivityManager.CONNECTIVITY_ACTION这条广播
然后可以获取
NetworkInfo info = (NetworkInfo)intent.getExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
在获取当前的网络类型
Type = info.getType();
通过判断Type是
ConnectivityManager.TYPE_MOBILE还是ConnectivityManager.TYPE_WIFI
就知道当前是GPRS还是wifi链接上了。
NetworkInfo.State state = info.getState();
然后判断state是NetworkInfo.State.CONNECTED
浅谈Java数据库连接 篇3
关键词:JDBC,Java,数据库,连接
JDBC是执行SQL语句的Java API。使用JDBC可以很容易地把SQL语句传送到任何关系型数据库中。换言之, 用户不必为访问Sybase数据库写一个程序, 又为访问Oracle数据库写另一个程序。可以用JDBC API写出唯一的程序, 它能够将SQL语句发送到相应的任何一种数据库。Java与JDBC的结合, 使程序员可以只写一次数据库应用软件后, 就能在各种数据库系统上运行。由于Java语言具有健壮性、安全、易使用、易理解和自动下载到网络等优点, 因此, 它是数据库应用的一个极好的基础语言。现在, 需要找到一种能使Java应用与各种不同数据库对话的方式, 而JDBC正是实现这种对话的一种机制。
一、JDBC的功能与特点
1.JDBC的基本功能
(1) 建立与数据库的连接; (2) 发送SQL语句; (3) 处理结果。
2.JDBC是低级的API与高级API的基础
JDBC是一种“低级”的接口, 因为它直接调用SQL命令, 但它又可以作为构造高级接口与工具的基础。高级接口是“用户友善的”、更易理解和更为方便的API, 由后台将它翻译成如JDBC这样的低级接口。有两种基于JDBC的高级API正处在开发之中:一种是嵌入SQL的Java。JDBC要求把SQL语句作为字符串传递给Java方法。嵌入SQL预处理程序, 可让程序员把SQL与Java直接混合使用。另一种是把关系数据库表直接映射成Java类。在“对象/关系”的映射中, 表中的每一行变成类的一个实例, 每一列的值对应于该实例的一个属性。然后, 程序员可直接操作Java对象, 并自动生成取、存数据的SQL调用。另外, 它还提供了更高级的映射, 例如, 在Java类中把多个表的行结合起来。
3.JDBC与ODBC及其它API的比较
目前, Microsoft的ODBC API是访问关系型数据库中应用最广的编程接口, 它几乎能将所有平台的所有数据库连接起来。现在的问题是可否通过Java来使用ODBC呢?回答是肯定的, 但最好的做法是在JDBC帮助下采用JDBC-ODBC桥接方式实现。需要JDBC的理由如下:
(1) Java不能直接使用ODBC。因为ODBC使用C语言接口, 如果让Java来调用本机C代码的话, 那会在安全、属性、健壮性、应用的可移植性等方面带来困难。
(2) 不希望把ODBC C API逐字地翻译成Java API。例如, ODBC使用了大量的易于出错的指针, 而Java取消了这种不安全的指针。现在通过JDBC, 把ODBC翻译成具有Java风格的面向对象的接口。
(3) JDBC的Java API提供“纯Java”的解决办法。当使用ODBC时, ODBC驱动器管理程序与驱动器必须手工地装入到每架客户机上。而JDBC驱动器全部是用Java编写的, JDBC代码则在所有Java平台 (从网络计算机到主机) 上都可自动安装, 并且是可移植的和安全的。
总之, JDBC API是一种基于SQL的抽象与概念的Java接口, 它是基于ODBC的。熟悉ODBC的程序员很容易学习JDBC, JDBC保留了ODBC的基本设计功能。而且两种接口都是基于X/OpenSQL CLI (Call Level Interface) 。最大的区别是JDBC保持了Java自身的风格与优点。最近, Microsoft引入了ODBC以外的新的API, 包括RDO、ADO和OLE DB。其设计策略在许多方面与JDBC类似, 也是一种基于ODBC类的面向对象的数据库接口。
4.保证一致性的措施
结构化查询语言 (SQL) 是存取关系型数据库的标准语言。尽管多数DBMS系统在基本功能上都采用SQL的标准形式, 但在高级功能上它们并不遵循最新定义的标准SQL语法、语义。例如, 不是所有的数据库都支持存储过程或外部连接, 这样就产生了不一致。JDBC API处理这个问题的方法是允许将任何查询字符串传递给基础DBMS驱动器。JDBC处理SQL一致性问题的第二种方法是采用ODBC风格的例外条款, 它提供了表示几种常见的SQL差别的标准JDBC语法。例如, 有表示日期文字与存储过程定义的例外条款。
二、JDBC连接几种数据库的方式
1.Oracle8/8i/9i数据库 (thin模式) Class.forName (“oracle.jdbc.driver.OracleDriver”) .newInstance () ;
String url=“jdbc:oracle:thin:@localhost:1521:orcl”;//orcl为数据库的SID
String user=“test”;
String password=“test”;
Connection conn= DriverManager.getConnection (url, user, password) ;
2.DB2数据库 Class.forName (“com.ibm.db2.jdbc.app.DB2Driver ”) .newInstance () ;
String url=“jdbc:db2://localhost:5000/sample”;//sample为你的数据库名
String user=“admin”;
String password=“”;
Connection conn= DriverManager.getConnection (url, user, password) ;
3.Sql Server7.0/2000数据库
Class.forName ("com.microsoft.jdbc.sqlserver.SQLServerDriver") .newInstance () ;
String url=“jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb”;
//mydb为数据库
String user=“sa”;
String password=“”;
Connection conn= DriverManager.getConnection (url, user, password) ;
参考文献
[1]萧仁惠, 陈锦辉.JDBC数据库程序设计[M].北京:中国铁道出版社, 2004.2.
物理机连接虚拟机数据库 篇4
虚拟机ip
现在物理机和虚拟机应该就能相互通信了
第二步:加载配置文件找到虚拟机数据库配置文件tnsnames.ora..oracleproduct10.1.0Db_1NETWORKADMIN
复制里面的配置文件加到物理机的数据库连接配置文件,
物理机连接虚拟机数据库
,
具体操作如下:打开plsql,help ->support info
复制这个目录在计算机打开,把虚拟机的数据库配置文件加进去。
现代数据库编程接口与连接 篇5
.NET框架和Java都使用了一种托管的运行环境,都将源代码转换为一种中间语言,然后将其编译为本地的可执行代码。Java比.NET出现早,行业应用广泛,.NET框架简单易用,开发效率很高,.NET是面向XML与Web服务设计的,领先Java,Java是一种语言开发,多种平台下运行,.NET是多种语言协同开发,多种平台下运行,不过微软不提供对Linux的支持,但Novell资助了Mono项目,并发布了Linux上的.NET框架Mono 2.0,兼容微软的.NET 2.0,给用户带来了扩展到Linux的希望,估计二者将会并存,难以取舍。
无论选择哪个阵营,都要了解数据库接口,掌握数据库的连接方法,否则,无法编程开发现代管理软件。
1. NET的数据库接口与连接
微软.NET阵营的数据库接口由于历史的原因,往往让初学者难以掌握,没办法,首先要了解历史,把握主线,并最终过渡到.NET,掌握.NET阵营的数据库接口与连接。
1.1 发展史
早期的程序员开发管理软件要连接数据库非常困难,于是微软就开发了ODBC,一种实现应用程序和关系数据库之间通信的接口标准,本质上是一组数据库访问API,由一组函数调用组成,核心是SQL语句。符合标准的数据库通过SQL编写的命令就可以对数据库进行操作,目前所有的关系数据库都符合该标准。使用时先用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC就能建立起与相应数据库的连接。
直接使用ODBC API还是比较麻烦,所以微软后来又开发了DAO、RDO这些上层数据库接口,使用这些上层接口开发应用程序更容易。这些接口都支持ODBC,ODBC实际上是一种底层的接口技术。DAO主要适用于单机版应用程序或在小范围本地分布使用,访问桌面数据库。RDO是为了弥补DAO访问远程数据库能力的不足,它封装了ODBC API的对象层,因此在访问ODBC兼容数据库时,具有比DAO更高的性能,而且比ODBC更易用,但它只能以ODBC的方式访问关系型数据库,同时也在访问Jet或ISAM数据库方面受到限制,无法访问非关系型数据库。为了访问关系或非关系数据库中的数据,微软开发了OLEDB,一个基于COM标准的数据存取对象。它能对所有数据类型操作,甚至是没有规则的文本文件。为了大幅减少数据库访问工作量,提供一个更友好易于操作的上层接口,整合各种功能,微软开发了ADO,ADO是一个用于存取数据源的COM组件,它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。
ODBC和OLEDB是底层的数据库接口,通过驱动程序访问数据文件,OLE DB标准的具体实现是通过一组C++API函数,就像ODBC标准中的ODBC API一样,不同之处在于OLE DB的API是符合COM标准、基于对象的,ODBC和OLEDB这两种接口技术是互补的,不能完全互相替换。而DAO、RDO、ADO是上层数据库接口,向上与应用程序交互,向下与ODBC或OLEDB对话。ADO被设计来继承微软早期的数据访问对象层,微软已经放弃RDO和DAO。
1.2 仍在使用的数据库接口
微软目前仍在使用的数据库接口如图1所示,上层接口ADO,底层接口OLEDB或ODBC或OLEDB-ODBC。OLEDB接口追求的是“专用”,每种类型的数据库有自己专用的OLEDB接口驱动程序。ODBC接口追求的是“通用”,首先都要使用ODBC数据源管理器,然后调用自己的驱动程序。由于ODBC标准目前还在广泛使用,所以OLE DB也推出了ODBC的接口,称为“Microsoft OLE DB Provider for ODBC Drivers”,简称MSDASQL。实际上是替换ODBC Driver Manager,作为应用程序与ODBC驱动程序之间的桥梁,理论上不会增加任何开销。
ADO是Microsoft数据访问组件(MDAC)的一部分,MDAC可到微软的网站上下载安装,可在注册表项HKEY_LO-CAL_MACHINESoftwareMicrosoftData AccessFull Install Ver中找到MDAC的版本信息。在注册表项HKEY_CLASSES_ROOT中能找到ADODB.Connection就可知道系统已安装ADO。即使所访问的数据库没有提供ADO的驱动,只要有ODBC驱动一样可以使用ADO进行访问,ODBC实际上是一种底层的访问技术,因此它可以从底层设置和控制数据库,完成一些高级数据库技术无法完成的功能。
1.3. NET数据库接口
.NET数据库接口由.NET Framework提供,如图1所示,上层接口是ADO.NET,底层接口是OLEDB.NET或ODBC.NET或典型数据库的专用接口,如:SQL Server.NET和Oracle.NET,开发跨平台管理软件必须掌握.NET数据库接口。注意,在.NET中微软已不再提供OLEDB.NET-ODBC.NET接口,目前,仍有大量资料把ADO中的临时接口OLEDB-ODBC错误地延用到.NET中,用户必须明察。
数据访问接口ADO.NET,它与ADO的数据访问方式在思想上是没有继承关系的,ADO是基于COM思想,而ADO.NET是基于.NET框架体系,主要用于基于Web的应用程序,善于处理XML类型的数据。要想开发的管理软件可跨平台运行,必须采用.NET数据库接口,当然所采用的数据库也最好支持.NET,微软的SQL Server支持.NET的是2005及以上版本。
ADO使用OLE DB接口并基于微软的COM技术,而A-DO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。这也就是说ADO.NET和ADO的数据访问方式是不同的。在ADO中,数据在内存中表示形式为记录集Recordset,而在ADO.NET中,数据在内存中的形式为数据集Dataset。记录集看起来像单个表,如果要获得几个表的相关数据,必须使用JOIN查询。相反,数据集是一个或多个表的集合。这样,数据集可以模仿基础数据库的结构。ADO的运作是一种在线方式,它对数据的操作必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份副本,ADO.NET的数据库连接也只有在制作副本或利用副本更新数据这段时间需要在线。
1.4 数据库的连接
数据库连接可分为有源连接和无源连接,如果底层接口采用ODBC或ODBC.NET,就可能用ODBC数据源管理器创建如下3种数据源:
(1)用户数据源:作为位于计算机本地的用户数据源而创建的,并且只能被创建这个数据源的用户所使用,存储在注册表HKEY_CURRENT_USER键中。
(2)系统数据源:作为属于计算机或系统而不是特定用户的系统数据源而创建的,用户必须有访问权才能使用,存储在注册表HKEY_LOCAL_MACHINE键中。
(3)文件数据源:指定到文件中作为文件数据源而定义的,任何已经正确地安装了驱动程序的用户皆可以使用这种数据源,数据源文件存储在硬盘中,扩展名为.dsn。
用户数据源和系统数据源统称为机器数据源,创建依赖这3种数据源的连接为有源连接。除了使用DSN数据源连接数据库以外,还可以使用自定义连接字符串,创建不依赖数据源的连接即无源连接。
有源连接字符串:
机器数据源:dsn=数据源名;uid=用户名;pwd=密码;
文件数据源:Filedsn=盘符:路径数据源文件名.dsn;uid=用户名;pwd=密码;
无源连接字符串:
(1)连接Access数据库
1)采用ODBC或ODBC.NET底层接口的连接字符串格式为:
Driver=驱动名称;DBQ=盘符:路径文件名.mdb
2)采用OLE DB或OLE DB.NET底层接口的连接字符串格式为:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=盘符:路径文件名.mdb
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=盘符:路径文件名.mdb
3)采用OLE DB-ODBC(注:不再提供OLE DB.NET-ODBC.NET)底层接口的连接字符串格式为:
Provider=MSDASQL.1;Driver=驱动名称;DBQ=盘符:路径文件名.mdb
注:
(1)驱动名称可为:{Microsoft Access Driver(*.mdb)}或{Driver do Microsoft Access(*.mdb)}或{Microsoft Access-Treiber(*.mdb)}
(2)ASP或ASP.NET页面在Dreamweaver中设计完成后,可用Server.Mappath(“文件名.mdb”)来代替数据库实体路径“盘符:路径文件名.mdb”。
(3)在VS.NET中设计,可用Application.Startup Path&“文件名.mdb”来代替数据库实体路径“盘符:路径文件名.mdb”。
(2)连接SQL Server数据库
1)采用ODBC或ODBC.NET底层接口的连接字符串格式为:
Driver={SQL Server};Server=服务器;Data Base=数据库名;uid=用户名;pwd=密码
Driver={SQL Server};Server=服务器IP;Initial Catalog=数据库名;User ID=用户名;Password=密码
Driver={SQL Native Client};Server=服务器;Database=数据库名;Uid=用户名;Pwd=密码
2)采用OLE DB或OLE DB.NET底层接口的连接字符串格式为:
Provider=SQLOLEDB.1;pwd=密码;uid=用户名;Data Source=服务器;Data Base=数据库名
Provider=SQLOLEDB.1;pwd=密码;uid=用户名;Server=服务器;Initial Catalog=数据库名
Provider=SQLNCLI;pwd=密码;uid=用户名;Data Source=服务器;Database=数据库名
3)采用OLE DB-ODBC(注:不再提供OLE DB.NET-ODBC.NET)底层接口的连接字符串格式为:
Provider=MSDASQL.1;Driver={SQL Server};Server=服务器;Data Base=数据库名;uid=用户名;pwd=密码
Provider=MSDASQL.1;Driver={SQL Native Client};Server=服务器;Initial Catalog=数据库名;uid=用户名;pwd=密码
4)采用SQL Server.NET专用接口的连接字符串格式为:
Dim cn As New System.Data.Sql Client.Sql Connection
cn.Connection String="Data Source=服务器;Database=数据库名;uid=用户名;pwd=密码"或cn.Connection String="Server=服务器;Initial Catalog=数据库名;uid=用户名;pwd=密码"cn.Open()
注:服务器可为服务器名称或服务器IP地址,采用SQL Server.NET专用接口时,服务器是本机可输入“.”代替,uid等同于User ID,pwd等同于Password。
(3)连接Oracle数据库
1)采用ODBC或ODBC.NET底层接口的连接字符串格式为:
Driver=驱动名称;Server=服务器;uid=用户名;pwd=密码
2)采用OLE DB或OLE DB.NET底层接口的连接字符串格式为:
Provider=MSDAORA.1;Data Source=服务器;User ID=用户名;Password=密码
Provider=Ora OLEDB.Oracle;Data Source=服务器;User ID=用户名;Password=密码
3)采用OLE DB-ODBC(注:不再提供OLE DB.NET-ODBC.NET)底层接口的连接字符串格式为:
Provider=MSDAORA;Driver=驱动名称;Server=服务器;uid=用户名;pwd=密码
Provider=Ora OLEDB.Oracle;Driver=驱动名称;Server=服务器;uid=用户名;pwd=密码
4)采用Oracle.NET专用接口的连接字符串格式为:
Dim cn As New System.Data.Oracle Client.Oracle Connection
cn.Connection String="Data Source=服务器;uid=用户名;pwd=密码;"cn.Open()
注:(1)驱动名称可为:{Microsoft ODBC for Oracle}或{Mi-crosoft ODBC Driver for Oracle}
(2)服务器可为服务器名称或服务器IP地址,uid等同于User ID,pwd等同于Password
特别说明:以上有源连接和无源连接的字符串格式均在Dreameraver(ASP或ASP.NET)、VB或VS.NET中测试通过。如果在VS.NET或Dreameraver(ASP.NET)中错误延用ADO中的临时接口OLEDB-ODBC将会显示错误信息:“用于OLEDB的.NET Framework数据提供程序(System.Data.Ole Db)不支持用于ODBC驱动程序的Microsoft OLE DB提供程序(MS-DASQL)。请使用用于ODBC的.NET Framework数据提供程序(System.Data.Odbc)”。
2 Java阵营的数据库接口与连接
Java阵营的数据库接口比.NET阵营的简单,就是Java数据库连接(Java Database Connectivity,JDBC),JDBC是目前Sun公司唯一的Java数据库API,通过执行SQL语句为多种关系数据库提供统一的访问接口。但是未来JDO(Java Data Object)API会正式成为官方的Java存储API,重要性会超越JD-BC。JDBC只是面向关系数据库(RDBMS),JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等,使得应用可移植性更强。
2.1 JDBC驱动程序类型与选择
JDBC驱动程序共有4种类型,TYPE1:JDBC-ODBC桥(JDBC-ODBC bridge),驱动程序是JDK内建的包(package),先通过JDBC-ODBC桥的转换,再通过ODBC驱动访问关系型数据库,不能跨平台;TYPE2:本地API驱动程序(Native-API Driver),通过Java本地编程接口(Java Native Interface,JNI)技术,调用数据库本身提供的API访问数据库,再转换成数据库指定的原生码,亦不能跨平台;TYPE3:网络协议纯Java驱动程序(JDBC-Net pure java Driver),驱动程序使用网络协议,客户端与数据库间数据使用中间件(Middleware)来处理,可移植,跨平台;TYPE4:本地协议纯Java驱动程序(Native-protocol pure java Driver),驱动程序使用与数据库相同的协议,直接与数据库沟通,跨平台。
针对某具体数据库,到底该如何选择驱动类型,不能只看哪种类型优越,还得兼顾实际情况,要看能不能下载到相应的免费驱动,如果是收费的,还要考虑成本,没办法时也只能采用桥接,虽不能跨平台,但在Windows下可连接所有的关系型数据库。
使用时,先考虑下载合适的JDBC驱动,原则上到厂方网站去找,通常驱动程序的扩展名是.jar,将数据库的JDBC驱动加载到classpath中,在基于Java的Web应用实际开发过程中,通常要把目标数据库产品的JDBC驱动复制到WEB-INF/lib下。内建的JDBC-ODBC驱动程序则不需下载。
2.2 JDBC的数据库连接
JDBC的数据库连接,这里只介绍TYPE1和TYPE4两种类型。
(1)TYPE1:JDBC-ODBC连接:可连接Access、SQL Server、Oracle等关系型数据库
String Driver="sun.jdbc.odbc.Jdbc Odbc Driver";
String URL=?;//下面分类给定
String Username="username";//用户名
String Password="password";//密码
Class.for Name(Driver).new Instance();
Password);
其中有源连接字符串格式为:String URL="jdbc:odbc:dbsource";//dbsource为数据源名
无源连接字符串格式为:用上面微软针对各数据库ODBC底层接口的连接字符串取代dbsource即可。如:Access,String URL="jdbc:odbc:Driver={Microsoft Access Driver(*.mdb)};DBQ=盘符:路径文件名.mdb";
(2)TYPE4:连接Access、SQL Server、Oracle等关系型数据库
1)连接Access数据库
Stels MDB是一个平台独立的微软Access数据库的JDBC Type4驱动程序,无需安装任何微软的环境,它是纯Java的,在Linux平台下都可以使用,可惜是商业软件。
String Driver="jstels.jdbc.mdb.MDBDriver";
String URL=?;//下面给定
String Username="username";//用户名
String Password="password";//密码
Class.for Name(Driver).new Instance();
Connection con=Driver Manager.get Connection(URL,Username,Password);
其中,String URL="jdbc:jstels:mdb:盘符:路径文件名.mdb";
或:String URL="jdbc:jstels:mdb:http://域名或IP/路径/文件名.mdb";
2)连接SQL Server数据库
3)连接Oracle数据库
3 结语
掌握.NET阵营的数据库连接较Java阵营困难,但从数据库编程接口入手,并借助相应的工具会得到较大帮助。一个是新版的Dreamweaver数据库连接模板,再就是新建扩展名为.udl的文件,然后双击打开“数据链接属性”对话框,依据提示作相应设置,最后用记事本打开,就可以比较容易地获取相应的连接字符串,进而掌握跨平台的数据库编程。
此外,Java阵营的JDO目标已经吸引了.NET阵营的高度关注,微软也计划在.NET体系中加入一个仿照JDO的中间件,具体是采用Object Store公司的产品。Object Store将为两大阵营同时开发产品,相信不久的将来,JDO技术将会使两大阵营的跨平台数据库编程大放光彩,届时,又要学习新的数据接口与连接了。
参考文献
[1]Susan Sales Harkins,Bryan Chamberlain,Darren McGee.Mastering Dreamweaver MX Databases[M].John Wiley&Sons,2003,(2).
[2]编写委员会.数据库应用与开发SQL Server2000[M].电子工业出版社,2010,(4).
[3]赵松涛,陈小龙.Visual Studio2005+SQL Server2005数据库应用系统开发[M].电子工业出版社,2007,(8).