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

    xiaoxiao2024-12-22  4

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

    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:null和excuteQuery:null

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

    问题二:抛出异常com.mysql.jdbc.Driver、excuteUpdate:null和excuteQuery: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.Driver、excuteUpdate:null和excuteQuery: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:null和excuteQuery: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在某些时刻觉得不好,其实没有好坏之分,根据需求来使用(来自老师的教导)

    最新回复(0)