前期准备
最初版本
加载驱动,未关闭Resultset, Statement, Connection
package com.javaee.code;
import java.sql.*;
/**
*TestJdbc
*/
public class jdbcTest {
public static String getMysql(){
String url = "jdbc:mysql://127.0.0.1:3306/test_db1";//定义url
// 驱动名字
String driverName = "com.mysql.cj.jdbc.Driver";
// 查询语句
String sqlString = "SELECT * FROM employee limit 1";
String result = null;
try {
// 1 加载驱动(3种方法?)
Class.forName(driverName);
// 2 创建连接
Connection connection = DriverManager.getConnection(url,"root","123456");
// 3 通过连接获取statement
Statement statement = connection.createStatement();
// 4 statement 做一些 增删改查
ResultSet resultSet = statement.executeQuery(sqlString);
// 5 获取执行结果
while (resultSet.next()){
System.out.println((resultSet.getString(4)));
}
} catch ( SQLException e) {//|ClassNotFoundException(方法1)
e.printStackTrace();
}
return null;
public static void main(String args){
getMysql();
}
}
改进1:IDEA不用加载驱动
DriverManager.setLogWriter(new PrintWriter(System.out));
打印DriverManager到控制台如下图
改进二:在finally{}里关闭变量
- 首先在把变量声明移到try{}外面
- 在finally中依次关闭resultset,statement,connection
finally{
if(null != resultSet){
try{
resultSet.close();
} catch(SQLException e){
e.printStackTrace();
}
}
if(null != statement){
try{
statement.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if(null != connection){
try{
connection.close();
}catch(SQLException e){
e.printStackTrace();
}
}
}
- 运行后抛出异常javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer’s close_notify
- 解决:在usl后加上&useSSL=false
String url = "jdbc:mysql://127.0.0.1:3306/school";//定义url
String allUrl = url + "?user=root&password=123456&useSSL=false";
改进三:在try()里声明变量,建立连接
package com.java.code.jdbc;
import java.io.PrintWriter;
import java.sql.*;
/**
*TestJdbc
* @author Jingqi Wu
* @date 2020/3/8
*/
public class jdbcTestV3 {
public static String getMysql(){
String url = "jdbc:mysql://127.0.0.1:3306/school";//定义url
String allUrl = url + "?user=root&password=123456";
// 查询语句
String sqlString = "SELECT * FROM s_student_homework";
try (Connection connection = DriverManager.getConnection(allUrl)){
// 3 通过连接获取statement
try(Statement statement = connection.createStatement()){
// 4 statement 做一些 增删改查
try(ResultSet resultSet = statement.executeQuery(sqlString)){
// 5 获取执行结果
while (resultSet.next()){
System.out.println((resultSet.getString(4)));
}
}
}
} catch ( SQLException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args){
getMysql();
}
}
参考资料
- idea中通过JDBC使用MySQL数据库与常见报错情况
- https://github.com/wangkaimin/javaee-01