| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 914 人关注过本帖
标题:自己修改的通用DAO包哪错了?
只看楼主 加入收藏
北方孤狼
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2008-5-10
结帖率:75%
收藏
 问题点数:0 回复次数:4 
自己修改的通用DAO包哪错了?
package com.aptech.jb.dao;


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

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.jsp.jstl.sql.*;
import javax.sql.DataSource;

/**
 * 通用的JDBC数据库访问类
 * @author Administrator
 *
 */
public class SqlCommandBean {
    private Connection conn=null;
    private List values=new ArrayList();
   
    /**
     * 设定连接JDBC类
     * @param conn 已实例化的JDBC连接类
     * @throws Exception 主要是数据库连接以已实例化且未关闭
     */
    public void setConnection(Connection conn) throws Exception{
        try {
            if(this.conn!=null && !this.conn.isClosed()){
                throw new Exception("Connection数据库未关闭,不能重新实例化!");
            }else{
                this.conn=conn;               
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
   
    /**
     * 设置连接JDBC类
     * @param driverClassName 驱动类字符串
     * @param url 设置数据库连接字符串
     * @param user 设置数据库连接登陆名
     * @param passsword 设置数据库连接登陆密码
     * @throws SQLException 数据库操作异常
     * @throws Exception 主要是数据库连接以已实例化且未关闭或数据库驱动错误
     */
    public void setConnection(String driverClassName, String url, String user,String passsword) throws SQLException, Exception{
        Class.forName(driverClassName);
        if(conn!=null && !conn.isClosed()){
            throw new Exception("Connection数据库未关闭,不能重新实例化!");
        }else{
            this.conn=DriverManager.getConnection(url,user,passsword);            
        }
    }
   
    /**
     * 用JNDI方式设置连接JDBC类
     * @param NamingName 对象绑定名
     * @throws NamingException JNDI异常
     * @throws SQLException 数据库操作异常
     * @throws Exception 主要是数据库连接以已实例化且未关闭或数据库驱动错误
     */
    public void setConnection(String NamingName) throws NamingException,SQLException,Exception{
        if(conn!=null && !conn.isClosed()){
            throw new Exception("Connection数据库未关闭,不能重新实例化!");
        }else{
            Context ic=new InitialContext();
            DataSource source=(DataSource)ic.lookup(NamingName);
               
            this.conn = source.getConnection();        
        }
    }
   
    /**
     * 返回数据库连接类
     * @return 数据库连接类
     */
    private Connection getConnection(){
        return conn;
    }
   
    /**
     * 执行查询
     * @param sqlValue sql语句,'?'代表参数
     * @return 返回查询结果
     * @throws SQLException 数据库操作异常
     */
    public Result executeQuery(String sqlValue) throws SQLException{
        PreparedStatement pstmt=null;
        Statement stmt=null;
        Result result=null;
        ResultSet rs=null;
        try{
            if(values.size()>0){
                pstmt=conn.prepareStatement(sqlValue);
                setValues(pstmt,values);
                rs=pstmt.executeQuery();
            }else{
                stmt=conn.createStatement();
                rs=stmt.executeQuery(sqlValue);
            }
            result=ResultSupport.toResult(rs);
        }finally{
            try{
                if(rs!=null){
                    rs.close();
                }
                if(stmt!=null){
                    stmt.close();
                }
                if(pstmt!=null){
                    pstmt.close();
                }
                if(conn!=null){
                    conn.close();
                }
            }catch(SQLException e){
                System.err.println("关闭数据库时发生错误:"+e.getMessage());
            }
        }
        return result;
    }
   
    /**
     * 执行语句
     * @param sqlValue sql语句,'?'代表参数
     * @return 返回执行行数
     * @throws SQLException 数据库操作异常
     */
    public int executeUpdate(String sqlValue) throws SQLException{
        int noOfRows=0;
        PreparedStatement pstmt=null;
        Statement stmt=null;
        try{
            if(values.size()>0){
                pstmt=conn.prepareStatement(sqlValue);
                setValues(pstmt,values);
                noOfRows=pstmt.executeUpdate();
            }else{
                stmt=conn.createStatement();
                noOfRows=stmt.executeUpdate(sqlValue);
            }
        }finally{
            try{
                if(stmt!=null){
                    stmt.close();
                }
                if(pstmt!=null){
                    pstmt.close();
                }
                if(conn!=null){
                    conn.close();
                }
            }catch(SQLException e){
                System.err.println("关闭数据库时发生错误:"+e.getMessage());
            }            
        }
        return noOfRows;
    }

    /**
     * 从外部设置参数
     * @param i 参数第几个?索引,从0开始
     * @param o 一个参数
     * @throws SQLException 数据库操作异常
     */
    public void setParamer(int i, Object o) throws SQLException{
        values.add(i, o);
    }
   
    /**
     * 内外部设置参数
     * @param ptmt 参数将要赋的对象
     * @param values 参数列表
     * @throws SQLException 数据库操作异常
     */
    private void setValues(PreparedStatement ptmt,List values) throws SQLException{
        for(int i=0;i<values.size();i++){
            Object v=values.get(i);
            ptmt.setObject(i+1, v);
        }
    }
}

提示setValues方法里索引超出范围
搜索更多相关主题的帖子: DAO 
2010-02-02 09:44
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:0 
使用数组、List时,因为上限超过了范围,会出现这样的情况。另外可能是你的数据范围超出了你所定义的范围,我是没空给你调,你打着断点自己跑一遍先。

感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2010-02-02 15:43
北方孤狼
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2008-5-10
收藏
得分:0 
废话
2010-02-03 12:27
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:0 
给你用UT测试了一下,并不报错。应该是你数据库查出来的值有问题,你吧数据库的值直接打印出来,看看是不是不对。
顺便说一下,我是无偿的,我也有我自己的工作,我可以选择回答,也可以选择不回答。请注意文明用语。

感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2010-02-03 14:29
午夜屠猪男
Rank: 4
等 级:业余侠客
威 望:2
帖 子:194
专家分:259
注 册:2007-1-3
收藏
得分:0 
错误信息打印出来

2010-02-04 14:25
快速回复:自己修改的通用DAO包哪错了?
数据加载中...
 
   



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

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