1.JDBC技术
来源:http://zengyiqiang2006.blog.163.com/blog/static/102868226201052673216733/
JDBC技术(访问数据库的一种技术)
核心主要是使用DriverManager类操作和管理实现Driver接口的实现类, 程序员只需要向这个驱动管理器类要连接对象就可以了
( Connection con=DriverManager.getConnection(RUL) )
JDBC驱动程序(实现Driver接口的实现类名字)
通常我们所说的“使用哪一个JDBC驱动程序/驱动类?”实际上是指使用哪一个实现Driver接口的实现类。如是使用Mysql数据库厂商提供的实现类(com.mysql.jdbc.Driver)还是使用 SQL Server 2000 数据库厂商提供的实现类(om.microsoft.jdbc.sqlserver.SQLServerDriver);是使用第三方的实现类还是使用java自身提供的实现类(sun.jdbc.odbc.JdbcOdbcDriver )但是无论使用哪一家驱动程序都要知道相应的url。
JDBC连接池 技术 :对DriverManager进行了封装和相应的修改,
连接池其实就是java中的集合如List、Map、Vector等。
连接池技术的核心是反复使用连接池(集合)中的多个Connection对象,其底层实现还是基于JDBC技术,即DriverManager类操作和管理实现Driver接口的实现类
总结:
一: 如何创建多个连接对象?
参考源代码可知 只需向DriverManager多要几次即可 ,具体可以使用循环语句
二:如何获取连接池中的Connection对象呢?
未封装前只需向DriverManager要就可以了,封装后,要向DataSource来要。
三:Java中的DriverManager对象 作用主要是获取实现Driver接口的实现类的连接对象
如: Connection con=DriverManager.getConnection(RUL) )
四:Java中的DataSource对象 有点像未封装前的DriverManager。它的作用主要是获取第三方组件(连接池)中的连接对象
如: Context context=new InitialContext() ; //JNDI部分的知识
DataSource ds=(DataSource)context.lookup( “ java:/comp/env/jdbc/mysqlds ” );
Connection con=ds.getConnection();
五:连接池 :实际上就是一个集合,该集合内保存了一定数量的连接对象,所以他管理着整个数据库的连接
六:数据源: 实际上就是Java中的DataSource对象,主要作用是管理连接池和获取第三方组件(连接池)中的连接对象,有点像 DriverManager,换句话说,各个连接池的管理工作都是由一个叫数据源的对象来操控着,java中DataSource来表示,xml文件中用 <data-source> 这个标签来表示。
七:获取Connection对象的两种方式 ,
一种是传统的向DriverManager要, con=DriverManager.getConnection()
另一种是向DataSource要, con =( (DataSource)new InitialContext().lookup( “ java:/comp/env/jdbc/ TestDB ” ) ).getConnection() ;
八:JNDI
Context context=new InitialContext() ; // JNDI部分的知识
DataSource ds=(DataSource)context.lookup( “ java:/comp/env/jdbc/mysqlds ” ) ;//利用
JNDI的lookup方法来查找(tomcat中)已经存在的DataSource对象 。 java:/comp/env
这是固定的写法
Connection con=ds.getConnection() ;//只要有了DataSource对象,则就可以获得Connction对象了
2.Tomcat 6.0 配置数据库连接池
来源:http://zengyiqiang2006.blog.163.com/blog/static/10286822620105267244342/
这里是以Mysql数据库为例,其他的数据库都是一样的配置
首先将mysql驱动拷贝到tomcat下的lib目录下。C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib
然后修改C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf下的context.xml文件,在里面添加如下代码:
在Context标签里添加一个属性 reloadable="true"
<WatchedResource>WEB-INF/web.xml</WatchedResource><!--这个有就不需要添加--> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="admin" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/databasename"/>
下面解释一下各属性的含义:
name 表示指定的jndi名称 (这个名字这里可以随便写)
auth 表示认证方式,一般为Container
type 表示数据源床型,使用标准的javax.sql.DataSource
maxActive 表示连接池当中最大的数据库连接
maxIdle 表示最大的空闲连接数
maxWait 当池的数据库连接已经被占用的时候,最大等待时间
logAbandoned 表示被丢弃的数据库连接是否做记录,以便跟踪
username 表示数据库用户名
password 表示数据库用户的密码
driverClassName 表示JDBC DRIVER
url 表示数据库URL地址
例子:
<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!—mysql数据源配置--> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdel="30" maxWait="10000" username="root" password="5982285" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/myblog" /> <!—oracle数据源配置--> <Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdel="30" maxWait="10000" username="scott" password="tiger" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:sky" /> </Context>
属性说明:name: 数据源名称,通常取jdbc/XXX的格式
auth: Container容器
type: javax.sql.DataSource 注意是javax不是java
username: 数据库用户名
password: 数据库用户密码
maxIdle: 最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
接将被标记为不可用,然后被释放。设为0表示无限制。
maxActive: 连接池的最大数据库连接数。设为0表示无限制。
maxWait : 最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示
无限制。
driveClassName: 数据库完整的驱动类全称
url: 数据库的链接
网上很多人都说需要在web.xml文件中再配置 其实补配置也是可以的
配置了<WatchedResource>WEB-INF/web.xml</WatchedResource> 之后 就无需在web.xml文件中配置了
或者是在context.xml中配置的而不是server.xml配置 因此不需要在web.xml中配置 没有测试
3.HTML <label> 标签的 for 属性
for 属性规定 label 与哪个表单元素绑定。
标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <label> 标签下的 for 属性命名一个目标表单 id,这样就是显式形式。
例如,在 XHTML 中:
显式的联系:<label for="SSN">
Social Security Number:</label>
<input type="text" name="SocSecNum"id="SSn"
/> 隐式的联系:<label>
Date of Birth: <input type="text" name="DofB" /></label>
第一个标记是以显式形式将文本 "Social Security Number:" 和表单的社会安全号码的文本输入控件 ("SocSecNum") 联系起来,它的 for 属性的值和控件的 id 一样,都是 SSN。第二个标记 ("Date of Birth:") 不需要 for 属性,它的相关控件也不需要 id 属性,它们是通过在 <label> 标签中放入 <input> 标签来隐式地连接起来的。
实例
带有两个输入字段和相关标记的简单 HTML 表单:
<form> <label for="male">Male</label> <input type="radio" name="sex" id="male" /> <br /> <label for="female">Female</label> <input type="radio" name="sex" id="female" /> </form>
4.一个问题:The reference to entity "password" must end with the ';' delimiter.的原因跟解决方法
This error is caused by a rogue '&' in database_properties.xml. This xml tag... <param name="url" value="jdbc:mysql://129.12.16.16/jwnl?user=myusername&password=mypassword"/>
should actually read... <param name="url" value="jdbc:mysql://129.12.16.16/jwnl?user=myusername&password=mypassword"/>
This is because the sax xml parsing libraries used by jwnl are generic xml libraries and therefore expect an escaped
charcter sequence.
测试成功
测试页面
5.又一个问题:Name jdbc is not bound in this Context
这个问题我查找了好久,一直没有效果,我的context.xml 和 Mysql驱动程序都是没有问题的,但是就是不停地报这个错!最后我很无语的发现,错误是自己写作了一个单词!
ds=(DataSource)context.lookup("java:comp/env/jdbc/mysqlds");//注意:第一个单词是java,而不是jdbc!
网上有人解释说还要在web.xml中添加以下内容:
<resource-ref>
<description>blog</description>
<res-ref-name>jdbc/mysqlds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我测试之后还是报错,没用的!