JDBC连接数据库时出现的常见错误解决办法

技术更新往往是比较快的,最近在学习JDBC时就因为学习资料比较旧导致出了不少小问题,我使用的mysql版本是8.0.x,mysql-connector版本8.0.x

应该改为Class.forName("com.mysql.cj.jdbc.Driver");新版本,系统可以自动加载,不用书写也可以

老版本url="

jdbc:mysql://localhost:3306/databaseName"

新版本url="

jdbc:mysql://localhost:3306/databaseName?serverTimezone=GMT"这是对时区的设置,不设置就抛错,同时这种写法会有警告,是要求你主动设置是否进行加密校验,即useSSL=false或者useSSL=true //url中的?之后的是属性设置

推荐url="

jdbc:mysql://localhost:3306/databaseName?useSSL=false&serverTimezone=GMT"

练习时写了一个程序抛出这个错误,错误指向url那一行,仔细与之前程序的程序对比发现没错,而且执行之前的程序也同样抛出了这个错,网上搜索有在url中添加属性allowPublicKeyRetrieval=true,运行后确实可行,但并不能解释我之前程序可以运行的程序为什么突然报错。后来发现是新版本中ResultSet默认是不可滚动的(行指针只可以用next()方法),而你可能使用了可滚动ResultSet的方法,如isFirst(),isLast(),previous(),relative(),absolute()方法

解决办法:要么不用这些方法,要么选择createStatement(int resultSetType, int resultSetConcurrency)方法而不是createStatement()方法,至于具体参数可以查APIClass.forName("com.mysql.jdbc.Driver");老版本DriverManager.getConnection(url, userName,password);中 Public Key Retrieval is not allowed错误


下一篇:Linux环境中Oracle数据库ORA