手上的服务器还在吃灰,决定安装mysql,当做一个云数据库好啦。 安装之后就要拿来用了,发现8和之前的版本有大大的区别
com.mysql.jdbc.Driver
换成了com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/sql?useSSL=false&serverTimezone=GMT&useUnicode=true&characterEncoding=UTF8
https://dev.mysql.com/downloads/windows/installer/8.0.html https://dev.mysql.com/downloads/connector/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BaseDao {
//mysql数据库驱动,固定写法。连接Oracle时又与之不同,为:"oracle.jdbc.driver.OracleDriver"
public static final String DRIVER = "com.mysql.cj.jdbc.Driver";
/**
* 如下是连接数据库的URL地址,
* 其中,"jdbc:mysql://" 为固定写法
* "localhost"是连接本机数据库时的写法,当不是连接本机数据库时,要写数据库所在计算机的IP地址。如:1.1.1.1
* "sql"是数据库的名称,一定要根据自己的数据库更改。
* "useSSL=false&serverTimezone=GMT"为mysql8需要加上的
* "?useUnicode=true&characterEncoding=UTF-8" 指定编码格式,无需时可省略,
* 即地址直接为:"jdbc:mysql://localhost:3306/shopping"
*/
public static final String URL = "jdbc:mysql://localhost:3306/sql?useSSL=false&serverTimezone=GMT&useUnicode=true&characterEncoding=UTF8";
//数据库的用户名、密码
public static final String NAME = "name";
public static final String PAWD = "pawd";
//返回数据库连接对象,供外部调用
public static Connection getConn() {
//声明数据库连接对象
Connection conn = null;
try {
//加载驱动
Class.forName(DRIVER);
//连接数据库
conn = DriverManager.getConnection(URL, NAME, PAWD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
// 关闭资源.一定要关闭资源(写在调用数据库后的finally中)
// 即使前面抛出异常,程序中断,也会执行关闭资源,而不影响浪费。
// 数据库的每一个连接都占据服务器资源。我们写代码的时候感觉不到,
// 但是一旦服务器运行个三五天,连接就会不断地增加,最终导致资源不足,
// 服务器将自动关机来强行关闭连接。
// 而且这里面,全部过程都不要抛出异常,而是要捕捉处理异常,不然也会导致资源浪费。
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
// 这里最好要先判断是否为空,不为空了,才去关闭。
// 而且要从小到大的关闭(rs,ps,conn),顺序不能乱
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) { //注意:如果后续还要使用connection,则不用关闭
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}