JDBC(Java Database Connection) 教程

什么是JDBC?

  • JDBC为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成。是java程序与数据库系统通信的标准API。JDBC API使得开发人员可以使用纯java的方式来连接数据库,并执行操作。
  • sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库,因此,sun公司决定,自己提供一套API,凡事数据库想与java进行连接的,数据库厂商自己必须实现JDBC这套接口。而数据库厂商的JDBC实现,我们就叫他此数据库的数据库驱动。

JDBC访问数据库流程

这里写图片描述

JDBC常用接口

Driver接口

  • Driver接口由数据库厂商提供,对于java开发者而言,只需要使用Driver接口就可以了。
  • 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库由不同的装载方法。
  • 驱动:就是各个数据库厂商实现的Sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件
  • 装载MySQL驱动
    • Class.forName("com.mysql.jdbc.Driver")
  • 装载Oracle驱动
    • Class.forName("oracle.jdbc.driver.OracleDriver")

Connection接口

  • Connection与特定的数据库连接(会话),在连接上下文中执行SQL语句并返回结果。
  • DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上
  • 连接MySQL数据库:
    • Connection con = DriverManager.getConnection("jdbc:mysql://host:port:database","user","password")
  • 连接Oracle数据库
    • Connection con = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database","user","password")

Statement接口

  • 用于执行静态SQL语句并返回他所生成结果的对象。
  • 三种Statement类
    • Statement:由createStatement创建,用于发送简单的SQL语句。(不带参数的)
    • PreparedStatement:继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的SQL语句。PrepareStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement。
    • CallableStatement:继承自PreparedStatement,由方法prePareCall创建,用于调用存储过程。
  • 常用的Statement方法:
    • execute():运行语句,返回是否由结果集
    • excuteQuery():运行select语句,返回ResultSet结果集。
    • executeUpdate():运行insert,update,delete操作,返回更新的行数。

ResultSet接口

  • Statement执行SQL语句时返回Result Set结果集。
  • ResultSet提供的检索不同类型字段的方法,常用的有:
    • getString():获得在数据库里是archer、char等数据类型的对象
    • getFloat():获得在数据库里是Float类型的对象。
    • getDate():获得在数据库里是Date类型的数据。
    • getBoolean():获得在数据库里面是Boolean类型的数据。

依次关闭使用之对象及连接

  • ResultSet➡️Statement➡️Connection

JDBC详细操作

  • 灵活指定SQL语句中的变量:PreparedStatement
  • 对存储过程进行调用:CallableStatement
  • 运用事务处理:Transaction
  • 批处理
    • Batch
    • 对于大量的批处理,建议使用Statement,因为PreparedStatement的预编译空间有限,当数据量特别大的时候,会发生异常。

事务

事务基本概念

  • 一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元!
  • 事务开始于:
    • 连接到数据库上,并执行一条DML语句(INSERT、UPDATE或DELETE)。
    • 前一个事务结束后,又输入了一条DML语句
  • 事务结束于:
    • 执行COMMIT或ROLLBACK语句。
    • 执行一条DDL语句,例如CREATE TABLE语句;这种情况下会自动执行COMMIT语句。
    • 执行了一条DCL语句,例如GRANT语句;这种情况下会自动执行COMMIT语句。
    • 断开与数据库的连接。
    • 执行了一条DML语句,该语句却失败了;这种情况下会自动执行COMMIT语句。

事务的四大特点(ACID)

  • Atomicity(原子性):表示一个事务内所有的操作是一个整体,要么全部成功,要么全部失败。
  • Consistency(一致性):表示一个事务内又一个操作失败时,所有的更改过的数据必须都回滚到修改之前的状态。
  • Isolation(隔离性):事务查看数据所处的状态,要么是另一个并发事务修改它之前的状态,要么是另一事务修改后的状态,事务不会查看中间状态的数据
  • Durability(持久性):事务完成后,它对于系统的修改时永久性的。

事务隔离级别的从低到高

  • 读取未提交(Read Uncommitted)
  • 读取已提交(Read Committed)
  • 可重复读(Repeatable Read)
  • 序列化(Serializable)

时间类型

  • java.util.Date
    • 子类:java.sql.Date 表示年月日
    • 子类:java.sql.Time 表示时分秒
    • 子类:java.sql.Timestamp 表示年月日时分秒
  • 日期处理比较
    • 随机插入日期
    • 取出指定日期范围内的记录

CLOB

  • CLOB(Character Large Object)
    • 由于存储大量的文本数据
    • 大字段有些特殊,不同的数据库处理方式不同,大字段操作通常是以流的方式来处理的。而非一般的字段,一次即可读出数据。
  • MySQL中相关类型:
    • TINYTEXT最大长度为 255(2^[8]-1)字符的TEXT列。
    • TEXT最大长度为 65,5353(2^[16]-1)字符的TEXT列。
    • MEDIUMTEXT最大长度为 16,777,215(2^[24]-1)字符的TEXT列。
    • LONGTEXT最大长度为4,294,967,295或者4GB(2^[32]-1)字符的TEXT列。

BLOB

  • BLOB(Binary Large Object)
    • 由于存储大量的二进制数据
    • 大字段有些特殊,不同的数据库处理方式不同,大字段操作通常是以流的方式来处理的。而非一般的字段,一次即可读出数据。
  • MySQL中相关类型:
    • TINYTBLOB最大长度为 255(2^[8]-1)字符的TEXT列。
    • BLOB最大长度为 65,5353(2^[16]-1)字符的TEXT列。
    • MEDIUMBLOB最大长度为 16,777,215(2^[24]-1)字符的TEXT列。
    • LONGBLOB最大长度为4,294,967,295或者4GB(2^[32]-1)字符的TEXT列。

ORM 基本思想

  • ORM(Object Relationship Mapping)的基本思想
    • 表结构跟类对应;表中字段和类的属性对应;表中记录和对象对应;
    • 让javabean的属性名和类型尽量和数据库保持一致!
    • 一条记录对应一个对象。将这些查询到的对象放到容器中(List,Set,Map)
  • 将表中的一条记录封装到Object中
  • 将表中的一条记录封装到map中
  • 将表中的一条记录封装到javabean中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.hexiang.utils.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.apache.log4j.Logger; public class DBConnection { /** * 获得与数据库的连接 * * @param path * @return Connection */ public static Connection getConn(String classDriver, String url, String user, String pwd) { try { Class.forName(classDriver); return DriverManager.getConnection(url, user, pwd); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(DataSource dataSource) { try { return dataSource.getConnection(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(String jndiName) { try { Context ctx; ctx = new InitialContext(); DataSource dataSource = (DataSource) ctx.lookup("java:comp/env/" + jndiName); return dataSource.getConnection(); } catch (NamingException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } public static Connection getConn(Properties properties) { try { String driver = properties.getProperty("jdbc.driverClassName"); String url = properties.getProperty("jdbc.url"); String user = properties.getProperty("jdbc.username"); String password = properties.getProperty("jdbc.password"); Class.forName(driver); return DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (SQLException ex) { ex.printStackTrace(); } return null; } /** * oracle连接 * * @param path * @return Connection */ public static Connection getOracleConn(String

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值