JDBC數(shù)據(jù)源(Data Source)的使用,簡化了數(shù)據(jù)庫的連接過程.
Struts中使用JDBC 2.0標準擴展包中的javax.sql.DataSource接口來實現(xiàn)數(shù)據(jù)源的。
擴展包是jdbc2_0-stdext.jar。,在jdk1.4后版本包含此擴展包。
例如下面的例子。數(shù)據(jù)庫名“classuser”,表:“classuser”。
在Struts配置文件“struts-config.xml中”配置Struts數(shù)據(jù)源,這些數(shù)據(jù)源由ActionServlet負責管理。
以下代碼是Struts-config.xml的配置。
<struts-config>
<data-sources>
<data-source key="oracleDB1" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<set-property property="url"
value="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=classuser;" />
<set-property property="maxActive"
value="5"/>
<set-property property="username"
value="sa"/>
<set-property property="password"
value=""/>
<set-property property="autoCommit"
value="true"/>
</data-source>
</data-sources>
定義模型類DBUser,在該類中封裝了與數(shù)據(jù)庫操作相關(guān)的業(yè)務(wù)邏輯。
package classmate;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUser {
DataSource dataSource;
public DBUser(DataSource dataSource) {
this.dataSource = dataSource;
}
public boolean checkUser(String name,String psw) throws Exception{
Connection connect = null;
String strSql;
ResultSet rs;
boolean result=false;
strSql = "select * from classuser where username='"
+ name + "' and password='" + psw + "'";
try {
connect = dataSource.getConnection();
Statement stmt = connect.createStatement();
rs = stmt.executeQuery(strSql);
if ( rs.next()) {
result=true;
}
}
catch(SQLException ex) {
ex.printStackTrace();
}
finally{
if(connect!=null)
connect.close();
}
return result;
}
}
改造Action Bean類LoginAction,在其中使用前面配置的數(shù)據(jù)源oracleDB1。
ServletContext context = servlet.getServletContext();
DataSource dataSource = (DataSource)context.getAttribute("oracleDB1");
DBUser dbuser = new DBUser(dataSource);
HttpSession session = request.getSession();
if (!dbuser.checkUser(name,psw)) {
ActionMessages errors = new ActionMessages();
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("label.deny"));
if (!errors.isEmpty()) {
saveErrors(request, errors);
}
return mapping.findForward("failed"); //登陸失敗
}
else{
return (mapping.findForward("successed"));//登陸成功
}
}
}
此外,在Struts架構(gòu)中,根據(jù)需要也允許在配置文件中聲明多個數(shù)據(jù)源,此時需要使用“key”屬性為每一個數(shù)據(jù)源分配一個唯一的key值,標示特定數(shù)據(jù)源。