Java Web之第9章JDBC

第9章 JDBC

  • 9.1 什么是JDBC
  • 9.2 JDBC常用的API
    • 9.2.1 Driver接口
    • 9.2.2 DriverManager类
    • 9.2.3 Connection接口
    • 9.2.4 Statement接口
    • 9.2.5 PreparedStatement接口
    • 9.2.6 ResultSet接口
  • 9.3 实现第一个JDBC程序
  • 9.4 PreparedStatement对象
  • 9.5 ResultSet对象

JDBC:用于访问数据库的标准Java类库

9.1 什么是JDBC

JDBC:Java数据库连接,它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型的数据库,并使用SQL语句来完成对数据库中数据的查询,更新,新增和删除操作

不同种类的数据库(如MySQL,Oracle等)在其内部处理数据的方式是不同的。如果直接使用数据库厂商提供的访问接口操作数据库,应用程序的可移植性就会变得很差。例如用户当前在程序中使用的是MySQL提供的接口操作数据库,如果换成Oracle数据库,则需要重新使用Oracle数据库提供的接口,这样代码的改动量会很大。有了JDBC后,这种情况不复存在了,因为它要求各个数据库厂商按照统一的规范来提供数据库驱动,而在程序中是由JDBC和具体的数据库驱动联系,所有用户就不必直接与底层的数据库交互,这使得代码性更强

JDBC在应用程序与数据库直接起到一个桥梁的作用。当应用程序使用JDBC访问特定的数据库时,需要通过不同数据库驱动与不同的数据库进行连接,连接后即可对该数据库进行相应的操作

9.2 JDBC常用的API

JDBC API:主要位于java.sql包中,该包定义了一系列访问数据库的接口和类

9.2.1 Driver接口

Driver接口:是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用

注意在编写JDBC程序时,必须要把所使用的数据库驱动程序或类库加载到项目的classpath中(这里指MySQL驱动JAR包)

9.2.2 DriverManager类

DriverManager类:用于加载JDBC驱动并且创建于数据库的连接

在DriverManager类中,定义了两个比较重要的静态方法,具体如下:

方法名称 功能描述
registerDriver(Driver driver) 该方法用于向DriverMangager中注册给定的JDBC驱动程序
getConnection(String url,String user,String pwd) 该方法用于建立和数据库的连接,并返回表示连接的Connection对象

9.2.3 Connection接口

Connection接口:代表Java程序和数据库的连接,只有获得该连接对象后才能访问数据库,并操作数据库

在Connection接口中,定义了一系列方法,具体如下:

方法名称 功能描述
getMetaData() 该方法用于返回表示数据库的元数据的DatabaseMetaData对象
createStatement() 用于创建一个Statement对象并将SQL语句发送到数据库
prepareStatement(String sql) 用于创建一个prepareStatement对象并将参数化的SQL语句发送到数据库
prepareCall(String sql) 用于创建一个CallableStatement对象来调用数据库的存储过程

9.2.4 Statement接口

Statement接口:用于执行静态的SQL语句,并返回一个结果对象,该接口的对象通过Connection实例的createStatement()方法获得。利用该对象把静态的SQL语句发送到数据库编译执行,然后返回数据库的处理结果

在Statement接口中,提供了3个常用的执行SQL语句的方法,具体如下:

方法名称 功能描述
execute(String sql) 用于执行各种SQL语句,该方法返回一个boolean类型的值,如果为true,表示所执行的SQL语句有查询结果,可通过Statement的getResultSet()方法获得查询结果
executeUpdate(String sql) 用于执行SQL中INSERT,UPDATE和DELETE语句。该方法返回一个int类型的值,表示数据库中受该SQL语句影响的记录条数
executeQuery 用于执行SQL中的SELECT语句,该方法返回一个表示查询结果的ResultSet对象

9.2.5 PreparedStatement接口

PreparedStatement接口:是Statement的子接口,用于执行预编译的SQL语句。该接口扩展了带有参数SQL语句的执行操作,应用接口中的SQL语句可以使用占位符?来替代其参数,然后通过setXxx()方法为SQL语句的参数赋值

在PreparedStatement接口中,提供了一些常用方法,具体如下:

