数据库连接异常处理(第一次编jsp+javaBean数据库连接中出现的问题)

先贴上可以成功运行的代码吧

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBManage {

	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	public DBManage() {}
	public void getStatement() throws SQLException{//获得JDBC的Connection和Statement
		try {
			//连接MySQL数据库的字符串
			String cstr = "jdbc:mysql://localhost:3306/new_db?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";
			//装载MySQL数据库的驱动程序 		
			Class.forName("com.mysql.cj.jdbc.Driver");
			//创建连接
			conn = DriverManager.getConnection(cstr,"root","root");
			//创建Statement
			stmt = conn.createStatement();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
	}
	public ResultSet query(String sql) {//执行SQL查询语句
		try {
			//执行查询SQL语句得到的Resultset(记录集)
			ResultSet rs = stmt.executeQuery(sql);
			return rs;
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("excuteQuery:"+e.getMessage());
		}
		return null;
	}
	public void excuteUpdate(String sql) {//执行SQL更新语句
		try {
			//执行操作数据库SQL语句的方法,如插入、删除、更新记录
			stmt.executeUpdate(sql);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("excuteUpdate:"+e.getMessage());
		}
	}
	public void close() {//关闭resultset、statement和connection
		try {
			if(rs!=null) rs.close();
			if(stmt!=null) stmt.close();
			if(conn!=null) conn.close();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e.getMessage());
		}
	}
}

问题(出现先后顺序)

问题一:抛出异常excuteUpdate:nullexcuteQuery:null

解决过程:在两个方法中加入System.out.println(sql),验证参数是否已经传入,发现运行stmt.executeUpdate(sql)ResultSet rs = stmt.executeQuery(sql)这两句时抛出的异常,但是百度之后却没有发现能解决这道问题的方法,突然冒出个念头,为何作为连通数据库的getStatement方法没有抛出异常呢。。。果然问题出在这里,jsp中并没有初始化这个方法
解决方法:检查数据库是否连通,是否获得获得JDBC的Connection和Statement,我在jsp中加入jspBean.getStatement()(编代码还是要仔细的),好了,此时出现了问题二

问题二:抛出异常com.mysql.jdbc.DriverexcuteUpdate:nullexcuteQuery:null

解决过程:行了,看到后面两个异常就知道与数据库的连接还没通,又出现新异常,不过这个异常以前经历过,很简单,导入连接MySQL的jar包的版本问题,我导入的是mysql-connector-java-8.0.16.jar,装在MySQL数据库驱动应该用com.mysql.cj.jdbc.Driver这个字符串,ok,竟然还报错,过分了
解决方法:根绝导入连接MySQL的jar包的版本,输入正确的字符串。mysql5用的驱动url是com.mysql.jdbc.Driver,mysql6以后用的是com.mysql.cj.jdbc.Driver。

问题三:抛出异常com.mysql.cj.jdbc.DriverexcuteUpdate:nullexcuteQuery:null

解决过程:好嘛,还是数据库的驱动问题,这时候就怀疑到底他检测到这个class文件了吗,我就去jar包中找,确实在啊,也导入了
解决方法:重启IDE(我用的eclipse),我是java项目,如果是web项目的话,把mysql-connector-java-8.0.16.jar 导入到tomcat的lib文件夹,好吧,这一步我也做了,不做也可以

问题四:抛出异常he server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.excuteUpdate:nullexcuteQuery:null

解决过程:老问题,MySQL服务器时区问题
解决方法:在数据库的url中对时区进行规定就好
String cstr = "jdbc:mysql://localhost:3306/new_db?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";

感想

认真、仔细、有耐心,不放弃,不放弃,不放弃
因为第一次用JavaBean,以前都是用servlet,所以对javaBean在某些时刻觉得不好,其实没有好坏之分,根据需求来使用(来自老师的教导)

你可能感兴趣的:(学习中出现的问题记录)