连接池中有报错无法解决

连接池中有报错无法解决

https://img1.sycdn.imooc.com//climg/651b743a08a181bf05170251.jpg

https://img1.sycdn.imooc.com//climg/651b743a086e060012870365.jpg

package com.imooc.jdbc.sample;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import common.DbUtils;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;

/**
 * Druid连接池配置与使用
 */
public class DruidSample {
    public static void main(String[] args) {
        //1.加载属性文件
        Properties properties=new Properties();
        String propertyFile= DruidSample.class.getResource("druid-config.properties").getPath();
        //空格->%20 | c:\java code\druid-config.properties
        //c:\java%20code\druid-config.properties
        try {
            propertyFile =new URLDecoder().decode(propertyFile,"UTF-8");
            properties.load(new FileInputStream(propertyFile));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        Connection conn=null;
        PreparedStatement pstmt=null;
        ResultSet rs=null;
        try {
            //2.获取DataSource数据源对象
            DataSource dataSource= DruidDataSourceFactory.createDataSource(properties);
            //3.创建数据库连接
            conn=dataSource.getConnection();
            pstmt=conn.prepareStatement("select * from employee limit 0,10");
            rs=pstmt.executeQuery();
            while (rs.next()) {
                Integer eno = rs.getInt(1); //JDBC中字段索引从1开始,而非0
                String ename = rs.getString("ename");
                Float salary = rs.getFloat("salary");
                String dname = rs.getString("dname");
                System.out.println(dname + "-" + eno + "-" + ename + "-" + salary);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DbUtils.closeConnection(rs,pstmt,conn);
        }
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-10-05 09:16:34

同学你好,建议同学点开URLDecoder类的源码查看一下:

1.decode方法是否是静态方法;

2.URLDecoder构造方法是否为私有方法。

由于高版本的URLDecoder类中,已经不再允许创建URLDecoder对象,并且将decode方法修改为了静态方法。如果同学使用的版本与课程不一致,确实会出现这样的问题,此处只需要将

new URLDecoder().decode(propertyFile, "UTF-8");

修改为

URLDecoder.decode(propertyFile, "UTF-8");

这样的静态调用方式即可。

祝学习愉快~

  • 提问者 有点瑕疵 #1

    https://img1.sycdn.imooc.com//climg/6520dd03085600e608770200.jpg

    我查了一下 确实是静态的,改了后依然报错

    2023-10-07 12:22:59
  • 好帮手慕小蓝 回复 提问者 有点瑕疵 #2

    同学你好,如上面老师的代码,在URLDecoder这个类名后是没有括号的,同学加了括号之后有语法错误,所以会报错。

    静态方法的调用方式是“类名.方法名(参数列表)”,是没有括号的。

    祝学习愉快~

    2023-10-07 13:37:35
  • 提问者 有点瑕疵 回复 好帮手慕小蓝 #3

    https://img1.sycdn.imooc.com//climg/652659ee0941b02b11400229.jpg

    还有问题


    2023-10-11 16:18:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师