jdbc编程

一、JDBC定义

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
数据库驱动:数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。

二、常用接口
  1. Driver接口
    表示java驱动程序接口。所有的具体的数据库厂商要来实现此接口。
// mysql driver 实现的源码
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());  // 类加载的时候就注册了,所以如果用注册方法注册驱动的话,其实是注册了两次。
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}
  • connect(url, properties): 连接数据库的方法。
    URL语法: jdbc协议:数据库子协议://主机:端口/数据库
    user: 数据库的用户名
    password: 数据库用户密码
String url = "jdbc:mysql://localhost:3306/xxx";
Driver driver = new com.mysql.jdbc.Driver();
Properties prop = new Properties();
prop.setProperty("user",username);
prop.setProperty("password",password);
Connection connect = driver.connect(url,prop);
// DriverManager.getConnection方法对上面的东西进行了封装,所以通常用这个
  • 推荐使用装载驱动方法
    装载MySql驱动:Class.forName(“com.mysql.jdbc.Driver”);
    装载Oracle驱动:Class.forName(“oracle.jdbc.driver.OracleDriver”);
  1. DriverManager类
    驱动管理器类,用于管理所有注册的驱动程序
  • registerDriver(driver) : 注册驱动类对象
  • Connection getConnection(url,user,password); 获取连接对象
// getConnection 方法的源码
public static Connection getConnection(String url,
        String user, String password) throws SQLException {
        java.util.Properties info = new java.util.Properties();

        if (user != null) {
            info.put("user", user);
        }
        if (password != null) {
            info.put("password", password);
        }

        return (getConnection(url, info, Reflection.getCallerClass()));
    }
  1. Connection接口
  • Statement createStatement() : 创建Statement对象
  • PreparedStatement prepareStatement(String sql): 创建PreparedStatement对象
  • CallableStatement prepareCall(String sql): 创建执行存储过程的CallableStatement对象
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交
  • commit() :在链接上提交事务
  • rollback() :在此链接上回滚事务
  1. Statement接口
    用于执行静态的sql语句
  • Statement:由createStatement创建,用于发送简单的SQL语句(不带参数)。
    |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML)
    |- ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL)
  • PreparedStatement :继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。
    |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML)
    |-ResultSet executeQuery() : 执行预编译的查询sql语句(DQL)
  • CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程
    |-ResultSet executeQuery() : 调用存储过程的方法
  1. ResultSet接口
    用于封装查询出来的数据
  • getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。
  • getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。
  • getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。
  • getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。
  • getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据
  • next():移动到下一行
  • Previous():移动到前一行
  • absolute(int row):移动到指定行
  • beforeFirst():移动resultSet的最前面。
  • afterLast() :移动到resultSet的最后面。
  1. 资源回收
    ResultSet → Statement → Connection
三、例子
  1. 执行查询
String sql = "select * from tb_sx_partner";
// 判断是否有resultset返回
boolean execute = statement.execute(sql);
// 执行查询
 ResultSet resultSet = statement.executeQuery(sql);
 while (resultSet.next()){
       resultSet.getString("id");
 }
  1. 使用PreparedStatement执行sql语句
// 使用PreparedStatement执行sql语句
String sql = "INSERT INTO student(NAME,gender) VALUES(?,?)";
PreparedStatement preparedStatement = connection.prepareStatement(sqlPre);
preparedStatement.setString(1,"小明");preparedStatement.setString(2,"男");
int count = preparedStatement.executeUpdate();
四、事务

1.概念
事务使指一组最小逻辑操作单元,里面有多个操作组成。 组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚
2. 特性

  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency)
    事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
  • 隔离性(Isolation)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
  1. 事务的使用
// 设置开启手动事务,默认是自动的
 connection.setAutoCommit(false);
// 处理语句 ...
// 提交
connection.commit();
 // 回滚
connection.rollback();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值