先贴上可以成功运行的代码吧
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在某些时刻觉得不好,其实没有好坏之分,根据需求来使用(来自老师的教导)