标题:我想问大家一个问题:用struts开发的时候,数据库连接这个地方大家是怎么写 ...
只看楼主
hanshengchua
Rank: 1
等 级:禁止访问
威 望:2
帖 子:174
专家分:0
注 册:2006-5-8
 问题点数:0 回复次数:8 
我想问大家一个问题:用struts开发的时候,数据库连接这个地方大家是怎么写的?

1:我看精通struts 邮电出版社的那本书的时候,讲的是使用struts-config.xml中的datasource配置数据源。
然后在每个action都写一个获得数据源 DataSource dataSource=(DataSource)this.getDataSource(request,"datasource");然后在写数据库的读取或者增加或者删除操作。最后相应的每个数据库资源的释放。代码贴出:
stuts-config.xml:
<struts-config>
<data-sources>
<data-source key="datasource" type="org.apache.commons.dbcp.BasicDataSource">
<set-property property="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<set-property property="url"
value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shopping"/>
<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>
.....
</struts-config>
相关的action类:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.wnkj.struts.action.corporation;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.wnkj.struts.form.NewloginForm;

/**
* MyEclipse Struts
* Creation date: 07-07-2007
*
* XDoclet definition:
* @struts.action path="/newlogin" name="newloginForm" input="/form/newlogin.jsp" scope="request" validate="true"
* @struts.action-forward name="success" path="/struts/ok1.jsp"
*/
public class NewloginAction extends Action {
String howemail="@ny114.cn";
Connection con=null;
Statement stat=null;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
NewloginForm newloginForm = (NewloginForm) form;// TODO Auto-generated method stub
String username=newloginForm.getUsername();
String psd=newloginForm.getPassword1();
String email=newloginForm.getEmail();
String standemail=username+howemail;
try{
DataSource dataSource=(DataSource)this.getDataSource(request,"datasource");
con=dataSource.getConnection();
stat=con.createStatement();
String sql="insert into t_user(f_nickName,f_password,f_email,f_regtime,f_standemail) values ('"+username+"','"+psd+"','"+email+"',getdate(),'"+standemail+"')";
int i=stat.executeUpdate(sql);
if(i>0){
request.setAttribute("insert", sql);
HttpSession session=request.getSession();
session.setAttribute("username", username);

}
else{
request.setAttribute("error", sql);
}
}
catch(Exception ex){
ex.printStackTrace();
}
finally{
if(con!=null){
try{
con.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
close();
}
return mapping.findForward("success");
}

public void close(){
try{
if(stat!=null){
try{
stat.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
catch(Exception ex){
ex.printStackTrace();
}

}
}
以上是第一种方法,下面是第二种方法。


见下帖:

搜索更多相关主题的帖子: 数据库 struts 开发 
2007-08-06 09:26
hanshengchua
Rank: 1
等 级:禁止访问
威 望:2
帖 子:174
专家分:0
注 册:2006-5-8
得分:0 
回复:(hanshengchua)我想问大家一个问题:用struts...


2:我看别人写的还有一种方法:(代码贴出)
package com.wnkj.dbutil;

import java.util.*;
import java.sql.*;

import com.wnkj.propertites.*;
import com.wnkj.pubclass.*;

public class Connect extends WriteLog
{
public Connection con=null;
public PreparedStatement pst=null;
public ResultSet rs=null;

private ArrayList celList=null;
private ArrayList rowList=null;
private int count=0;
public Connect()
{
try
{
String strCon="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String strUrl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=NPK2007";
/*
GetConnect.GetConnection();
Class.forName(GetConnect.ClassConnection);
con=java.sql.DriverManager.getConnection(GetConnect.ConnectionUrl,GetConnect.uid,GetConnect.pwd);
*/
Class.forName(strCon);
con=java.sql.DriverManager.getConnection(strUrl,"npk2007","npk2007");
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex,this.toString());
}
}
/**
* 查询信息
*/
public ArrayList select()
{
try
{
rowList=new ArrayList();
rs=pst.executeQuery();
while(rs.next())
{
celList=new ArrayList();
for(int i=1;i<=rs.getMetaData().getColumnCount();i++)
{
celList.add(rs.getString(i)+"");
}
rowList.add(celList);
}

}catch(Exception ex)
{
ex.printStackTrace();
Write(ex, this.toString());
} finally {
try {
if (rs != null)
rs.close();
if (pst != null)
pst.close();
close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Write(e, this.toString());
}
}
return rowList;
}
/**
* 查询信息记录数
* @return
*/
public int selectCount()
{
try
{
rowList=new ArrayList();
rs=pst.executeQuery();
if(rs.next())
{
count=rs.getInt(1);
}
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex, this.toString());
} finally {
try {
if (rs != null)
rs.close();
if (pst != null)
pst.close();
close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Write(e, this.toString());
}
}
return count;
}
/**
* 添加一条新的信息
* @return
*/
public int insert()
{
try
{
count=this.pst.executeUpdate();
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex,this.toString());
} finally {
try {
if (pst != null)
pst.close();
close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Write(e, this.toString());
}
}
return count;
}
/**
* 更新表中的数据
* @return
*/
public int update()
{
try
{
count=this.pst.executeUpdate();
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex,this.toString());
} finally {
try {
if (pst != null)
pst.close();
close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Write(e, this.toString());
}
}
return count;
}
/**
* 删除表中的数据
* @return
*/
public int delete()
{
try
{
count=this.pst.executeUpdate();
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex,this.toString());
} finally {
try {
if (pst != null)
pst.close();
close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Write(e, this.toString());
}
}
return count;
}
/**
* 关闭数据库连接
*
*/
public void close()
{
try
{
if(this.con!=null)
{
con.close();
}
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex,this.toString());
}
}
}

