一.JDBC介绍
JDBC的目标是使应用程序开发人员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统
- DriverManager(java.sql.DriverManager)
装载驱动程序,管理应用程序与驱动程序之间的连接 - Driver(由驱动程序开放式提供)
将应用程序的API请求转换为特定的数据库请求 - Connection(java.sql.Connection)
将应用程序连接到特定的数据库 - Statement
在一个给定的连接中,用于执行一个数据库SQL语句u - ResultSet
SQL语句完成 后,返回的数据库结果集(包括行、列)
二.JDBC操作
- 加载驱动
Class.forName(“com.mysql.cj.jdbc.Driver”); - 创建与数据库的连接
Conn conn = DriverManager.getConnection(“jdbc:mysql:///demo04?characterEncoding=utf8&useSSL=false&serverTimezone=UTC”,“root”,“root”);- url:jdbc:mysql:///testcharacterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
- username:root
- password:root
- 创建通道(Statement)
Statement stmt = conn.createStatement(); - 执行SQL指令
- executeUpdate():主要执行DML语句(insert,update,delete)
该方法返回该SQL语句影响的行数,随后直接转入第6步,关闭资源。 - executeQuery():主要执行DQL语句(select语句)
该方法会返回一个结果集,此时执行第5步,对结果集进行处理,然后再关闭资源
- executeUpdate():主要执行DML语句(insert,update,delete)
- 处理结果集
通过ResultSet来获得查询结果- ResultSet实例最初定位在结果集第一行之前,通过next()方法判断是否有该行记录,如果该行记录存在,该方法返回true,如果不存在返回false.
- ResultSet中存在大量的 getXXX()方法,用于获取值。可以同查询结果的列名获取值,或者查询的结果的列的位置(1,2,3…)来获取值
- while (rs.next()){
String users = rs.getString(“users”);
String passwords = rs.getString(“passwords”);
System.out.println(users+" "+passwords);
}
- 关闭资源
一定注意关闭资源的顺序,先关闭ResultSet,Statement,Connection
三.Statement和ResultSet
- 利用Statement执行查询
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取链接
conn = DriverManager.getConnection("jdbc:mysql:///demo04?characterEncoding=utf8&useSSL=false&serverTimezone=UTC","root","root");
//3.创建通道
stmt = conn.createStatement();
//4.执行sql
rs = stmt.executeQuery("SELECT * FROM user_table");
//5.处理结果集
while (rs.next()){
String users = rs.getString("users");
String passwords = rs.getString("passwords");
System.out.println(users+" "+passwords);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {//6.关闭资源
try {
if(null!=rs){
rs.close();
}
if(null!=stmt){
stmt.close();
}
if(null!=conn){
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
- 利用Statement实现增删改
package com.openlab.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Test06 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取链接
conn = DriverManager.getConnection("jdbc:mysql:///demo04?characterEncoding=utf8&useSSL=false&serverTimezone=UTC","root","root");
//3.创建通道
stmt = conn.createStatement();
//4.执行sql并接受返回的结果
int rows = stmt.executeUpdate("INSERT INTO student VALUES(119,'白豆芽','男','2001-01-01 11:11:14',3223)");
System.out.println(rows);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e){
e.printStackTrace();
}finally {
try {//5.关闭资源
if(null!=stmt){
stmt.close();
}
if(null!=conn){
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}