JDBC基础

JDBC是Java连接数据库的标准,提供接口让不同数据库厂商实现。它包括Statement、PreparedStatement和CallableStatement,推荐使用预处理语句防止SQL注入。文章还介绍了如何通过反射机制注册驱动,创建数据库连接,执行SQL以及事务管理和资源释放。

JDBC全称Java DataBase Connectivity(Java语言连接数据库),其本质是sun公式指定的一个接口,在java.sql.*包下。

 

作用:

一套数据库标准,对于数据库不作实现,交由各数据库厂商进行实现,如:mysql驱动com.mysql.cj.jdbc.Driver,Oracle的驱动oracle.jdbc.OracleDriver。为最经典的接口设计之一。

有了JDBC及对应驱动,即可在java代码中访问数据库读写数据。

调用方式:

  • Statement语句
  • PreparedStatement预处理语句
  • CallableStatement存储过程

为了防止SQL注入,推荐使用第二种接口。

什么是SQL注入?

用户输入中包含SQL语句关键字且参与编译过程,例如输入密码时输入一个恒为1的语句。这便达到SQL注入。

过程图:

JDBC下载网址:https://dev.mysql.com/downloads/connector/j/ 

具体过程演示:(此处使用MySQL版本为5.7,驱动为8.0.33)

反射机制注册驱动(最常用的注册驱动方法):

public static void main(String[] args) {

        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获取连接
            Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/testuseSSL=false",
"root","root");
            System.out.println(conn);

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

注意:Class.forName()与JDBC没有直接关系。它只是加载一个类。大多数JDBC驱动程序类通过调用在自己的静态初始化器中注册自己registerDriver()。

常用数据库URL地址的写法:
Oracle:jdbc:oracle:thin:@localhost:1521:mysql-db
SqlServer:jdbc:microsoft:sqlserver://localhost:1433;
DatabaseName=mysql-db
MySql:jdbc:mysql://localhost:3306/mysql-db
 

执行sql:

            //创建一个Statement语句对象
            Statement stat = conn.createStatement();

            //执行SQL语句
            String sql = "select * from student";

            //把查询的结果(表记录)存放到ResultSet对象中,结果集
            ResultSet resultSet = stat.executeQuery(sql);

释放资源:

Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。后创建的对象先关闭,先关闭Statement对象再关闭Connection对象。

finally {
            if (stat != null) {
                try {
                    stat.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }

            }

        }

 

事务:Connection提供了对于事务相关操作的支持

支持事务的数据库一般都有自动提交,提交、回滚、保存点、事务隔离级别这几个基本属性。

boolean getAutoCommit()
获取此 Connection 对象的当前自动提交模式。

void commit()
使所有上一次提交/回滚后进行的更改成为持久更改,并释放此 Connection 对象当前持有的所有数据库锁。

void rollback()
取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。

void rollback(Savepoint savepoint)
取消所有设置给定 Savepoint 对象之后进行的更改。

void setAutoCommit(boolean autoCommit)
将此连接的自动提交模式设置为给定状态。

void setTransactionIsolation(int level)
试图将此 Connection 对象的事务隔离级别更改为给定的级别。

int getTransactionIsolation()
获取此 Connection 对象的当前事务隔离级别。

Savepoint setSavepoint()
在当前事务中创建一个未命名的保存点 (savepoint),并返回表示它的新 Savepoint 对象。

Savepoint setSavepoint(String name)
在当前事务中创建一个具有给定名称的保存点,并返回表示它的新 Savepoint 对象。

void releaseSavepoint(Savepoint savepoint)
从当前事务中移除指定的 Savepoint 和后续 Savepoint 对象。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值