使用工具: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\tomcat7\lib
2、在D:\IntelliJ\tomcat7\conf目錄里的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() ; %>
只要能輸出數據庫的連接信息就沒問題了。
如果注解不能使用,就不要糾結了,換種方式。