2014年5月14日 星期三

JSP+Tomcat7如何使用JNDI連上MSSQL資料庫

網路上說明JNDI的文章不多
會提到MSSQL的文章更少 (大都教MySQL)
好死不死 我新派遣的公司就是用MSSQL = =+

網路上找半天,拼湊了半天,卻都不成功。
最後被我放在家的天書救了。

紀錄以下通用範例:

環境:
JRE 7
JDK 7
Tomcat 7
MSSQL Server 2012
Eclipse (Kepler) IDE

1. Driver 下載&配置
下載sqljdbc4.jar,並放在%CATALINA_HOME%\lib (eg: C:\tomcat7\lib)
註: 另有 sqljdbc.jar 是給JRE6以下使用

2. context.xml 配置
([!重要] 必須在Eclipse中改,若錯改%CATALINA_HOME%\conf底下的context.xml沒用!!)
[後續]
後來發現,如果你在Eclipse自動發佈到Tomcat\webapps底下Tomcat就會自動在自己的context.xml設定檔中自己加上。

context.xml (在Eclipse左邊Project列表中 Servers->Tomcat->context.xml)
在<Context></Context>中加入:
(大寫字串為自設定變數)


<Context>
...
<Resource name="jdbc/ANYNAME"
 type="javax.sql.DataSource"
 auth="Container"
 username="USERNAME"
 password="PASSWORD"
 url="jdbc:sqlserver://LOCALHOST:1433;databasename=DBNAME"
 driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
/>
...
</Context>


3. 專案中的web.xml
加入:
(大寫字串為自設定變數,res-ref-name得對照context.xml的name)


<resource-ref>
  <description>DESCRIPTION</description>
  <res-ref-name>jdbc/ANYNAME</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
</resource-ref>

4. JSP: 

<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<%
Context ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/ANYNAME");
Connection con = ds.getConnection();
Statement stmt = con.createStatement();
String sql = "";
ResultSet rs;
/* Connect to table Test - Succeed
rs = stmt.executeQuery("SELECT * FROM TABLENAME");
while (rs.next())
{
System.out.println(rs.getString("COLUMN_NAME"));
}
*/
// Call Stored Procedure - Succeed
sql = "EXECUTE [DBNAME].[dbo].[SP_NAME] SP_PARAMETERS";
rs = stmt.executeQuery(sql);
while(rs.next()){
out.println(rs.getString("COLUMN_NAME1")+ " " + rs.getString("COLUMN_NAME2") + "<br/>");
}
if(rs != null)
   rs.close();
if(stmt!=null)
   stmt.close();
if(con!=null)
   con.close();
%>



沒有留言:

張貼留言