首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

帮小弟我看看代码

2012-01-09 
帮我看看代码!由于本模块要手动拼装SQL,所以我通过hibernate的dateSouce去得到 JDBC的Connection.而且每一

帮我看看代码!
由于本模块要手动拼装SQL,所以我通过hibernate的dateSouce去得到 JDBC的Connection.而且每一次用同一个Connection去操作CRUD,本机测试没有问题,到客户那里在连接池与集群服务器下抛异常。老大说应该每一次都去获取一个Connection,由hibernate去管理Connection,而不是每次都用同一个Connection。
---------------------------修改后的代码-------------------------
1.每次通过hibernate 的dataSource得到不同的Connection实例,执行完SQL 语句后再关闭ResultSet,Statement,Connection这样在连接池和集群服务器下能行不

Java code
package com.landray.kmss.km.coustomtable.dao.jdbc;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import javax.sql.DataSource;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.landray.kmss.common.dao.HQLInfo;import com.landray.kmss.common.model.IBaseModel;import com.landray.kmss.km.coustomtable.dao.IKmCustbDataOperaDao;import com.landray.kmss.km.coustomtable.model.KmCustbData;import com.landray.kmss.km.coustomtable.model.KmCustbTb;import com.landray.kmss.km.coustomtable.util.Constants;import com.landray.kmss.util.DateUtil;import com.sunbor.web.tag.Page;/** * 创建日期 2009-五月-11 *  * @author 罗小军 自定义表维护 */public class KmCustbDataOperaDaoImp implements IKmCustbDataOperaDao {    private DataSource dataSource;    private String dbType;    public DataSource getDataSource() {        return dataSource;    }    public void setDataSource(DataSource dataSource) {        this.dataSource = dataSource;    }    public String getDbType() {        return dbType;    }    public void setDbType(String dbType) {        this.dbType = dbType;    }    public Connection getConnection() throws SQLException {        return dataSource.getConnection();    }    public Long add(IBaseModel modelObj) throws Exception {        Connection connection = getConnection();        KmCustbTb kmCustbTb = null;        if (modelObj instanceof KmCustbTb) {            kmCustbTb = (KmCustbTb) modelObj;            StringBuffer addStr = new StringBuffer();            StringBuffer addValueStr = new StringBuffer();            addStr.append("insert into ");            addStr.append(kmCustbTb.getFdTableName());            addStr.append(" ( ");            addValueStr.append(" ) values ( ");            // 判断数据库            if (Constants.ORACLE.equalsIgnoreCase(dbType)) {                // 暂未对主键生成方式(getPkType)做判断,默认为自动增长                addStr.append(kmCustbTb.getFdPkName());                addStr.append(",");                addValueStr.append("hibernate_sequence.nextval,");            }            List dataList = kmCustbTb.getCustbDatas();            for (int i = 0; i < dataList.size(); i++) {                KmCustbData tempData = (KmCustbData) dataList.get(i);                addStr.append(tempData.getFdCloumnName());                if (Constants.DATE.equalsIgnoreCase(tempData.getFdDataType())                        && Constants.ORACLE.equalsIgnoreCase(dbType)) {                    addValueStr.append("to_date('");                    addValueStr.append(tempData.getFdValue());                    addValueStr.append("','yyyy-mm-dd hh24:mi:ss')");                    continue;                } else {                    addValueStr.append("'");                    addValueStr.append(tempData.getFdValue());                    addValueStr.append("'");                }                if (i + 1 < dataList.size()) {                    addStr.append(",");                    addValueStr.append(",");                }            }            addValueStr.append(")");            addStr.append(addValueStr);            logger.debug("insert statement : " + addStr);            Statement statement = connection.createStatement();            statement.execute(addStr.toString());            close(connection, statement, null);        }        return kmCustbTb.getFdId();    }    public Page findPage(HQLInfo hqlInfo, IBaseModel model) throws Exception {        Connection connection = getConnection();        Statement statement = connection.createStatement();        ResultSet resultSet = null;        StringBuffer selectStr = new StringBuffer();        KmCustbTb kmCustbTb = null;        if (model instanceof KmCustbTb) {            kmCustbTb = (KmCustbTb) model;            if (Constants.ORACLE.equalsIgnoreCase(dbType)) {                selectStr                        .append("select * from (select a.*,rownum rn from (select * from ");                selectStr.append(kmCustbTb.getFdTableName());                selectStr.append(" order by ");                selectStr.append(kmCustbTb.getFdPkName());                selectStr.append(" ) a where rownum<=");                selectStr.append(hqlInfo.getPageNo() * hqlInfo.getRowSize());                selectStr.append(") where rn>");                selectStr.append((hqlInfo.getPageNo() - 1)                        * hqlInfo.getRowSize());                selectStr.append(" order by ");            } else {                selectStr.append("select top ");                selectStr.append(hqlInfo.getRowSize());                selectStr.append(" * from ");                selectStr.append(kmCustbTb.getFdTableName());                selectStr.append(" where ( ");                selectStr.append(kmCustbTb.getFdPkName());                selectStr.append(" not in ( select top ");                selectStr.append((hqlInfo.getPageNo() - 1)                        * hqlInfo.getRowSize());                selectStr.append(" ");                selectStr.append(kmCustbTb.getFdPkName());                selectStr.append(" from ");                selectStr.append(kmCustbTb.getFdTableName());                selectStr.append(" order by ");                selectStr.append(kmCustbTb.getFdPkName());                selectStr.append(" )) order by ");            }            if (hqlInfo != null && hqlInfo.getOrderBy() != null) {                selectStr.append(hqlInfo.getOrderBy());            } else {                selectStr.append(kmCustbTb.getFdPkName());            }            if (hqlInfo != null                    && Constants.DOWN.equalsIgnoreCase(hqlInfo.getOrderBy())) {                selectStr.append(" desc ");            }            logger.debug("select statement = " + selectStr);        }        // 查询得到ResultSet对象        resultSet = statement.executeQuery(selectStr.toString());        KmCustbTb kmCustbTbValue = new KmCustbTb();        List valueList = new ArrayList();        while (resultSet.next()) {            // clone kmCustbTb对象            KmCustbTb tempKmCustbTb = (KmCustbTb) kmCustbTb.clone();            List dataList = tempKmCustbTb.getCustbDatas();            // 给主键赋值            tempKmCustbTb.setFdPkValue(resultSet.getLong(tempKmCustbTb                    .getFdPkName()));            // 通过循环把值set到custbData中            for (int j = 0; j < dataList.size(); j++) {                KmCustbData custbData = (KmCustbData) dataList.get(j);                if (Constants.DATE.equals(custbData.getFdDataType())) {                    custbData.setFdValue(DateUtil.convertDateToString(DateUtil                            .convertStringToDate(resultSet.getString(custbData                                    .getFdCloumnName()), "yyyy-MM-dd"),                            "yyyy-MM-dd"));                } else {                    custbData.setFdValue(resultSet.getString(custbData                            .getFdCloumnName()));                }            }            valueList.add(tempKmCustbTb);        }        // 测试数据        Page page = new Page();        page.setList(valueList);        close(connection, statement, resultSet);        return page;    }    // select count(id) from tableName    // 获取某个表中的数据数量    public Long getCount(String tableName, String id) throws Exception {        Connection connection = getConnection();        Statement statement = connection.createStatement();        StringBuffer selectCount = new StringBuffer("select count(");        selectCount.append(id);        selectCount.append(") from ");        selectCount.append(tableName);        ResultSet resultSet = statement.executeQuery(selectCount.toString());        if (resultSet != null) {            resultSet.next();            return resultSet.getLong(1);        }        close(connection, statement, resultSet);        return null;    }    public void close(Connection connection, Statement statement,            ResultSet resultSet) throws SQLException {        if (resultSet != null) {            resultSet.close();            resultSet = null;        }        if (statement != null) {            statement.close();            statement = null;        }        if (connection != null) {            connection.close();            connection = null;        }    }} 




[解决办法]
不可以用连接池吗?
[解决办法]
语句后再关闭ResultSet,Statement,Connection这样在连接池

连接池里,连接是不要关的,否则肯定会有异常, 应该有个管理连接池的类吧
...........
和集群服务器下能行不 

这个我不清楚
[解决办法]
没有错误信息吗?
[解决办法]
必须将close操作放在try{}catch(){}finally{close(con,st,rs);}中,否则会在出现异常的时候造成资源泄漏。
[解决办法]
你不是用的hibernate嘛 看一下数据库连接上没有。
自己可以得到连接啥 你不是继承了一个HibernateDaosupport
session = super.getSession(); 这个不是得到连接了嘛。
Query query = session.createQuery(hql); 这样你就可以写sql语句了
该返回什么就返回什么 。。。。
[解决办法]
不懂,帮你顶一下!
[解决办法]
cueernt试下
[解决办法]
探讨
老大说了,不要关闭连接,让hibernate去管理它

热点排行