方法名称 功能描述
executeUpdate() 在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句或者是无返回内容的SQL语句,比如DDL语句
executeQuery() 在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象
setlnt(int parameterlndex,int x) 将指定参数设置为给定的int值
setFloat(int parameterlndex,float x) 将指定参数设置为给定的float值
setString(int parameterlndex,String x) 将指定参数设置为给定的String值
setDate(int parameterlndex,Date x) 将指定参数设置为给定的Date值
addBatch() 将一组参数添加到此PreparedStatement对象的批处理命令中
setCharacterStream(int parameterlndex,java.io.Reader,int length) 经指定的输入流写入数据库的文本字段
setBinaryStream(int parameterlndex,java.io.InputStream x,int length) 将二进制的输入流数据写入到二进制字段中

注意setDate()方法可以设置日期内容,但参数Date的类型是java.sql.Date,而不是java.util.Date
在通过setXxx()方法为SQL语句中的参数赋值时,可以通过参数与SQL类型向匹配的方法(例如,如果参数类型为integer,那么应该使用setInt方法),也可以通过setObject()方法设置多种类型的输入参数

9.2.6 ResultSet接口

ResultSet接口:用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标(或指针),ResultSet对象初始化时,游标在表格的第1行之前,调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。在应用程序中经常使用next()方法作为WHILE循环的条件来迭代ResultSet结果集

ResultSet接口中常用方法如下:

方法名称 功能描述
getString(int columnlndex) 用于获取指定字段的String类型的值,参数columnindex代表字段的索引
getString(String columnName) 用于获取指定字段的String类型的值,参数columnName代表字段的名称
getlnt(int columnlndex) 用于获取指定字段的int类型的值,参数columnindex代表字段的索引
getlnt(String columnName) 用于获取指定字段的int类型的值,参数columnName代表字段的名称
getDate(int columnlndex) 用于获取指定字段的Date类型的值,参数columnindex代表字段的索引
getDate(String columnName) 用于获取指定字段的Date类型的值,参数columniName代表字段的索引
next() 将游标从当前位置向下移一行
absolute(int row) 将游标从当前位置此ResultSet对象的指定行
afterLast() 将游标从当前位置此ResultSet对象的末尾,即最后一行之后
beforeFirst() 将游标从当前位置此ResultSet对象的开头,即第1行之后
previous() 将游标从当前位置此ResultSet对象的上一行
last() 将游标从当前位置此ResultSet对象的最后一行

注意字段的索引是从1开始编号的

9.3 实现第一个JDBC程序

JDBC的使用步骤如下:
(1)加载并注册数据库驱动

(2)通过DriverManager获取数据库连接

(3)通过Connection对象获取Statement对象

Connection创建Statement的方式有如下3种:

1.createStatement():创建基本的Statement对象

2.prepareStatement():创建prepareStatement对象

3.prepareCall():创建CallableStatement对象

(4)使用Statement执行SQL语句

Statement的3种执行SQL语句的方法:

1.execute():可以执行任何SQL语句

2.executeQuery():通常执行查询语句,执行后返回代表结果集的ResultSet对象

3.executeUpdate():主要用于执行DML和DDL语句。执行DML语句,如INSERT,UPDATE或DELETE时,返回受SQL语句影响的行数,执行DDL语句返回0

(5)操作ResulSet结果集

如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果,程序可以通过操作该ResultSet对象来取出查询结果

(6)关闭连接,释放资源

每次操作数据库结束后都要关闭数据库连接,释放资源,包括关闭ResultSet,Statement和Connection等资源

9.4 PreparedStatement对象

SQL语句的执行是通过Statement对象实现的。Statement对象每次执行SQL语句时,都会对其进行编译。当相同的SQL语句执行多次时,Statement对象就会使数据库频繁编译相同的SQL语句,从而降低数据库的访问效率

为了解决上述问题,Statement提供了一个子类PreparedStatement。PreparedStatement对象可以对SQL语句进行预编译,预编译的信息会存储在PreparedStatement对象中。当相同的SQL语句再次执行时,程序会使用PreparedStatement对象中的数据,而不需要对SQL语句再次编译去查询数据库,这样就大大地提高了数据的访问效率

9.5 ResultSet对象

ResultSet:主要用于存储结果集,可以通过next()方法由前向后逐个获取结果集中的数据。如果想获取结果集中任意位置的数据,则需要在创建Statement对象时,设置两个ResultSet定义的常量,具体设置方式如下:

Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENITIVE,Statement.CONCUR_READ_ONLY);

ResultSet rs = st.excuteQuery(sql);

常量ResultSet.TYPE_SCROLL_INSENITIVE表示结果集可滚动,常量Statement.CONCUR_READ_ONLY表示以只读形式打开结果集

你可能感兴趣的:(JAVA,WEB基础教程)