JDBC编程六步
总体步骤
第一步:注册驱动 (告诉java,即将连接的是什么数据库)
第二步:获取连接 (表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通 信,重量级,使用后一定要关闭)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行SQL语句 (DQL DML …)
第五步:处理查询结果集 (只有当第四步是select语句的时候,才有这第五步处理查询结果集)
第六步:释放资源 (java和数据库属于进程间的通信,开启后一定要关闭)
第一步、注册驱动
代码
new写法(不常用)
//1、注册驱动
Driver driver = new com.mysql.cj.jdbc.Driver(); //多态,父类型引用指向子类型
// Driver driver = new oracle.jdbc.driver.OracleDriver(); oracle 驱动
DriverManager.registerDriver(driver);
反射写法(常用)
//1、注册驱动
Class.forName(com.mysql.cj.jdbc.Driver);
第二步:获取连接
URL 包括哪几部分
协议
ip
PORT 端口号
资源名
http://182.61.22.7:80/index.html
http:// 通信协议
182.61.22.7 服务器ip地址
80 服务器上软件的端口
index.html 是服务器上某个资源名
说明:localhost和127.0.0.1都是本机ip
什么是通信协议,有什么用?
通信协议是通信之前就提前定好的数据传送格式。
数据包具体怎么传送数据,格式是提前定好的
//Oracel url
Oracle JDBC: Oracle:thin:@localhost:1521:orcl
代码
//2、获取连接
String url = "jdbc:mysql://127.0.0.1:3306/csdb?serverTimezone=UTC";
String user = "root";
String password = "******";
Connection conn = DriverManager.getConnection(url, user, password);
//com.mysql.cj.jdbc.ConnectionImpl@c81cdd1
System.out.println("连接对象:" + conn);
第三步:获取数据库操作对象
代码
//3、获取数据库操作对象
//Startement专门执行sql语句。
Statement stmt = conn.createStatement();
第四步:执行SQL语句
注意:JDBC中的sql语句不需要提供分号结尾
//4、执行sql
//insert
String sql = "insert into dept values(50,'人事部','北京')";
//专门执行DML语句的(insert ,delete ,update)
//返回值是“影响你数据库中的记录条数”
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "保存成功" : "保存失败");
//delete
String sql = "delete from dept where deptno = 50";
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "删除成功" : "删除失败");
//updata
String sql = "update dept set deptno = 60 where deptno = 50 ";
System.out.println(count == 1 ? "更新成功" : "更新失败");
System.out.println(count == 1 ? "更新成功" : "更新失败");
//create
String sql = "select empno ,ename,sal from emp";
ResultSet rs = stmt.executeQuery(sql);
第五步:处理查询结果集
5、处理结果集
rs.next 会使结果集光标向下移一个,若移动后的位置有数据返回true,否则返回false
rs.getString,取出数据,无论什么类型,都转换成String类型,数据库第几列从1开始
while (rs.next()) {
//这里最好使用查询结果的列名的名称
int empno = rs.getInt("empno");
String ename = rs.getString("ename");
double sal = rs.getDouble("sal");
System.out.println(empno + ',' + ename + ',' + sal);
}
遍历rs原理图
第六步:释放资源
释放资源
为了保证资源一定释放,在finally语句块中关闭资源
并且要遵循从到大依次关闭
分别对其try。。catch
try {
if (rs != null) {
rs.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
利用资源绑定器来写jdbc编程
jdbc.properties文件
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/csdb?serverTimezone=UTC
user=root
password=lh051920
代码文件
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
public class jdbc资源绑定器配置 {
public static void main(String[] args) {
ResourceBundle bundle = ResourceBundle.getBundle("JDBC注册驱动与获取驱动/jdbc");
Connection conn = null;
Statement stmt = null;
String driver = bundle.getString("driver");
String url = bundle.getString("url");
String user = bundle.getString("user");
String password = bundle.getString("password");
try {
//1、注册驱动
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
//com.mysql.cj.jdbc.ConnectionImpl@c81cdd1
System.out.println("连接对象:" + conn);
//3、获取数据库操作对象
//Startement专门执行sql语句。
stmt = conn.createStatement();
//4、执行sql
String sql = "delete from dept where deptno = 60 or deptno = 70 or deptno = 90";
//专门执行DML语句的(insert ,delete ,update)
//返回值是“影响你数据库中的记录条数”
int count = stmt.executeUpdate(sql);
System.out.println(count == 1 ? "保存成功" : "保存失败");
//5、处理结果集
} catch (Exception throwables) {
throwables.printStackTrace();
} finally {
//6、释放资源
//为了保证资源一定释放,在finally语句块中关闭资源
//并且要遵循从到大依次关闭
//分别对其try。。catch
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}