jdbc入门到精通1

[1]jdbc的概念

  • 什么是jdbc

    JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

  • 图例:

image-20200531212701898

  • jdbc的由来

    • 早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循JDBC规范的,可以访问自己数据库的API被称之为驱动!

    • JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。当然还有第三方公司专门为某一数据库提供驱动,这样的驱动往往不是开源免费的!

    • 总的来说,大致分为以下四个阶段:

      • 1:JDBC-ODBC桥接阶段 :Java-ODBC-DB

        ​ 使用odbc,桥接访问数据库
        ​ java刚出名,缺少访问数据库的方式,sun公司找数据库厂商提供,厂商未提供,采用中转方案,使用用为c语言编写的odbc技术来访问数据库。

      • 2:Native阶段:Java-JDBC-Client-DB

        使用数据库厂商提供的实现访问数据库
        Java出名一段时间了,sun公司又找数据库厂商提供,厂商提供了一套自己实现的jdbc-client,用与访问数据库。

      • 3:JDBC-net pure java drvier: client-general protocol-server-DB
        Java通过访问容器服务,去获取数据库连接,进而访问数据库
        Java更出名了,由于出现了数据库迁移的需求,例如sqlserver转oracle,由于jdbc-client的差异,导致迁移问题,于是sun公司出了一套jdbc访问数据库的接口,统一了各个厂商之间的jdbc-client底层代码实现差异。

      • 4:native protocal pure java:java-JDBC-DB
        jdbc的持续更新,可以通过java程序去找数据库驱动,然后来连接数据库

  • jdbc包含的内容

    • 接口部分:sun公司提供,在jdk的java.sql.*javax.sql.*包中,例:

      classjava.sql.DriverManager管理多个数据库驱动类,提供了获取数据库连接的方法。
      interfacejava.sql.Connection代表一个数据库连接(当Connection对象不为null时,代表已经连接上了数据库)。
      interfacejava.sql.Statement发送SQL语句到数据库的工具。
      interfacejava.sql.PreparedStatementStatement的子类,对其进行了封装,可以处理带占位符的sql语句,解决了sql注入的问题
      interfacejava.sql.ResultSet保存SQL查询语句的结果数据(结果集)。
    • DriverManger(驱动管理器)的作用有两个:

      • 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
      • 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
    • Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:

      • Connection最为重要的一个方法就是用来获取Statement对象;
      • Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句
      • void executeUpdate(String sql):执行更新操作(insert、update、delete等);
      • ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;
    • ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:

      • boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;
      • XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。
  • 实现部分:由数据库厂商提供,例oracle

    • ojdbc14 jdk1.4编写
    • ojdbc5 jdk1.5编写
    • ojdbc6 jdk1.6编写

[2]jdbc开发步骤[重点]

我使用的Ecllipse,需要新建一个普通的java project
  1. 注册驱动

    I. 将Oracle数据库驱动ojdbc14.jar复制到项目的lib文件夹中。

    II. ojdbc14.jar 右键 -> build path -> add to build path。

    III. Class.forName("oracle.jdbc.OracleDriver"); //手动加载字节码文件到JVM中。

  2. 获取连接

    1. 获取连接需要两步,一是使用DriverManager来注册驱动,二是使用DriverManager来获取Connection对象。

      获取连接的也只有一句代码:

      DriverManager.getConnection(url,username,password),

    2. 通过DriverManager获取数据库连接对象(Connection),指定三个参数,如下所示:

      url:jdbc:oracle:thin:@192.168.230.10:1521:orcl
      username:username
      password:password
      
  3. 获得发送SQL的工具:

    I. 编写即将执行的SQL语句(语句中不能包含分号)。

    II. 通过Connection创建Statement对象。例:Statement stm = con.createStatement();

    III. Statement是用来向数据库发送要执行的SQL语句的!

  4. 发送sql并接收执行结果

    I. DML语句:增删改时,返回受影响行数(int类型)。

    II. DQL语句:查询时,返回结果数据(ResultSet结果集)。

  5. 处理结果

    I. DML:增删改时,返回受影响行数(int类型)。

    II. DQL:查询时,返回结果集(ResultSet类型)。

  6. 释放资源

    I. 遵循先开后关。

    II. Connection、PreparedStatement、ResultSet。

[3]ResultSet(结果集)【重点】:

  1. 作用:存储查询到的结果数据。

  2. 使用ResultSet rs = stat.executeQuery(sql);

  3. 获得ResultSet中的数据:

类似一张虚表

  1. 数据行指针:
    初始位置在第一行数据前,每调用一次boolean next()方法,返回为true,则ResultSet的指针向下移动一位

  2. ResultSet的API:

    rs.next() //判断是否存在下一行

    rs.getXXX(columnIndex) //列的编号(从1开始)

    rs.getXXX(columnLabel) //列的名称

[4]PreparedStatement【重点】:

  1. 概念:预编译SQL命名对象

  2. 参数化SQL:可通过" ? "进行参数的占位

    String sql = "select * from t_account where cardId = ? and password = ?";

  3. 绑定动态参数:

    ps.setInt(1,值);

    ps.setDouble(2,值);

    ps.setString(3,值);

    ps.setDate(4,值);

    ps.setObject(5,值); //通用

  4. 发送绑定参数到数据库执行SQL:

    I. int ps.executeUpdate(); //执行增删改

    II. ResultSet ps.executeQuery(); //执行查询

  5. PreparedStatement的好处:

    I. 作用:发送预编译的SQL语句。

    II. 优势:防止SQL注入攻击,执行多个同构SQL的效率高。

    III. 计算访问计划(Access Plan)等效于Oracle的Map集合,将SQL语句一起缓存到内存中。//首次访问相对耗时 SQL = key/plan = value

    IV. 通过SQL语句查找Oracle缓存访问计划并执行。

[5]jdbc常见错误

类名错误在这里插入图片描述
URL错误img
服务没开img
Listener服务没开在这里插入图片描述
动态参数个数与占位符个数不匹配img
书写了小于零,或大于占位符个数的值img
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值