首页 新闻 会员 周边

JDBC工具类连接问题

0
[已解决问题] 解决于 2019-09-03 21:31

在最近使用JDBC连接数据库的时候出现了NoClassDefFoundError错误

代码如下:
public class jdbcDemo9 {

public static void main(String[] args) {
    //1.键盘录入,接受用户名和密码
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入用户名");
    String username = sc.nextLine();
    System.out.println("请输入密码");
    String password = sc.nextLine();
    //2.调用方法
    boolean flag = new jdbcDemo9().login(username,password);
    //3.判断结果输出不同语句
    if (flag){
        System.out.println("登录成功");
    }else {
        System.out.println("用户名或密码错误");
    }

}


/**
 * 登录方法
 */
public boolean login(String username,String password){
    if (username==null || password==null){
        return false;
    }
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs =null;

    //连接数据库判断是否登录成功
    try {
        conn = JDBCUtils.getConnection();//在这里debug的时候显示conn=null
        //2定义sql
        String sql = "select * from user where username = '"+username+"' and password = '"+password+"'";
        //3获取执行sql的对象
        stmt = conn.createStatement();
        //4执行查询
        rs = stmt.executeQuery(sql);
        //5.判断
        return rs.next();  //如果有下一行,返回true

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JDBCUtils.close(rs,stmt,conn);
    }

    return false;
}

}

具体报错为:Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class cn.itcast.jdbc.JDBCUtils
at cn.itcast.jdbc.jdbcDemo9.login(jdbcDemo9.java:58)
at cn.itcast.jdbc.jdbcDemo9.main(jdbcDemo9.java:21)

问题补充:

JDBCUtils工具类:

/**

  • JDBC工具类
    */
    public class JDBCUtils {
    private static String url;
    private static String user ;
    private static String password;
    private static String driver;
    static {
    //获取资源文件,获取值
    try {
    //1、Propertits集合类
    Properties pro = new Properties();
    //获取src路径下的文件的方式:ClassLoader 类加载器 ,要获取Classlodar,要获取他对应的字节码文件
    ClassLoader classLoader = JDBCUtils.class.getClassLoader();
    URL resource = classLoader.getResource("jdbc.propertits");
    String path = resource.getPath(); //返回字符串路径
    //System.out.println(path);

        //2加载文件
         pro.load(new FileReader(path));
         //3获取属性,赋值
         url = pro.getProperty("url");
         user = pro.getProperty("user");
         password = pro.getProperty("password");
         driver = pro.getProperty("driver");
         //注册驱动
         Class.forName(driver);     //之前写的是:com.mysql.cj.jdbc.Driver
     } catch (IOException e) {
         e.printStackTrace();
     } catch (ClassNotFoundException e) {
         e.printStackTrace();
     }

    }

    /**
    • 获取连接
    • @return 连接对象释放资源
      */
      //我看到的错误是这个getConnection()和下面的close()方法未使用
      public static Connection getConnection() throws SQLException {
      return DriverManager.getConnection(url,user,password);
      }
    /**
    • 释放资源
    • @param stmt
    • @param conn
      */
      public static void close(ResultSet rs,Statement stmt, Connection conn){
      if (rs!=null){
      try {
      rs.close();
      } catch (SQLException e) {
      e.printStackTrace();
      }
      }

      if (stmt!=null){
      try {
      stmt.close();
      } catch (SQLException e) {
      e.printStackTrace();
      }
      }

      if (conn!=null){
      try {
      conn.close();
      } catch (SQLException e) {
      e.printStackTrace();
      }
      }

    }

}

这是配置文件:
url=jdbc:mysql://localhost:3306/db4?useSSL=false&serverTimezone=UTC
user=root
password=nana980801
driver=com.mysql.cj.jdbc.Driver

晖晖晖晖的主页 晖晖晖晖 | 菜鸟二级 | 园豆:204
提问于:2019-09-02 22:45
< >
分享
最佳答案
0

不知道兄弟解决没,个人觉得你将ClassLoader classLoader = JDBCUtils.class.getClassLoader();放在静态代码块中,按着加载顺序,应该是先加载static,所以你JDBCUtils类不一定加载了,因此报了NoClassDefFoundError错误,

奖励园豆:5
代码中透露着杀气 | 菜鸟二级 |园豆:221 | 2019-09-03 17:53

很感谢你兄弟,但是还是解决不了,谢谢啦

晖晖晖晖 | 园豆:204 (菜鸟二级) | 2019-09-03 20:20

已经解决了,是我没有正确连接到JDBCUtils上,代码没有问题,还是谢谢了

晖晖晖晖 | 园豆:204 (菜鸟二级) | 2019-09-03 21:28

@晖晖晖晖: 什么意思啊

代码中透露着杀气 | 园豆:221 (菜鸟二级) | 2019-09-04 08:40
其他回答(1)
0

看一下你JDBCUtils这个 类

AntzUhl | 园豆:215 (菜鸟二级) | 2019-09-03 11:29

我已经发了,谢谢你

支持(0) 反对(0) 晖晖晖晖 | 园豆:204 (菜鸟二级) | 2019-09-03 15:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册