Cannot invoke “java.sql.Connection.prepareStatement(String)“ because “this.conn“ is null

1. java.sql.SQLNonTransientConnectionException: Could not create connection to database server.
......
2. Caused by: java.time.zone.ZoneRulesException: Unknown time-zone ID: CTT
......
3. java.lang.NullPointerException: Cannot invoke "java.sql.Connection.prepareStatement(String)" because "this.conn" is null
......

在注册界面填好表单提交后程序报错了,一开始眼瞎只关注到上面的第一句和第三句错误,因为中间报错的地方太多了导致控制台满满的一大片爆红,所以只看到了跟数据库连接不上有关的字眼,的确这是主要原因,然后我就花了大半天时间一直在csdn找解决方案,但就是没有跟我遇到完全一样问题的答案,上面的解决方案无非就是mysql的架包版本问题、未将架包加入到TomCat的lib目录下等问题,关键我们又不是第一次使用JDBC了,这些问题早在第一次连接数据库时就应该解决了的。后来还是看的书,逐字逐句对照数据库的连接那一部分,发现在获取连接时,

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/messageboard?serverTimezone=CTT" + "&useUnicode=true&characterEncoding=utf8&allowMultiQueries=true","root","mysql");

标红部分跟书上不一样,serverTimezone 表示时区,书上的时区是 GMT ,而这里是 CTT ,把它改成 GMT 后果然就可以连上数据库了。我想,应该是mysql服务器端的时区默认是GMT吧,所以在连接mysql时也要设置同样的时区。真是恨呐,明明控制台早就已经告诉我是时区 zone 的问题了,我还一直没有注意到,浪费了好多时间。故想将此经验分享出来,以便遇到同样问题的小伙伴有所参考,不至于走太多弯路。

public static Connection conn;     //Connection对象(链接)
	//连接数据库
	public static Connection getConn(){
		try{
			//加载注册SQLSever的JDBC驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//编写链接字符串,创建并且获取链接
			conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/messageboard?serverTimezone=GMT"
					+ "&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true","root","mysql");
			return conn;
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}


            

 

 

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值