一、JDBC概述
1、定义
JDBC(Java DataBase Connectivity) Java 连接数据库技术。 Java语言访问各个数据库的一套接口集合。可以连接 MySql Oracle、DB2 等
2、 结构
? 不同的数据库 需要提供不同的数据库连接驱动 , 该驱动由数据库厂商提供,在连接之前导入。
3、JDBC核心接口
JDBC连接程序中,sun提供核心接口 ,存在java.sql.* 和javax.sql.* 中
java.sql.* : 主要功能对数据库基本编程操作,完成数据库连接、执行sql语句,获取结果等
javax.sql.* : 对数据库的扩展操作 事务管理,行集合处理(RowSet)
核心接口:
- java.sql.Connection : 表示数据库连接对象,获取数据库连接信息,用户名,数据库版本等,建立于数据库的连接会话。
- java.sql.Driver : 表示驱动类,需要在连接之前 加载该驱动类,绑定连接数据库
- java.sql.DriverManager : 这是一个类, 用于管理驱动的类,可从中获取连接对象。
- java.sql.Statement : sql执行接口, 主要用于执行sql语句(insert ,delete等) ,excute(sql语句)
- java.sql.PreparedStatement : 它属于Statement的子接口, 也用于执行sql语句,预编译的sql语句 ,可防止sql注入异常
- java.sql.ResultSet : 表示一个结果集类,用于返回sql语句查询的结果。
4、Java连接数据库的步骤
? 1、导入数据库连接Jar包
? 对于Mysql分不同版本 导入的jar包不一样
? 以8.0为例 :
? 2、加载启动类
3、获取连接对象Connection
4、获取sql执行器 Statement
5、执行sql语句
6、关闭连接
// 1、导入jar包, 一个项目(模块)只需要导入一次 add to libs
// 2、加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver"); // 通过反射执行该类
// 3、通过驱动管理类获取连接对象 参数语法 ?参数名=参数值&参数名=参数值
String url="jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=UTC";
String username="root";
String password ="123456"; // 这是你自己设置的root密码
Connection conn = DriverManager.getConnection(url,username,password);
System.out.println("连接对象:"+conn);
// **********************添加数据**************************
//4、获取sql执行器 Statement
String sql="insert into dept values( 50,‘市场部‘,‘武汉‘)";
Statement st = conn.createStatement();
// 5、执行SQL语句
int count = st.executeUpdate(sql);
if(count>0){
System.out.println("添加成功");
}else{
System.out.println("添加失败");
}
//6、关闭连接
st.close();
conn.close();
// 删除数据
/**
* 删除部门
*/
public static void deleteDept(int deptno){
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
//jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=UTC&user=root&password=123456
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/j2008_db?useSSL=false&serverTimezone=UTC","root","123456");
//获取sql执行器
Statement st = conn.createStatement();
//执行sql语句 executeUpdate
int count = st.executeUpdate("delete from dept where deptno =" +deptno);
//count 表示影响的行数
if(count>0){
System.out.println("删除成功");
}else{
System.out.println("删除失败");
}
//关闭连接
st.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//修改数据
/**
* 修改部门 execute : 执行任意sql语句 (包括DDL DML)
*/
public static void updateDept(int deptno ,String loc){
Connection conn = null;
Statement st = null;
//获取数据库连接
String url= "jdbc:mysql://127.0.0.1:3306/j2008_db?useSSL=false&serverTimezone=UTC";
try {
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(url,"root","123456");
st = conn.createStatement();
// 执行任意sql语句 返回boolean ,对于select语句返回true 非select返回false
boolean flag = st.execute("update dept set loc = ‘"+loc+"‘ where deptno = " + deptno);
System.out.println("操作成功");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally{
// 关闭连接
if(st!=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
注意: executeUpdate 和 execute、executeQuery的区别
1、executeUpdate() 用于执行insert update ,delete 语句,返回sql影响的行数
? execute() : 用于执行任意sql语句,包括 创建表, 添加约束等 ,返回boolean类型, 对于select语句返回true ,对于其他语句返回 false
? executeQuery() : 用于执行查询sql语句, 它会返回一个 结果集对象 ResultSet ,获取结果集数据。