在Tomcat中配置数据源

使用工具:TOMCAT 7.0.52、IntelliJ IDEA 13.0.2、JSF 2.0+、SqlServer、jtds-1.2.5.jar

搞了好久都没成功,开始使用注解引入DataSource,可是一直不成功,后来使用lookup方式,写了一个本地主类(包含main方法)测试,也是不成功,艹,都快崩溃了,后来经过各种测试,终于搞定了,本地主类测试是无效的,必须通过web访问才能成功,真尼玛蛋疼。注解估计跟版本有关,没精力去弄了。

以下是配置步骤(相应的路径换成自己的):

1、把jtds-1.2.5.jar放到Tomcat目录里的lib目录下。如:D:IntelliJ omcat7lib

2、在D:IntelliJ omcat7conf目录里的context.xml文件里加上如下代码:

1 <Context>
2     <WatchedResource>WEB-INF/web.xml</WatchedResource>
3     <Resource name="jdbc/sqlserver" auth="Container" type="javax.sql.DataSource"
4               driverClassName="net.sourceforge.jtds.jdbc.Driver"
5               url="jdbc:jtds:sqlserver://localhost:1433/yourDatabaseName"
6               username="username" password="password" maxActive="100"  maxIdle="30"/>
7 </Context>

3、在你项目里的web.xml文件里加入如下内容:

1     <!--配置数据源-->
2     <resource-ref>
3         <description>Sqlserver Datasource</description>
4         <res-ref-name>jdbc/sqlserver</res-ref-name>
5         <res-type>javax.sql.DataSource</res-type>
6         <res-auth>Container</res-auth>
7     </resource-ref>

4、在你的代码里引用数据源:

 1     private DataSource ds;
 2 
 3     public LoginBean() {
 4 
 5         try {
 6             // 初始化查找命名空间
 7             Context ctx = new InitialContext();
 8             ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sqlserver") ;
 9         } catch (NamingException e) {
10             System.out.println("使用lookup找不到数据源.");
11             e.printStackTrace();
12         }
13 
14     }

5、测试test.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%!
    final String JNDINAME = "java:comp/env/jdbc/sqlserver" ;
%>
<%
    Connection conn = null ;
    try
    {
        // 初始化查找命名空间
        Context ctx = new InitialContext() ;
        // 找到DataSource
        DataSource ds = (DataSource)ctx.lookup(JNDINAME) ;
        conn = ds.getConnection() ;
        String sql="select passwd,logincount from credential where username=?";
        PreparedStatement pwdQuery=conn.prepareStatement(sql);
        pwdQuery.setString(1,"admin");
        ResultSet result=  pwdQuery.executeQuery();
        if(!result.next()){
             return;
         } 
        System.out.println(result.getString("passwd")) ;
    }
    catch(Exception e)
    {
        System.out.println(e) ;
    }
%>
<%=conn%>
<%
    // 将连接重新放回到池中
    conn.close() ;
%>

只要能输出数据库的连接信息就没问题了。

如果注解不能使用,就不要纠结了,换种方式。

原文地址:https://www.cnblogs.com/yanyd/p/4231815.html