黑马程序员技术交流社区

标题: 关于jdbc [打印本页]

作者: 杨雯雯    时间: 2013-1-1 15:02
标题: 关于jdbc
//增删改的共同方法
public int iud(String sql,String []a){
  int r=0;
  
  try {
   conn=this.getConn();
   pst=conn.prepareStatement(sql);
   if(a!=null){
   for(int i=0;i<a.length;i++){
    pst.setString(i+1, a[i]);
   
   }
   }
   r=pst.executeUpdate();
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   this.closeAll();
  }
  
  return r;
}
这是增删改的一个总方法,但是传人的数组设置为string类型好像有问题,请哪位大虾帮忙写一个增删改的总方法,或者把我那个方法改一下
作者: 郝福明    时间: 2013-1-1 15:27
public static void executeUpdate(String sql,String[] parameters){
        try{
                ct = getConnection();
                ps = ct.prepareStatement(sql);
                if(parameters!=null){
                        for(int i=0;i<parameters.length;i++){
                                ps.setString(i+1;parameters);
                        }
                }
                //执行
                ps.executeUpdate();
        }catch(Exception e){
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
        }finally{
               
        }
}
就是这么写啊,传入参数是数组啊,改成string应该也可以啊,直接调用静态方法就行啊,为什么要给他一个返回值呢

作者: 王玮    时间: 2013-1-1 15:42
按理说可以的啊,要是String[] 不行的话 换成 List 试试。 楼上的说的,返回值的问题,就是看看执行多少次操作(或者操作多少条数据)。
作者: 张会文    时间: 2013-1-1 21:39
这个的问题不是return,而是传入的Strig类型的数组,因为数据中的数据类型不都是String类型的,也有number、float、double类型的,所以在进行增删改的操作的时候要对数据类型进行判断,然后传入符合数据库表要求的数据类型,一下是我的代码,仅供参考:
public int update(String sql,List<String[]> param){
                 //处理结果
           public final String p_char = "1";
        // 整数类型
        public final String p_num = "2";
        // 日期型
        public final String p_date = "3";
        // 浮点
        public final String p_double = "4";
        //实数
        public final String p_float="5";
         
        private static Connect conn;
         
                int result = 0;
                Connection conn = null;
                PreparedStatement ps = null;
                try {
                        // 获取一个连接
                        conn = this.getConnection();
                        // 执行预备语句
                        ps = conn.prepareStatement(sql);
                       
            int seq = 1;
            
            for(String[] elem : param){
                    // 参数数组长度为1的,默认为字符类型
                    if(elem.length == 1){
                            ps.setString(seq, elem[0]);
                    }else{
                            if(p_char.equals(elem[1])){
                                    ps.setString(seq, elem[0]);
                            }else if(p_num.equals(elem[1])){
                                    ps.setLong(seq, Long.valueOf(elem[0]));
                            }else if(p_double.equals(elem[1])){
                                    ps.setDouble(seq, Double.valueOf(elem[0]));
                            }else if(p_date.equals(elem[1])){
                                    java.util.Date tmp = DateUtil.parse(elem[0]);
                                    Date temp = new Date(tmp.getTime());
                                    ps.setDate(seq, temp);
                            }else if(p_float.equals(elem[1])){
                                    ps.setFloat(seq, Float.parseFloat(elem[0]));
                            }
                    }
                    seq++;
            }
                        // 执行操作
                        result  = ps.executeUpdate();
                        ps.close();
                        ps = null;
                        conn.close();
                        conn = null;
                       
                } catch (SQLException e) {
                        e.printStackTrace();
                } finally {
                        this.freeStatement(ps);
                        this.freeConnection(conn);
                }
               
                return result;
        }
