1 为项目导入mysql-jdbc的jar包
访问MySQL数据库需要用到第三方的类,这些第三方的类,都被压缩在一个叫Jar的文件里,为了代码能使用第三方的类,需要为项目导入mysql的专用Jar包。通常将项目用的jar包统一放在项目的lib目录下,然后在eclipse中导入这个jar包。
导包步骤: 右键project->property->java build path->libaries->add external jars
2 初始化驱动
通过Class.forName("com.mysql.jdbc.Driver");
com.mysql.jdbc.Driver
是 mysql-connector-java 5中的,com.mysql.cj.jdbc.Driver
是 mysql-connector-java 6中的
初始化驱动类com.mysql.jdbc.Driver就是在mysql-connector-java-8.0.16.jar中,如果没有按照1.1导包,就会抛出ClassNotFoundException。
Class.forName是把这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。
public class TestJDBC {
public static void main(String[] args) {
//初始化驱动
try {
//驱动类com.mysql.cj.jdbc.Driver
//就在 mysql-connector-java-8.0.16.jar中
//如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("数据库驱动加载成功 !");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3 建立与数据库的连接
这里需要提供:
- 数据库所处有的ip:127.0.0.1(本机)
- 数据库的端口号:3306(mysql专用端口号)
- 数据库名称:jdbcTest
- 编码方式:UTF-8
- 账号:root
- 密码:admin
- 指定时区 UTC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立与数据库的Connection连接
// 这里需要提供:
// 数据库所处于的ip:127.0.0.1 (本机)
// 数据库的端口号: 3306 (mysql专用端口号)
// 数据库名称 jdbcTest
// 编码方式 UTF-8
// 账号 root
// 密码 admin
//指定时区 severTimezone
Connection c = DriverManager
.getConnection(
"jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false",
"root", "admin");
System.out.println("连接成功,获取连接对象: " + c);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:JDBC连接Mysql6及以上 com.mysql.cj.jdbc.Driver
, 需要指定时区serverTimezone:
- driverClassName=com.mysql.cj.jdbc.Driver
- url=jdbc:mysql://localhost:3306/jdbcTest?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
- username=root
- password=admin
在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,例如:
driverClassName=com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcTest?serverTimezone=Aisa/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false
username = root
password = admin
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别 serverTimezone设定
4 创建Statement
Statement用于执行SQL语句,比如增加,删除。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection c = DriverManager
.getConnection(
"jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=Asia/Shanghai&characterEncoding=utf8",
"root", "admin");
//注意使用的是java.sql.Statment
//不可使用com.mysql.jdbc.Statement
Statement s = c.createStatement();
System.out.println("获取 Statement对象: " + s);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5. 执行SQL语句
s.execute执行sql语句。执行成功后,在MySQL客户端中查看。
执行SQL语句之前要确保数据库jdbc中有表hero存在,如果没有,需要事先创建表。
//准备sql语句
//注意:字符串要用单引号 '
String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")";
s.execute(sql);
System.out.println("执行插入语句成功 ");
6. 关闭连接
数据库的连接是有限资源,相关操作结束后,养成关闭数据库的好习惯。
先关闭Statement
后关闭Connection
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
Connection c = null;
Statement s = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
c = DriverManager
.getConnection(
"jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=Asia/Shanghai&characterEncoding=utf8",
"root", "admin");
//注意使用的是java.sql.Statment
//不可使用com.mysql.jdbc.Statement
s = c.createStatement();
//准备sql语句
//注意:字符串要用单引号 '
String sql = "insert into hero values(null,"+"'提莫'"+","+313.0f+","+50+")";
s.execute(sql);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//先关闭Statement
if(s != null)
try {
s.close();
}catch (SQLException e) {
e.printStackTrace();
}
//后关闭Connection
if(c != null) {
try {
c.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
}
7. 使用try-with-resource的方式自动关闭连接
如果觉得上一步的关闭连接的方式很麻烦,可以参考关闭流的方式,使用try-with-resource的方式自动关闭连接,因为Connection和Statement都实现了AutoCloseable接口。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (
Connection c = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/jdbcTest?serverTimezone=Asia/Shanghai&characterEncoding=utf8",
"root", "admin");
Statement s = c.createStatement();
)
{
String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";
s.execute(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}