数据库与数据源的区别(转)
数据库与数据源的区别
jdbc基础
1.什么是数据源?
答:数据源定义的是连接到实际数据库的一条路径而已,数据源中并无真正的数据,它仅仅记录的是你连接到哪个数据库,以及如何连接的,如odbc数据源。也就是说数据源仅仅是数据库的连接名称,一个数据库可以有多个数据源连接。
在Java语言中,DataSource对象就是一个代表数据源实体的对象。一个数据源就是一个用来存储数据的工具,它可以是复杂的大型企业级数据库,也可以是简单得只有行和列的文件。数据源可以位于在服务器端,也可以位于客服端。
2.什么是数据库连接池?
答:数据库连接是负责分配、管理和释放数据库连接。使用数据库连接池是因为数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。如weblogic、tomcat、WebSphere容器都实现了数据库连接池,但是数据库连接池是可以独立出来自己编码实现的。
数据库连接池在系统启动时初始化了一定量maxIdle=idlenum的数据库连接,即没有他的使用中的链接被释放的情况下,连接池中保存的最大空闲链接数。数据库连接请求如果没有超过idle的值则直接去连接池中获取;如果超过了maxIdle的值则新建一个数据库连接;但如果数据库连接池中的连接总数超过了maxActive=activenum则 (如下处理);
1 直接抛错
2 让想要借出连接的线程等待一段时间,如果等不到,再抛错
3 每隔一段检查一次pool,直到有可用连接,否则一直等下去
4 永远可以拿到(视情况需要maxActive不设置或0或负)
但当没有可以使用的数据库链接的时候,连接池将要等待一个链接被返回的最长时间(毫秒)maxWait=waitnum,超过这个时间就要抛出异常。
3.什么是jndi?
答:jndi全称是java naming and directory interface。简单点就是你按命名规则给一个东西命名然后你就可以通过该名字在特定环境下直接查找到该东西了。
JNDI是用于向Java程序提供目录和命名功能的API。可以简单地把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和惟一的名字绑定。外部程序可以通过名字来获取对某个对象的引用。在一个文件系统中,文件名被绑定给文件。在DNS中,一个IP地址绑定一个URL。在目录服务中,一个对象名被绑定给一个对象实体。
在Intranets(企业内部网)和Internates(互联网)中目录服务(Directory service)都非常重要,它规范了命名规则,让人们容易理解实体及之间的关系。JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。
jndi被设计成独立于特定的目录服务,所以各种各样的目录都可以通过相同的方式进行访问。这样使用jndi的java程序员不仅可以获得统一规整的命名和目录,而且可以通过多层的命名方案无缝访问(seamless acess)目录对象。
4.数据源与数据库连接池关系?
答:我们通过第三方工具来使用数据源来实现对数据库数据操作。一个数据库连接池可以给它创建多个数据源,如一个人有别名;如果单纯使用jdbc连接数据库是web容器你要什么就去连什么。这样做没人看不耗内存,量大了你就死机。可以这样理解,数据源表示一个与数据库的连接(传统)或者表示很多与数据库的连接(使用数据库连接池)。数据源是用于访问连接池或多池的JNDI对象,多池的主要目的是提高可用性和在一组连接池间实现负载均衡。
5.数据源与jndi关系?
答:数据源是在JDBC 2.0中引入的一个概念。在JDBC 2.0扩展包中定义了javax.sql.DataSource接口来描述这个概念。如果用户希望建立一个数据库连接,通过查询在JNDI服务中的数据源,可以从数据源中获取相应的数据库连接。这样用户就只需要提供一个逻辑名称(Logic Name),而不是数据库登录的具体细节。即DataSource采用Java的JNDI技术,来获得DataSource对象的引用。当然各种web容器把DataSource作为一种可以配置的JNDI资源来处理如tomcat。生成DataSource对象的工厂为org.apache.commons.dbcp.BasicDataSourceFactory。
6.jdbc基础
答:java database connectivity standard 是一套规范的面向应用程序的接口,通过它可以访问各类关系数据库。各个数据库会实现该接口作为驱动如jtds.jar,当然可以自己写实现。
jdbc是低级api,提供访问数据库的接口,是构建高级api的基础,利用纯java编写可以在任何操作系统任何java环境下工作。JDBC API 中定义了一些Java类分别用来表示与数据库的连接(connections), SQL语句(SQL statements), 结果集(result sets)以及其它的数据库对象, 使得Java程序能方便地与数据库交互并处理所得的结果。
使用JDBC, 所有Java程序(包括Java applications , applets和servlet)都能通过SQL语句或存储在数据库中的过程(stored procedures)来存取数据库。要通过JDBC来存取某一特定的数据库,必须有相应的JDBC driver,它往往是由生产数据库的厂家提供,是连接JDBC API与具体数据库之间的桥梁。JDBC driver 是用于特定数据库的一套实施了JDBC接口的类集。
简单的说,jdbc可以做三件事:与数据库建立连接,发送sql语句,处理结果。jdbc可以理解为odbc的纯java语言和面向对象的实现。
7.数据库访问方法?
答:在ASP中可以通过三种方式访问数据库:
1、IDC(Internet Database Connector)方式;
2、ADO(ActiveX Data Objects)方式;
3、RDS(Remote Data Service)方式。
在jsp中访问数据库常用:
1、JDBC-ODBC桥接器;
2、特定数据库的jdbc驱动直接连接数据库;
3、经过池化维护一定量的连接数目,用jndi去访问数据源对应池获取连接;
**************************************************************************************数据库是一个数据的工厂,可以理解成产品的生产厂家,
如果你从厂家租用东西,厂家就马上找人开工,启动设备,等生产好之后,发货给你。当然整个生产过程需要比较长的时间。
数据源,是一个产品代理仓库,代理那里原来就有一些生产好的产品了,所以你从代理获取产品,可以马上就得到。当然代理的仓库也是有大小限制的。
无论哪种情况,你用完了某个产品,记得要归还哦。
**************************************************************************************ODBC(Open DataBase Conectivity)是微软公司制定的标准编程接口,只要有相应的ODBC驱动程序,就可以通过ODBC连结操作各种不同的数据库。通常通过控制面板中的ODBC Data Source来配置ODBC的数据源。所谓ODBC数据源就是命名的一组信息,包括需要连结的数据库所在位置(可以是磁盘目录/文件,也可以是网络服务器)、对应的ODBC驱动程序以及访问数据库所需的其他相关信息,用户可以通过数据源的名称(DSNs,Data Source Names)来指定所需的ODBC连接。
DSNs按照其保存方式和作用范围分为三种:用户DSN、系统DSN和文件DSN。每个文件DSN保存在单独的一个文件中,文件可以在网络范围内共享;用户DSN保存在注册表中,只对当前用户可见;系统DSN页保存在注册表中,但对系统中的所有用户可见。用户DSN和系统DSN的区别在于,用户DSN保存在注册表的HKEY_CURRENT_USER下,而系统DSN保存在HKEY_LOCAL_MACHINE下。
假定我们要连接的数据库是Access97的c:\test\auto.mdb(注意:用较新的ADO连接Access数据库效率更高,这里只是作为一个例子),数据源的名称为CenterAuto,那么可以分为两个步骤:
(1)注册DSN本身的信息:
(2)登记数据源:
**************************************************************************************数据源是一个泛指,ds与db不同