會提到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();
%>
沒有留言:
張貼留言