JavaWEB开发系列之JDBC(一)

JDBC概念:

JDBC(Java Database Connectivity),通用的SQL数据库存取和操作的公共接口(API),定义了访问数据库的标准Java类库。

                                                         

JDBC接口包含两个层次:

  • 面向应用的API:Java API,程序开发人员使用(连接数据库,执行SQL语句,获得结果)
  • 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序使用

                          

JDBC驱动程序的分类:

  1. JDBC-ODBC桥
  2. 部分本地API部分Java的驱动程序
  3. JDBC网络纯Java驱动程序
  4. 本地协议的纯Java驱动程序

JDBC-ODBC桥

机制:把标准的JDBC调用转换成ODBC调用,在JDK中,提供了JDBC-ODBC桥的实现了类(sun.jdbc.odbc.JdbcOdbcDriver)

                                     

部分本地API部分Java的驱动程序

机制:调用数据库厂商提供的本地API,需要安装本地JDBC驱动程序和特定厂商的本地API。

                                 

JDBC网络纯Java驱动程序

机制:利用中间件的应用服务器来访问数据库,应用服务器作为多个数据库的网关,客户端通过它可以连接到不同的数据库服务器上。

                                       

本地协议的纯Java驱动程序

机制;通过与数据库建立socket连接,采用具体与厂商的网络协议把JDBC调用转换为直接连接的网络调用

                                          

JDBC API

                                       

Driver接口

Java.sql.Driver接口提供给数据库厂商,厂商提供具体的实现。由java.sql.DriverManager去调用Driver的实现。

加载与注册JDBC驱动

调用Class类的静态方法forName(),传递要加载的JDBC类名。

建立连接

调用DriverManager类的getConnection()方法建立数据库连接

JDBC URL

                                       

访问数据库

java.sql包中由=有3个接口定义了对数据库调用的不同方式

  1. Statement
  2. PrepatedStatement
  3. CallableStatement

Statement接口定义了两种方法,调用Connection对象的createStatement方法创建该对象。

  • ResultSet excuteQuery(String sql)
  • int excuteUpdate(String sql)

ResultSet调用Statement对象的excuteQuery方法创建改对象,该对象以逻辑表格的形式封装了执行数据库操作的结果集,常用方法

  • boolean next()
  • getString()

JDBC API总结:

java.sql.DriverManager用来装载驱动程序,获取数据库连接

java.sql.Connection完成对某一指定数据库的连接

java.sql.Statement在一个给定的连接中作为SQL执行声明的容器,包含两个重要的子类型

  • java.sql.PreparedStatement用于执行预编译的sql声明
  • java.sql.CallableStatement用于执行数据存储过程中的调用

​​​​​​​java.sql.ResultSet对于给定声明取得结果的途径

SQL注入攻击

利用系统没有对用户输入的数据进行充分的检查,注入非法的SQL语句段或者命令。使用PreparedStatement代替Statement。

PreparedStatement:

PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXXX() 方法来设置这些参数. setXXX() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

元数据

DatabaseMetaData对象获取数据库管理系统的各种信息:

  • getURL():返回一个String类对象,代表数据库的URL
  • getUserName():返回连接当前数据库管理系统的用户名。
  • isReadOnly():返回一个boolean值,指示数据库是否只允许读操作。
  • getDatabaseProductName():返回数据库的产品名称。
  • getDatabaseProductVersion():返回数据库的版本号。
  • getDriverName():返回驱动驱动程序的名称。
  • getDriverVersion():返回驱动程序的版本号。

​​​​​​​ResultSetMetaData类

  • getColumnName(int column):获取指定列的名称
  • getColumnCount():返回当前 ResultSet 对象中的列数。
  • getColumnTypeName(int column):检索指定列的数据库特定的类型名称。
  • getColumnDisplaySize(int column):指示指定列的最大标准宽度,以字符为单位。
  • isNullable(int column):指示指定列中的值是否可以为 null
  • isAutoIncrement(int column):指示是否自动为指定列进行编号,这样这些列仍然是只读的。

​​​​​​​数据库事务

ACID属性:

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

​​​​​​​JDBC事务处理

当一个连接对象被创建时,默认自动提交事务,每次执行SQL语句时,执行成功就向数据库自动提交事务,不能则回滚。

批量处理JDBC语句提高处理速度

当需要成批插入或者更新记录时,可以采用Java的批量更新机制,语序多条语句一次性提交给数据库处理,提高效率

批量处理语句:

  • addBatch(String)添加需要批量处理的SQL语句或是参数
  • executeBatch()执行批量处理语句

​​​​​​​多条SQL语句的批量处理

                                  

一个SQL语句的批量传参

                         

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值