1.问题描述
最近在做数据库课设时要求做一个既有前端又有后端的程序,在使用JDBC连接数据库时出现了错误。原本代码是书上的,但出现了莫名错误,只是提示存在空指针,一时间上网搜寻无果,花了几个小时后误打误撞找到了问题。
2.原本代码
import java.sql.*;
public class Connect{
public static void main(String args[]){
Connection con=null;
Statement sql;
ResultSet rs;
public Connect() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");//加载jdbc-mysql驱动
}
catch(Exception e) {}
String url="jdbc:mysql://127.0.0.1:3306/test?&useSSL=false";
String user="root";
String password="123456";
try {
con=DriverManager.getConnection(url,user,password);
}
catch(SQLException e) {}
try {
sql=con.createStatement();
rs=sql.executeQuery("select * from staff");
while(rs.next()) {
String number=rs.getString(1);
System.out.println(number);
}
con.close();
}
catch(SQLException e) {
System.out.println(e);
}
}
}
}
3.发现问题
程序会报出NullPointException错误,并定位到第 20
行,搞得我刚开始一直以为第 20
行出现错误,但经过分析后觉得 url
不对的可能性更大,我就用网上搜来的代码来测试数据库是否连接成功,无意间找到了问题所在,url
里面要指定 serverTimezone=GMT
,修改之后的代码就是下面那样。
4.修改后代码
import java.sql.*;
public class Connect{
Connection con=null;
Statement sql;
ResultSet rs;
public Connect() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");//加载jdbc-mysql驱动
}
catch(Exception e) {
System.out.println("驱动加载失败!");
e.printStackTrace();
}
String url="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
String user="root";
String password="123456";
try {
con=DriverManager.getConnection(url,user,password);
}
catch(SQLException e) {
System.out.print("数据库连接失败!");
e.printStackTrace();
}
}
}
5.总结
问题排查:
- 防火墙问题
- eclipse中是否构建jdbc驱动路径
- 云主机要注意安全组设置
- 数据库服务或端口是否开启
版权属于:Kecho
本文链接:https://kecho.top/archives/283/
转载时须注明出处及本声明