Java SE JDBC

Java SE JDBC

1、JDBC

JDBC: java database connectivity java 与数据库的连接

流程

2、角色分类

2.1、服务器(db)

  1. 接收 sql
  2. 执行 sql
  3. 返回结果

2.2、客户端(java)

  1. 接收数据
  2. 组装sql
  3. 发送SQL(与数据库建立联系)
  4. 分析结果

3、 面向接口编程

1、java 制定标准 ,不同的数据库厂商实现 接口即可。java 中提供的接口 java.sql.* 包下,常用接口如下

接口名称作用
java.sql.Connection连接
java.sql.Statement静态处理块
java.sql.PreparedStatement预处理块
java.sql.ResultSet结果集
java.sql.ResultSetMetaData结果集元信息

2、oracle 厂商实现接口 (jar)

  F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar 视安装路径而定

4、jdbc步骤

JDBC 步骤类比快递
加载驱动(完整路径):
Class.forname("")
1、选择快递公司
建立连接(url 用户名 密码)
java.sql.Connection;conn=DriverManager.getConnection()
2、与快递公司建立联系(电话号码 唯一信息)
创建处理块
Statement ;PreparedStatement
3、快递员 收包裹
执行: execute(ddl) int executeUpdate(dml) ResultSet executeQuery(select)4、打包 投递
分析结果 :ddl -->没有异常 dml—>>0 select–>分析结果集5、签收
释放资源6、打发走人
  1. 加载驱动 (选择数据库)
    Class.forname(’’’);

  2. 获取连接 (与数据库建立连接)
    java.sql.Connection
    Connection conn=DriverManager.getConnection()

  3. 准备sql
    String sql;

  4. 封装处理块

    ​ java.sql.Statement 静态处理块
    ​   statement= conn.createStatement();
    ​ java.sql.PreparedStatement 预处理块
    ​   PreparedStatement=conn.prepareStatement(sql)

  5. 发送执行sql,得到结果集
    java.sql.ResultSet
    resultSet=statement.executeQuery(select);

  6. 处理结果
    打印

  7. 关闭
    close();

4.2、静态处理块 Statement

  Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的 SQL 语句。Statement 对象,用于执行不带参数的简单 SQL 语句。执行静态 SQL 语句并返回它所生成结果的对象。

4.2.1.创建 :

连接.Connection.createStatement()

  Connection con =

DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:XE”,"SCOTT

",“TIGER”);

4.2.2. 执行 :
  • ddl -->execute(dd语句) – 通常不会在代码中执行
  • dml -->executeUpdate(dml语句)
  • select -->executeQuery(select)
4.2.3. 特点 :
  • 处理 不变的静态的 sql 语句
  • 优点: 直接查看sql ,方便处理错误
  • 缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入

4.3、 预处理块 PreparedStatement

  PreparedStatement 接口继承了 Statement,并与之在两方面有所不同:有人主张,在 JDBC 应用中,如果你已经是稍有水平开发者,你就应该始终以 PreparedStatement 代替 Statement.也就是说,在任何时候都不要使用 Statement。

  由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

4.3.1.创建:

创建:连接.prepareStatement(sql)

4.3.2.执行:
  • 存在**?** ,先填充参数再执行
  • ddl -->execute()
  • dml -->executeUpdate()
  • select -->executeQuery()
4.2.3.特点:
  • 处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql
  • 优点:性能高,方便编写sql 不存在sql注入 安全
  • 缺点:不能直接打印sql语句 不方便处理错误

5、连接

5.1、准备工作

  • 引入驱动包
  • 构建路径 build path
  • 测试用户是否正确登录

5.2、建立连接

5.2.1、连接字符串

驱动: oracle.jdbc.driver.OracleDriver

 url: jdbc:oracle:thin:@db 服务器地址:端口:实例

 连接 url->jdbc:oracle:thin:@localhost:1521:XE

 用户名: SCOTT

 密码: TIGER

5.2.2、加载驱动
  • 硬编码: new oracle.jdbc.driver.OracleDriver();
  • 软编码: class.forName(“oracle.jdbc.driver.OracleDriver”)

5.3 测试

5.3.1 静态处理块 Statement

public class JdbcDemo01 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动 (选择数据库)
        Class.forName("oracle.jdbc.driver.OracleDriver");
        // 2.获取连接 (与数据库建立连接)
        Connection conn=DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:orcl",
                "ning",
                "ning"
        );
        // 3.准备sql
        String select="select * from emp";//sql语句 //注意: sql最后不要添加;
        //4.封装处理块
        Statement statement= conn.createStatement();
        //5.发送执行sql,得到结果集
        ResultSet resultSet=statement.executeQuery(select);
        //6.处理结果
        while(resultSet.next()){
            int empno=resultSet.getInt(1);//字段的索引从1开始
            String ename=resultSet.getString("ename");//字段名字
            String job=resultSet.getString(3);
            System.out.println("编号:"+empno+",姓名:"+ename+",工作:"+job);
        }
        //7.关闭
        conn.close();
    }
}

5.3.2、预处理块 PreparedStatement

import com.xxxx.utils.JDBCUtils;

import java.io.IOException;
import java.sql.*;
import java.util.Properties;

/*
    手动提交事务
        转账:
            张三给李四转账1000元
            update t_user set account=account-1000 where username='zhangsan';
            update t_user set account=account+1000 where username='lisi';
 */
public class JDBCDemo04 {
    public static void main(String[] args) {
        //获取连接
        Connection conn = null;
        PreparedStatement ps1 = null;
        PreparedStatement ps2 = null;
        try {
            conn  = JDBCUtils.getConnection();

            //设置手动提交事务
            conn.setAutoCommit(false);

            //2.准备sql
            String sql1 = "update t_user set account=account-1000 where username='zhangsan'";
            String sql2 = " update t_user set account=account+1000 where username='lisi'";

            //3.构建预处理块
            ps1 = conn.prepareStatement(sql1);
            ps2 = conn.prepareStatement(sql2);

            //4.执行
            int rows1 = ps1.executeUpdate();
            int rows2 = ps2.executeUpdate();

            //5.处理结果
            if(rows1>0 && rows2>0){
                conn.commit(); //提交
                System.out.println("转账成功");
            }else{
                conn.rollback(); //回滚
                System.out.println("转账失败");
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {

        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值