mysql中jdbc正确的关闭顺序_mysql的JDBC连接

程序是通过DriverManager注册驱动,所以加载之后可以直接使用DriverMannager

mysql中的多态:

不仅是赋值的时候使用了多态,返回的时候都是返回的借口(不是返回的子类对象),所以如果不使用多态需要强转通过Java代码去操作数据库

JDBC ----- Java 数据库 连接JDBC是java提供的数据库连接规范

J ----- Java

DB ----- DataBase

C ----- Connectivity

使用JDBC

A.JDK 本身没有实现数据库连接的功能

第三方实现了MySQL与Java的连接,并且打包成jar包

我们要下载jar包,并且将jar包导入到当前项目

B.获取连接  数据库连接的原理就是一个Socket

在Eclipse的Java程序与MySQL之间创建一个管道

注册驱动:Class.forName("com.mycql.jdbc.Driver") 最常用的方法

获得连接:

Connection con = DriverManager.getConnection(url,"账号","密码")

这是个面向接口的编程,返回的是java中的父类Connection,创建的是mysql中实现类的对象

url 作用:用来定位数据库

jdbc:mysql://localhost:3306/database

jdbc:mysql:  mysql数据库协议

localhost    IP地址,定位一台电脑

3306        端口号:定位MySQL程序

database     定位MySQL的一个数据库

C.在连接上创建代理对象

Statement sta = con.createStatement();

编写SQL语句并执行

sta.executeXxx("SQL语句")

处理执行结果

D.释放资源 程序与外部交互都需要关闭资源,关闭资源之后数据库的数据才能进行其它操作

关闭顺序,后创建的先关闭

rs.close()

sta.close()

con.close()

加载驱动的方式将驱动类加载进内存

1.Class.forName("驱动名")

2.new Driver() 需要导包

3.DriverManager.registerDriver(new Driver()) 需要导包

4.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver")

2.3两种方式不常用

原因1:

类加载时,会自己使用方式3进行注册(Driver类中的静态代码块)

方式2额外创建了一个无用对象

方式3重复加载驱动

原因2:

常见的情况是,开发使用MySQL数据库,部署使用Oracle数据库

如果是方式2.3,需要频繁改变导入的包名

方式1可以将驱动名配置进配置文件//返回的都是java中本身的接口规范,所以不需要导包

Statement 执行代理对象的使用(用于代理固定了的SQL语句)

A.ResultSet rs = Statement.executeQuery("select * form ...") 执行查询的语句,返回一个查询到的结果集

ResultSet 封装了查询到的若干条数据用法:

while(rs.next()){

rs.getObject("字段名");

rs.getObject(int indext); 字段索引,从第一行第一列开始

}

注意:Java中的索引一般从0开始,但是JDBC中的索引从1开始

B.  int line = Statement.executeUpdate("insert into 表名 字段=值 where...")

用于执行增删改操作的SQL语句,返回的是此操作改变了多少条数据

C.  execute方法可以区别是查询还是修改语句

返回值是true则是select语句,否则是修改语句

PrepareStatement是Statement的子类

SQL语句的预处理对象

在SQL语句中可以用 ? 作为占位符,之后补齐(站位符只能用于属性值的地方,会逐个分析传入字符,转义非法字符,去掉最外层单引号)

1.获取执行对象

PrepareStatement pst = con.prepareStatement(SQL语句)

2.补齐占位符

pst.setObject(int indext, value)

Object的类型要和value的类型保持一致

3.执行SQL语句

pst.executeQuery()

pst.executeUpdate()

优点:

A.功能更强大,比如可以插入一些特殊字符

B.执行效率更高,因此称之为预定义的Statement(在获得连接的时候就已经准备执行了)

注册驱动,获得连接,关闭资源代码重复,封装

JDBCUtils

public class JDBCUtils {

//注册驱动只需要注册一次

static {

Class.forName("com.mysql.jdbc.Driver")

}

//封装获得连接

public static Connection getCon(){

Connection con = null;

try{

con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database",账户,密码);

} catch (Exception e) {

//发生了异常一定让程序停止,因为没有获得连接(抛运行时异常结束java虚拟机)

e.printStackTrace();

throw new RuntimeException();

}

return con;

}

public static void close(ResultSet rs,Statement sta,Connection con){

//要打印自定义信息,在异常的构造方法中的有参构造,创建异常对象的时候就给出信息,catch到处理的时候打印

//判断是不是不等于空,避免空指针,没有对象的时候不需要关闭,一定要释放资源,不然会影响数据的操作

if(rs != null){

try{

rs.close();

} catch (Exception e) {

System.out.println(e.getMessage);

}

}

sta.close();

con.close();   //同理try\catch关闭资源

}

}

JDK 中的 JDBC 设计

A:JDBC 中大量的使用了多态

全是接口,就是定义了规则,供各种数据库实现此规则,但都是接口层次,不用改源码

Connection 使用

Statement 使用

ResultSet 使用

B:真正的实现全在各种数据库自己封装的jar包中

不使用多态的时候:

1.程序一样运行

2.缺点:更换jar包是,所有对应的导包实现都得修改

多态体现在Jar包更换上,使用了多态,实现了一种可插拔设计

接口相当于是一种规范,jar包中类实现了接口,遵守规范完成某种操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 JDBC(Java Database Connectivity)来连接数据库并插入数据到 MySQL 数据库。以下是一个简单的示例代码: ```java import java.sql.*; public class InsertDataExample { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/your_database_name"; static final String USER = "your_username"; static final String PASS = "your_password"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开连接 System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL, USER, PASS); // 执行查询 System.out.println("Creating statement..."); stmt = conn.createStatement(); String sql = "INSERT INTO your_table_name " + "VALUES (value1, value2, value3)"; stmt.executeUpdate(sql); // 完成后关闭 stmt.close(); conn.close(); } catch (SQLException se) { // 处理 JDBC 错误 se.printStackTrace(); } catch (Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); } finally { // 关闭资源 try { if (stmt != null) stmt.close(); } catch (SQLException se2) { } // 什么都不做 try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } System.out.println("Goodbye!"); } } ``` 在上面的示例,你需要将 `your_database_name` 替换为你的数据库名称,`your_username` 和 `your_password` 替换为你的 MySQL 用户名和密码,`your_table_name` 替换为你要插入数据的表名称,以及 `value1`、`value2` 和 `value3` 替换为你要插入的实际值。 注意,上述代码只是一个示例,实际使用时需要根据你的实际需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值