1.JDBC概述
1.1 JDBC
JDBC(Java DataBase Connectivity),简单来讲JDBC是利用Java语言或程序连接并且访问数据库的一门技术,是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了查询和更新数据库操作方法,通常是面向关系型数据库的。这种方法摒弃了原先通过CMD挥着Navicat等工具连接数据库的方式。
1.2 访问数据库步骤
1.注册驱动2.获取连接
3.获取传输器
4.通过传输器发送SQL到服务器质性并且返回执行结果
5.数据处理
6.释放资源
1.3 原理
每次需要访问数据时就和数据库建立连接,操作,返回结果,关闭。需要走完整的六个步骤。
2.通过JDBC访问数据库
2.1准备数据--本机环境:win7,mysql(8.0.15)
set names utf8;
drop database if exists testjdbc_db;
create database testjdbc_db charset utf8;
use testjdbc_db;
create table account(
id int primary key auto_increment,
name varchar(50),
money double
);
insert into account values(null, 'tom', 1000);
insert into account values(null, 'andy', 1000);
insert into account values(null, 'tony', 1000);
2.2 创建项目导入驱动包
2.3 代码实现package com.MTngCat.Person.JDBC.Connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* JDBC连接数据库的步骤:
* @author MTing
* 步骤:
* 1.注册驱动
* 2.获取连接
* 3.获取传输器
* 4.通过传输器发送SQL到服务器质性并且返回执行结果
* 5.数据处理
* 6.释放资源
*/
public class connectionBasic {
public static void main(String[] args) throws Exception {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testjdbc_db?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useServerPrepStms=true&cachePrepStms=true",
"root",
"MTingCat819"
);
//3.获取传输器
Statement st = conn.createStatement();
//4.通过传输器发送SQL到服务器执行并且返回执行结果
String sql = "select * from account";
ResultSet rs = st.executeQuery(sql);
//5.数据处理
while( rs.next() ) {
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
System.out.println(id + ":" + name + ":" + money );
}
//6.释放资源
// rs.close();
// st.close();
// conn.close();
if( rs != null ) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
rs = null;
}
}
if( st != null ) {
try {
st.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
st = null;
}
}
if( conn != null ) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
conn = null;
}
}
}
}
2.4 代码注意事项详注://1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
①MySQL版本在8.0之前的驱动的全限定类名是"com.mysql.jdbc.Driver"
②MySQL版本在8.0之后的驱动的全限定类名是"com.mydql.cj.jdbc.Driver"//2.获取连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/testjdbc_db?characterEncoding=UTF-8&serverTimezone=GMT%2B8&useServerPrepStms=true&cachePrepStms=true",
"root",
"MTingCat819"
);
①参数一:jdbc:mysql://localhost:3306/testjdbc_db
用于指定访问的是哪一个数据库,如果连接本地数据库,可以简写为:jdbc:mysql:///testjdbc_db
②参数二:characterEncoding=UTF-8&serverTimezone=GMT%2B8"
这里指定的是编码格式和时区,MySQL驱动8.0之后的版本都需要自己配置时区。
③参数三:useServerPrepStms=true
保证MySQL驱动会把以连接器PreparedStatement类型传输来的SQL语句发送给数据库进行预编译为函数交给服务器存储key。
④参数四:cachePrepStms=true
保证在执行相同的语句时数据库不会进行二次编译,原因保证在第一次预编译为函数后的key值存在于服务器
⑤参数五:
⑥参数六://3.获取传输器
Statement st = conn.createStatement();
该方法用于向数据库服务器发送SQL语句的Statement传输对象。//4.通过传输器发送SQL到服务器质性并且返回执行结果
String sql = "select * from account";
ResultSet rs = st.executeQuery(sql);
//用于向数据库发送查询类型的sql语句,返回一个ResultSet对象结果集
//int rows = st.executeUpdate(sql)
//用于向数据库发送更新(增加、删除、修改)类型的sql语句,返回一个int值,表示影响的记录行数
①ResultSet结果集对象:用于封装SQL语句查询的结果,该对象提供了遍历数据以及获取数据的方法。//5.数据处理
while( rs.next() ) {
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
System.out.println(id + ":" + name + ":" + money );
}
①遍历数据行的方法:next()使指向数据行的箭头向下移动一行,并且返回一个布尔类型的结果,后面有数据组则返回true,发欧泽false
②获取数据的方法getInt(int columnIndex)
getInt(String columnLable)
getString(int columnIndex)
getString(String columnLable)
getDouble(int columnIndex)
getDouble(String columnLable)
getObject(int columnIndex)
getObject(String columnLable)//6.释放资源
rs.close();
st.close();
conn.close();
①释放资源:越晚获取的资源越先关闭
②为避免程序抛出异常释放资源的代码不会执行,应该把代码放在finally块中if( rs != null ) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
rs = null;
}
}
if( st != null ) {
try {
st.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
st = null;
}
}
if( conn != null ) {
try {
conn.close();
} catch