Java⽤l连接数据库
⾸先在web项⽬的META-INF下建⽴l⽂件,内容为:
Xml代码
1. <?xml version="1.0"encoding="UTF-8"?>
2. <Context path="/">
3. <Resource
4. name="myDS"
5. type="javax.sql.DataSource"
6. driverClassName="oracle.jdbc.driver.OracleDriver"
7. maxIdle="2"
8. maxWait="5000"
9. username="test"
10. password="pwd"
11. url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
12. maxActive="4"/>
13. <!--name:DataSource的名称-->
14. <!--type:数据源对应的java类型,⼀般设计为javax.sql.DataSource-->
15. <!--username:数据库登陆名-->
16. <!--password:数据库登陆密码-->
17. <!--driverClassName:指定数据库JDBC驱动程序-->
18. <!--url:指定数据库的URL-->
19. <!--maxIdle:连接池处于空闲状态的数据库连接的最⼤数⽬,取0表⽰不受限制-->
20. <!--maxWait:连接池中数据库连接处于空闲状态的最长时间(以毫秒为单位),取0表⽰⽆限制等待时间-->
21. <!--maxActive:连接池处于活动状态的数据库连接的最⼤数⽬,去0表⽰不受限制-->
22.
23. </Context>
OK,在JSP⾥,可以直接写:
index.jsp
Jsp代码
1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2. <%@ page import="java.sql.*"%>
3. <%@ page import="javax.naming.*"%>
4. <%@ page import="javax.sql.*"%>
5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
6. <html>
7.    <head>
java xml是什么8.    </head>
9.    <body>
10.        <%
11. Context initContext = new InitialContext();
12. Context envContext = (Context) initContext.lookup("java:/comp/env");
13. DataSource db = (DataSource)envContext.lookup("myDS");
14. //javablogorl为<Resource>元素中name属性的值
15. Connection conn = db.getConnection( );
16. Statement stmt = ateStatement();
17. ResultSet rs = uteQuery("SELECT * FROM test");
18. ()){
19. out.String("id")+" ");
20. out.String("name")+"<br>");
21. }
22. rs.close();
23. stmt.close();
24. conn.close();
25. %>
26.    </body>
27. </html>
28.
问题⼀:,就是⽼是报oracle.jdbc.driver.OracleDriver.class不到.
后来在⽹上才发现,要将oracle的JDBC驱动放在tomcat的common/lib下,⽽我⼀直是把它放在了WEB-INF/lib下,问题搞定!问题⼆:如果未设置虚拟⽬录,该问题将不存在。
如果设置了虚拟⽬录,即在tomcat5/conf/Catalina/l⾥有以下内容:
Xml代码
1. <Context path="/myWeb"docBase="D:\workspace\myWeb\WebRoot"reloadable="true"debug="0"></Context>
这样就可以不再部署项⽬!
但是,l将不再管⽤,需要将tomcat5/conf/Catalina/l的内容
改成:
Xml代码
1. <?xml version="1.0"encoding="UTF-8"?>
2. <Context
3. docBase="D:/workspace/myExt/WebRoot"
4. reloadable="true">
5. <Resource
6. name="myDS"
7. type="javax.sql.DataSource"
8. maxActive="4"
9. maxIdle="2"
10. username="test"
11. maxWait="5000"
12. driverClassName="oracle.jdbc.driver.OracleDriver"
13. password="pwd"
14. url="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
15. </Context>
Tomcat6的服务器配置⽂件放在 ${tomcat6}/conf ⽬录底下。我们可以在这⾥到 l 和 l。当然,还有其他⼀些资源⽂件。但是在在本⽂中我们只⽤得上这两个,其他的就不介绍了。
1. ⾸先,需要为数据源配置⼀个JNDI资源。我们的数据源JNDI资源应该定义在context元素中。在tomcat6版本中,context元素已经从l⽂件中独⽴出来了,放在⼀个l⽂件中。因为l是不可动态重加载的资源,服务器⼀旦启动了以后,要修改这个⽂件,就得重启服务器才能重新加载。⽽l⽂件则不然,tomcat服务器会定时去扫描这个⽂件。⼀旦发现⽂件被修改(
时间戳改变了),就会⾃动重新加载这个⽂件,⽽不需要重启服务器。我们当然推荐把应⽤需要的JNDI资源配置在l⽂件中,⽽不是l⽂件中。
1、⾸先,将数据库的驱动程序copy到tomcat6.0\lib下,这⼀部是关键,如果没有copy 当运⾏程序的时候后报-不到驱动-的异常。
2、将下⾯的代码放到Tomcat 6.0\l中间,如:
<Context reloadable="true">
<Resource
name="jdbc/数据库名"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="5000"
username="⽤户名"
password="密码"
driverClassName="数据库的驱动"
url="数据库的连接地址" />
</Context>
解释:(100 30 5000 为上⾯的数据)
maxActive="最⼤可以有100名⽤户连接数据源"
maxIdle="如果没有⽤户连接,空出30个连接等待⽤户连接"
maxWait="如果已连接⽤户5000秒内没有再次连接数据源,则放弃此连接"
完成这两部,数据源就可以⽤了。
另外,也可以在项⽬root下的WEB-INF下新建l进⾏配置
<?xml version="1.0" encoding="UTF-8"?>
<Context>/直连
<Resource
name="jdbc/book"
type="javax.sql.DataSource"
password=""
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="5"
maxWait="5000"
username="sa"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=book"直连数据源
maxActive="10"/>
</Context>
<!-->
<Context>桥连
<Resource
name="jdbc/book"
type="javax.sql.DataSource"
password=""
driverClassName="sun.jdbc.odbc.JdbcOdbcDriver"
maxIdle="2"
maxWait="5000"
username="sa"
url="jdbc:odbc:bb"///桥连的数据源
maxActive="4"/>
<WatchedResource>C:\Program Files\Apache Software Foundation\Tomcat 5.5\l</WatchedResource> </Context>
<!-->
直接在Context⽂件中加⼊:
<Resource
name="jdb/dbsource"
type="javax.sql.DataSource"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
maxIdle="2"
maxWait="5000"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=jspdev"
maxActive="4"/>
username="he"
password="he"
通过java的jndi就可以了
InitialContext initCtx = new InitialContext();
DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/数据库名"); Connection conn = ds.getConnection();
以下是各种数据库的配置
1.sql2000
<Resource
name="jdbc/数据库名"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="5000"
username="⽤户名"
password="密码"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=数据库名" />
<Resource
name="jdbc/数据库名"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="5000"
username="⽤户名"
password="密码"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin: :1521:ora9"
/>
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource" //资源类型
driverClassName="sql.Driver"
url="jdbc:mysql://localhost/数据库名"
username="⽤户名"
password="密码"
maxActive="100" //最⼤连结数
maxIdle="30" //最⼤空闲时间,0为⽆限制
maxWait="10000"/> //建⽴连接的的最⼤等待时间