可以看出,这个属于数据库相关操作的类。另外相应的具体操作数据库还有一个类,贴了:

package com.wnkj.dbutil;

import java.util.*;

public class DB_GuanLiMember extends Connect {
private String sql = "";

/**
* 添加一个新的职员
*
* @return
*/
public int insertinfor(String guanlinum, String memnum, String memname,
String deptnum, String guantime, String note) {
try {
sql = "insert into guanlimember(guanlinum,memnum,memname,deptnum, guantime,note) values(?,?,?,?,?,?)";
this.pst = this.con.prepareStatement(sql);
this.pst.setString(1, guanlinum);
this.pst.setString(2, memnum);
this.pst.setString(3, memname);
this.pst.setString(4, deptnum);
this.pst.setString(5, guantime);
this.pst.setString(6, note);
} catch (Exception ex) {
ex.printStackTrace();
Write(ex, this.toString());
}
return this.insert();
}

public int updateById(String guanlinum, String memnum, String memname,
String deptnum,String guantime, String note,
int id) {
try {
sql = "update guanlimember set guanlinum=?,memnum=?,memname=?,deptnum=?,guantime=?,note=? where id=?";
this.pst = this.con.prepareStatement(sql);
this.pst.setString(1, guanlinum);
this.pst.setString(2, memnum);
this.pst.setString(3, memname);
this.pst.setString(4, deptnum);
this.pst.setString(5, guantime);
this.pst.setString(6, note);
this.pst.setInt(7, id);
} catch (Exception ex) {
ex.printStackTrace();
Write(ex, this.toString());
}
return this.update();
}
/**
* 根据id删除某条记录信息
* @param id
* @return
*/
public int deleteinfor(int id)
{
try
{
sql="delete from guanlimember where id=?";
this.pst=this.con.prepareStatement(sql);
this.pst.setInt(1, id);
}catch(Exception ex)
{
ex.printStackTrace();
Write(ex,this.toString());
}
return this.delete();
}
/**
* 查询某一个会员的id信息
*
* @param deptnum
* @return
*/
public ArrayList selectById(int id) {
try {
sql = "select * from guanlimember where id=?";
this.pst = this.con.prepareStatement(sql);
this.pst.setInt(1, id);
} catch (Exception ex) {
ex.printStackTrace();
Write(ex, this.toString());
}
return this.select();
}

/**
* 查询某一个部门的会员信息
*
* @param deptnum
* @return
*/
public ArrayList selectByDeptNum(String deptnum) {
try {
sql = "select * from guanlimember where deptnum=?";
this.pst = this.con.prepareStatement(sql);
this.pst.setString(1, deptnum);
} catch (Exception ex) {
ex.printStackTrace();
Write(ex, this.toString());
}
return this.select();
}

/**
* 查询管理表中的所有数据信息
*
* @return
*/
public ArrayList selectAll() {
try {
sql = "select guanlimember.id,guanlinum,memnum,memname,jigou.deptnum,jigou.deptname,guantime,guanlimember.note from guanlimember,jigou where guanlimember.deptnum=jigou.deptnum";
this.pst = this.con.prepareStatement(sql);
} catch (Exception ex) {
ex.printStackTrace();
Write(ex, this.toString());
}
return this.select();
}
}

最后是相应的action类:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.wnkj.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.wnkj.dbutil.DB_GuanLiMember;
import com.wnkj.dbutil.DB_ZhangQi;
import com.wnkj.formbean.AddZhiYuanForm;

