码迷,mamicode.com
首页 > 数据库 > 详细

2015-09-24 JDBC(一)

时间:2015-09-24 22:44:12      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

 1.JDBC简介

 

 JDBC ( Java DataBase Connectivity)

 JDBC 是由 Java 语言编写 , 使得 JDBC 代码可以在所有 Java 平台运行 , 确保了可植性 .

 JDBC是为Java提供的一个平台无关的数据库标准 API,它提供了一个通用的 SQL 数据库存取机制,该机制为多数关系型DBMS提供统一接口。

 对数据库厂商透明, 不同的数据库制造商提供各自的驱动程序.

 其中包含了访问数据库所必须的类、接口和各种访问数据库异常类。

 

2.JDBC基础

 

  Sun提供的JDBC可以完成的基本工作:  

  与数据库建立连接  

  执行SQL语句

  获得SQL语句的执行结果

  通过JDBC的这三个功能,应用程序就可以使用JDBC来操作数据库系统了

 

3.JDBC API

 

接口名             说明 

Driver             由它注册一个数据库驱动

DriverManager    此类用于加载和卸载各种驱动 并 建立与 数据库的 连接

Connection        数据的连接接口

ResultSet            此接口存放数据检索的结果集

PreparedStatement    此接口用于执行 预编译的 SQL 语句 , 用于执行 CRUD

Statement            此接口用于执行 SQL 语句并将数据检索到 ResultSet 中 

CallableStatement    为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法

 

4.DriverManager提供的方法:

 

  static Connection getConnection(String url, String user, String password)试图建立到url对应数据库的连接 ,并获得到url对应数据库的连接。

 

技术分享 

 

5.程序详解—DriverManager

Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:

DriverManager.registerDriver(new Driver())      //注册驱动,不建议使用

DriverManager.getConnection(url, user, password)  //创建连接

 

注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:

一、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。

二、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。

 

推荐方式:Class.forName(“com.mysql.jdbc.Driver”);

采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。

 

同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的connection对象。

 

6.数据库URL

技术分享 

7.Connection提供的方法:

 

方法                                     功能

Statement createStatement()                     返回Statement对象

PreparedStatement  prepareStatement(String sql) 返回PreparedStatement对象. sql中允许使用问号占位符参数,这个占位符参数必须获得值后才可以执行

CallableStatement prepareCall(String sql)         返回CallableStatement 对象sql格式为{call 过程名(?,?,?...)}

void rollback()                                  回滚事务

void setAutoCommit(boolean autoCommit)          设置是否关闭自动提交,即开启事务

void commit()                                 提交事务

8.Statement提供的方法:

 

ResultSet executeQuery(String sql) 
用于执行查询语句,并返回查询结果对应的ResultSet对象.该方法只能用于执行查询语句.注意该sql中不允许使用问号占位符参数

int executeUpdate(String sql) 
该方法用于执行DML语句,并返回受影响的行数.注意sql语句中不允许使用问号占位符参数,该方法也可以执行DDL语句

boolean execute(String sql) 
执行给定的 SQL 语句,该sql可以是查询语句,也可以是DML语句 或DDL语句

 

9.程序详解—Statement

 

Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:

executeQuery(String sql) :用于向数据发送查询语句。

executeUpdate(String sql):用于向数据库发送insert、update或delete语句

execute(String sql):用于向数据库发送任意sql语句

addBatch(String sql) :把多条sql语句放到一个批处理中。

executeBatch():向数据库发送一批sql语句执行。

 

10.PreparedStatement提供的方法:

 

ResultSet executeQuery() 用于执行查询语句,并返回查询结果对应的ResultSet对象

int executeUpdate()         该方法用于执行DML语句,并返回受影响的行数,该方法也可以执行DDL语句

boolean execute()          用于执行SQL语句

void setObject(int parameterIndex, Object x)   使用给定对象设置指定参数的值.传入的值根据索引传给SQL语句中指定位置的参数,第一个参数parameterIndex为1

 

11.ResultSet提供的方法

 

void close() 释放ResultSet对象

boolean next()  将ResultSet的记录指针定位到下一行,如果移动后的记录指针指向一条有效记录,则该方法返回true

Object getObject(int columnIndex)  根据索引获取当前行、指定列的值

Object getObject(String columnLabel)  根据列名获取当前行、指定列的值

 

12.程序详解—ResultSet

    Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

获取任意类型的数据

getObject(int index)

getObject(string columnName)

获取指定类型的数据,例如:

getString(int index)

getString(String columnName)

提问:数据库中列的类型是varchar,获取该列的数据调用什么方法?Int类型呢?bigInt类型呢?Boolean类型?

 

ResultSet还提供了对结果集进行滚动的方法:

next():移动到下一行

Previous():移动到前一行

absolute(int row):移动到指定行

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

 

13.释放资源

 

Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。

 

特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

 

为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

 

14.JDBC编程--preparedStatement

 

使用PreparedStatement执行SQL语句步骤

1 加载数据库驱动.通常使用Class类的forName()静态方法来加载驱动.代码如下

   //加载驱动

   Class.forName(driverClass)

   driverClass就是数据库驱动类所对应的字符串

   //加载MySQL的驱动

   Class.forName(“com.mysql.jdbc.Driver”)

2 通过DriverManager获取数据库连接.代码如下

   //获取数据库连接

   DriverManager.getConnection(url,user,pass)

   当使用DriverManager获取数据库连接时,通常需要传入3个参数:数据库

    URL、登录数据库的用户名和密码.MySQL数据库的URL写法如下

jdbc:mysql://hostname:port/databasename

使用PreparedStatement执行SQL语句步骤

3 通过Connection对象创建PreparedStatement对象,创建PreparedStatement对象时传入sql语句

  通过调用Connection对象的prepareStatement方法完成

4 为传入的sql语句中的占位符参数赋值

5 使用PreparedStatement执行SQL语句

通过PrepareStatement对象的executeQuery、executeUpdate或execute方法

完成

6 操作结果集.如果执行的SQL语句是查询语句,则执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果

  .程序可以通过操作该ResultSet对象来取出查询结果.如果执行的SQL语句不是查询语句,则无操作结果集这一步骤

7 回收数据库资源,包括关闭ResultSet、 PreparedStatement和Connection等资源

   通过调用ResultSet、PreparedStatement和Connection提供的close方法完成

 

PreparedStatement优势:

使用PreparedStatement执行带占位符参数的SQL语句

注意事项

使用PreparedStatement执行带占位符参数的SQL语句时, SQL语

句中的占位符参数只能代替普通值,不要使用占位符参数代替表

名、列名等数据库对象,更不要使用占位符参数代替SQL语句中

的insert、select等关键字

PreparedStatement的优势

1 PreparedStatement的执行效率比Statement的执行效率高

2 PreparedStatement无须”拼接”SQL”语句,编程更简单

推荐

通常推荐避免使用Statement来执行SQL语句,改为使用

PreparedStatement执行SQL语句

 

2015-09-24 JDBC(一)

标签:

原文地址:http://www.cnblogs.com/mariahcat/p/4836749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!