立志成为黑客 2022-05-03 12:00 采纳率: 68.3%
浏览 253
已结题

java代码出现空指针,到底那里错了呀?

img

img

img

package PetShop.util;



import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public abstract class DBUtil<T>{
    private Connection conn=null;
    private PreparedStatement pst=null;
    private ResultSet rs=null;
    private Properties pro=new Properties();
    //1.统一连接方法 需要上面那一串
    public Connection getConn(){
        try {
            pro.load(this.getClass().getClassLoader().getResourceAsStream("db.properties"));
            Class.forName(pro.getProperty("driver"));
            conn= DriverManager.getConnection(pro.getProperty("url"),pro.getProperty("uname"),pro.getProperty("password"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    //2.统一关闭方法
    public void getClose(ResultSet rs,PreparedStatement pst,Connection conn){
        try {
            if (rs!=null){
             rs.close();
            }if (pst!=null){
                pst.close();
            }if(conn!=null){
                conn.close();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    //3.统一更新方法 增删改返回的都是受影响行数
    public boolean update(String sql,Object...obj){
        try {
            pst=getConn().prepareStatement(sql);
            //为占位符赋值
            for (int i = 0; i < obj.length; i++) {
                pst.setObject(i+1,obj[i]);
            }
            //执行sql
            int row=pst.executeUpdate();
            if (row>0){
                return true;
            }
        }catch (Exception e){
                e.printStackTrace();
        }
        return false;
    }
    //4.统一查询方法
    public List<T> query(String sql,Object...obj){
        List<T>list=new ArrayList<>();
        try {
            pst=getConn().prepareStatement(sql);
            //为占位符赋值
            for (int i = 0; i < obj.length; i++) {
                pst.setObject(i+1,obj[i]);
            }
            //执行sql
            rs=pst.executeQuery();
            //获取结果集的数据源结构
            ResultSetMetaData rsmd=rs.getMetaData();
            //获取到表名,得到类
            String tableName=rsmd.getTableName(1);
            Class Clazz=Class.forName("PetShop/bean."+tableName.substring(0,1).toUpperCase()+tableName.substring(1));
            //获取到字段的个数
            int cnum=rsmd.getColumnCount();
            while (rs.next()){
                //创建对象 不要去检查的警告,解决警告
                @SuppressWarnings("unchecked")
                T t= (T) Clazz.newInstance();
                //循环字段
                for (int i = 0; i < cnum; i++) {
                    //循环字段并获取到字段名称
                    String cname=rsmd.getColumnName(i+1);
                    //通过字段名获取到属性
                    Field f= Clazz.getDeclaredField(cname);
                    //打开权限
                    f.setAccessible(true);
                    //为每个属性赋值
                    f.set(t,rs.getObject(i+1));
                }
                //再将对象放入集合
                list.add(t);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return list;
    }
}





#??
driver=com.mysql.jdbc.Driver
#???????
#url=jdbc:mysql://localhost:3306/myshop1?characterEncoding=utf-8&useSSL=true
url=jdbc:mysql://localhost:3306/petshop?characterEncoding=utf-8&useSSL=true
#???
uname=root
#??
password=111111


#???????
#url=jdbc:mysql://localhost:3306/myshop?characterEncoding=utf-8




  • 写回答

11条回答 默认 最新

  • zhangsz_sh 2022-05-03 13:02
    关注
    获得1.10元问题酬金

    显示下行号,test a main.java 中12行

    评论

报告相同问题?

问题事件

  • 系统已结题 5月11日
  • 创建了问题 5月3日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表