执行结果resul>0则操作成功
List<String[]> param中String[]中的只有两个元素,第一个是要插入的数据,第二个是对应的数据库中要求的数据类型,例如:param.add(new String[]{useid,conn.p_num});
作者: 张会文    时间: 2013-1-1 21:41
这个的问题不是return,而是传入的Strig类型的数组,因为数据中的数据类型不都是String类型的,也有number、float、double类型的,所以在进行增删改的操作的时候要对数据类型进行判断,然后传入符合数据库表要求的数据类型,一下是我的代码,仅供参考:
public int update(String sql,List<String[]> param){
                 //处理结果
           public final String p_char = "1";
        // 整数类型
        public final String p_num = "2";
        // 日期型
        public final String p_date = "3";
        // 浮点
        public final String p_double = "4";
        //实数
        public final String p_float="5";
         
        private static Connect conn;
         
                int result = 0;
                Connection conn = null;
                PreparedStatement ps = null;
                try {
                        // 获取一个连接
                        conn = this.getConnection();
                        // 执行预备语句
                        ps = conn.prepareStatement(sql);
                       
            int seq = 1;
            
            for(String[] elem : param){
                    // 参数数组长度为1的,默认为字符类型
                    if(elem.length == 1){
                            ps.setString(seq, elem[0]);
                    }else{
                            if(p_char.equals(elem[1])){
                                    ps.setString(seq, elem[0]);
                            }else if(p_num.equals(elem[1])){
                                    ps.setLong(seq, Long.valueOf(elem[0]));
                            }else if(p_double.equals(elem[1])){
                                    ps.setDouble(seq, Double.valueOf(elem[0]));
                            }else if(p_date.equals(elem[1])){
                                    java.util.Date tmp = DateUtil.parse(elem[0]);
                                    Date temp = new Date(tmp.getTime());
                                    ps.setDate(seq, temp);
                            }else if(p_float.equals(elem[1])){
                                    ps.setFloat(seq, Float.parseFloat(elem[0]));
                            }
                    }
                    seq++;
            }
                        // 执行操作
                        result  = ps.executeUpdate();
                        ps.close();
                        ps = null;
                        conn.close();
                        conn = null;
                       
                } catch (SQLException e) {
                        e.printStackTrace();
                } finally {
                        this.freeStatement(ps);
                        this.freeConnection(conn);
                }
               
                return result;
        }
执行结果resul>0则操作成功
List<String[]> param中String[]中的只有两个元素,第一个是要插入的数据,第二个是对应的数据库中要求的数据类型,例如:param.add(new String[]{useid,conn.p_num});
作者: 张会文    时间: 2013-1-1 21:45
这个的问题不是return,而是传入的Strig类型的数组,因为数据中的数据类型不都是String类型的,也有number、float、double类型的,所以在进行增删改的操作的时候要对数据类型进行判断,然后传入符合数据库表要求的数据类型,一下是我的代码,仅供参考:
public int update(String sql,List<String[]> param){
                 //处理结果
           public final String p_char = "1";
        // 整数类型
        public final String p_num = "2";
        // 日期型
        public final String p_date = "3";
        // 浮点
        public final String p_double = "4";
        //实数
        public final String p_float="5";
         
        private static Connect conn;
         
                int result = 0;
                Connection conn = null;
                PreparedStatement ps = null;
                try {
                        // 获取一个连接
                        conn = this.getConnection();
                        // 执行预备语句
                        ps = conn.prepareStatement(sql);
                       
            int seq = 1;
            
            for(String[] elem : param){
                    // 参数数组长度为1的,默认为字符类型
                    if(elem.length == 1){
                            ps.setString(seq, elem[0]);
                    }else{
                            if(p_char.equals(elem[1])){
                                    ps.setStrin
作者: 崔政    时间: 2013-1-2 12:10
为什么我想到了反射。。
  1. public static void setProperty(Object obj, String propertyName, Object value)throws Exception{
  2.                 Class cl=obj.getClass();                //得到该类的字节码
  3.                 Field[]fields=cl.getDeclaredFields();//得到该类所有字段
  4.                 for(Field f:fields){                        //遍历字段
  5.                         f.setAccessible(true);                //暴力访问
  6.                         if(propertyName.equals(f.getName())){//判断,如果得到的属性名与propertyName相等
  7.                                 f.set(obj, value);                                //那么就设置该对象属性的值
  8.                         }
  9.                 }
  10.         }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2