/**
* MyEclipse Struts Creation date: 05-14-2007
*
* XDoclet definition:
*
* @struts.action path="/addZhiyuan" name="addZhiyuanForm"
* input="/form/addZhiyuan.jsp" scope="request" validate="true"
*/
public class AddZhiYuanAction extends Action {
/*
* Generated Methods
*/
public static int flag = 0;

/**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AddZhiYuanForm addZhiYuanForm = (AddZhiYuanForm) form;
String guanlinum = addZhiYuanForm.getGuanlinum();
String memnum = addZhiYuanForm.getMemnum();
String memname = addZhiYuanForm.getMemname();
String deptnum = addZhiYuanForm.getDeptnum();
String guantime = addZhiYuanForm.getGuantime();
String note = addZhiYuanForm.getNote();

int row = new DB_GuanLiMember().insertinfor(guanlinum, memnum, memname,
deptnum, guantime, note);
if (row == 1) {
flag = 1;
} else {
flag = -1;
}
response.sendRedirect(request.getContextPath()+ "/nongzi/addZhiYuan.jsp");
return null;
}
}

贴码完毕,请问:在struts开发中用哪一个模式比较好?或者还有其他更优秀的做法,请大家多多指点。

以上两个代码中,我有两个地方不是很理解:
1:使用datasource配置时候,每个action都要打开-操作-关闭数据库,很繁琐。
2:在第二类代码中,已经写好try catch finally 之后是不是就不用在相关子类或者action中调用关闭方法了?

敬请高人指点,谢谢!!

2007-08-06 09:27
hanshengchua
Rank: 1
等 级:禁止访问
威 望:2
帖 子:174
专家分:0
注 册:2006-5-8
得分:0 

怎么没人回复??
2007-08-06 11:23
喃瑟
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2007-1-25
得分:0 
受不了 粘这么多代码,怎么不把问题说清楚

光与影的1/2
2007-08-06 17:17
黑白不分
Rank: 2
等 级:论坛游民
帖 子:77
专家分:20
注 册:2006-5-9
得分:0 
你是问这两个为什么不同吗?如果是这个意思的话,第一个是用配置数据库连接池做的,第二个是用jdbc直连的.两个的主要区别是,1.如果多个叶面数据库的操作,第一个如果要修改方便的多了,只要修改一个配置文件的设置整个程序的多个连接也就相应的改变了.第二种如果改的话,就太麻烦了.要没个连接改一遍2.第一个方法的资源管理有容器控制,效率要高.第二中要自己手工写代码控制,每次的关关开开的影响效率.

2007-08-16 17:30
黑白不分
Rank: 2
等 级:论坛游民
帖 子:77
专家分:20
注 册:2006-5-9
得分:0 

要是现在流行的连接数据库的方法是,用架构.struts+hibenat.


2007-08-16 17:34
stephen722
Rank: 1
等 级:新手上路
威 望:1
帖 子:96
专家分:0
注 册:2005-12-9
得分:0 
以下是引用黑白不分在2007-8-16 17:34:34的发言:

要是现在流行的连接数据库的方法是,用架构.struts+hibenat.

晕 以来就说这个
吓人阿!·


从街口开始寻找城市里的好去处!
街口网-http://www.
2007-08-16 17:37
ermaogogo
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-8-5
得分:0 

DataSource比JDBC配置和修改都方便.
<?xml version="1.0" encoding="UTF-8"?>
<!-- **************************************************************************-->
<!-- * Company XX -->
<!-- * Project XXXXXXXXXXXXXX -->
<!-- * File applicationContext.xml -->
<!-- * Desctption Spring Application Context Configuration File -->
<!-- * Create By XXXXXXXXX -->
<!-- * -->
<!-- * Author $Author: XXXXXXXXX $ -->
<!-- * Version $Revision: 1.00 $ -->
<!-- * Create On $Date: 2007/08/10 08:31:00 $ -->
<!--***************************************************************************-->

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/WEB-INF/dtd/spring-beans.dtd">

<beans
default-autowire="no"
default-lazy-init="false"
default-dependency-check="none">

<!-- *****************************configuration the dataSource instance*********************** -->

<!-- dataSource configuration -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@XXX.XXX.XXX.XX:1521:XXXXXX</value>
</property>
<property name="username">
<value>XXXX</value>
</property>
<property name="password">
<value>XX</value>
</property>
</bean>

2007-08-17 07:36
hardes
Rank: 1
等 级:新手上路
帖 子:322
专家分:0
注 册:2006-6-3
得分:0 
LS的,我真受不鸟你了,讨论hibernate优点缺点的时候你也这样,这不是答非所问吗?
别人问你struts的问题,你把spring配置贴出来做什么呀?
你怕别人不知道你会spring吗?

LZ在struts中关于数据库连接方面的东西,你可以将数据库连接发布为JNDI资源由容器管理啊,这方法不错的,很实用的啊!!
你可以参考下相关资料啊,我只提点意见!

当神已无能为力,就让爷来普度众生吧!
2007-08-17 09:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-160599-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.233807 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved