JAVA与数据库

1. JDBC概述

1)、1996年夏,Sun公司推出了java数据库连接JDBC工具包的第一个版本。

2)、JDBC工具包使得编程人员可以进行结构化查询语言,即sql,连接到一个数据库,对数据库进行查询,或者对数据库进行更新。

3)、JDBC技术是J2EE构架的重要组部分。

4)、目前JDBC已经发展到4.0版本

5)、JDBC是标准化地将关系型数据库操作和java程序集成到一起,可以直接对数据库进行访问和修改的API。

6)、JDBC最终还是应用到ODBC的技术,但它却很好的封装了ODBC,我们可以很容易通过JDBC API来进行数据库访问控制。

7)、JDBC现在可以连接的数据库包括:Oracle、Sql Server  、MySQL、DB2、Informix以及Sybase等

8)、由于JDBC对多种数据库的支持,使得人们在建立客户/服务器应用程序时,通常把Java作为编程语言,把任何一种浏览器作为应用程序的友好界面,把Internet或Intranet作为
    网络主干,来访问有关的后台数据库。 
    
9)、简单的说JDBC就是完成的三件事
A、同一个数据库建立连接;

B、向数据库发送SQL语句;

C、处理数据库返回的结果;

2. JDBC工作原理

 

 3. JDBC技术接口介绍

3.1. 驱动分类
1、JDBC-ODBC桥加ODBC驱动程序 
       将JDBC转换成ODBC,并使用一个ODBC驱动程序与数据库连接。
2。 本地API 驱动程序
     部分使用java编程语言编写和部分使用本机代码编写的驱动程序,通过该驱动程序使你的应用程序和数据库进行连接。
3. JDBC通过网络的纯Java驱动程序
     该驱动程序是一个3-Tier(层)的解决方案,驱动程序将应用程序中的操作通过jdbc转换成指令发送到一个中介软件,再通过该中介软件将操作指令发送到DBMS中,得到的结果集也
是通过该中介软件传回应用程序的。
4. 纯Java驱动程序
   这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议,应用程序可以直接和数据库进行沟通。

 4. JDBC编程实现

4.1. 使用JDBC的类来进行编程主要使用到JDBC的核心类来建立对象,如果有需要的话,再按照继承性来扩展这些对象。

   1、用于JDBC编程的类都放在java.sql和javax.sql包中。
   2、java.sql.*: 提供用于访问和处理存储在数据源中数据的API,包含不同驱动进行数据库访问方法的框架设计。

   3、javax.sql.*:提供在程序中访问和处理数据源的API,该包中类实现了java.sql包。
JDBC具体的实现步骤:

  1. 通过驱动程序管理器获取连接接口,注册一个驱动。
 
  2. 建立一个到数据库的连接Connection。 

  3. 创建一个陈述对象Statement。 

  4. 通过陈述对象执行sql语句,并返回结果集ResultSet.

  5. 处理该结果集。 

  6. 关闭Statement

4.2. 实现JDBC编辑对象介绍

1. DriverManager类

DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。
    它跟踪可用的驱动序,并在数据库和相应驱动程序之间建立连接。

DriverManager 类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。

DriverManager 类包含一列的驱动程序类,它们已通过调用方法DriverManager.registerDriver( ) 对自己进行了注册,所以我们可以直接加载驱动程序,然后让驱动程序自己去
注册。

Class.forName( )提供两种方式进行注册:
Class.forName("com.mysql.jdbc.Driver");
加载成功后会生成一个Driver对象,然后调用DriverManager.registerDriver()自动注册该对象
加载失败,“Class not found”说明无法找到JDBC驱动程序

Class.forName("com.mysql.jdbc.Driver").newInstance()
当碰到“Driver not found”错误的时候,也就是说注册JDBC驱动不成功的时候用这种方法,主要是因为JDBC规范和某些JVM产生问题。
2. Connection对象

在成功注册后,就要用java.sql.DriverManager类的getConnection()方法来创建一个连接。

创建Connection对象的两种方法:
static  Connection  getConnection ( String url)
尝试建立一个和给定的URL的数据库连接。
 
static  Connection  getConnection ( String url ,
                                       String user , String password)
连接到指定URL的数据库,使用用户名为user,密码为password。

JDBC URL的标准语法:
               <protocol>:           <subprotocol>:                        <data source info>
URL中三个部分,分别是协议、子协议和数据来源
协议:JDBC表示协议,它是唯一的,JDBC只有这一种协议。
子协议:识别不同的数据库驱动程序。
数据来源:用于连接的具体数据库名字。
URL例子:

以JDBC-ODBC桥连接本地Access数据库mydb
jdbc:odbc:mydb?user=name&password=pw

Sqlserver连接的例子
String  url="jdbc:microsoft:sqlserver://localhost :1433;
                   DatabaseName=mydb";
    String  userName ="sa";
    String  password  ="sa";

Connection con  =  DriverManager.getConnection ( url, userName, password );
 
  
close( )
该方法为关闭数据库的连接,在使用完连接后必须关闭,否则连接会保持到超时为止。
isclose( )
判断连接是否关闭。
setAutoCommit(boolean autoCommit)
设置操作是否自动提交到数据库,默认情况下是true。
commit( )
提交对数据库的更改,是更改生效。注意:这个方法只有调用了setAutoCommit(false)方法后才有效,否则对数据库的更改会自动提交到数据库。
rollback( )
回滚当前执行的操作,和commit()一样只有调用了setAutoCommit(false)才可以使用。
Statement createStatement()
创建一个Statement,Statement用于执行SQL语句。
getMetaData()
返回数据库元数据。
3. Statement接口

java.sql.Statement提供在基层连接上运行SQL语句(如添加,删除,修改,查询),并且返回结果。 

可通过调用Connection对象的createStatement()方法来建立一个新的陈述对象。
Statement stat = conn.createStatement();

stat.execute(“create teable Greetings (Name  CHAR(20))");
在数据库中创建一个新的表

stat.execute(“insert into Greetings values (‘Test  Data!')");
在当前数据库表中插入一条新纪录

ResultSet result = stat.executeQuery(“select * from Greetings");
从当前数据库表中查询符合要求的纪录

boolean  execute ( String sql)
执行sql语句返回一个结果集则返回true,否则返回false
ResultSet  executeQuery ( String sql)
返回查询结果,通过ResultSet 对象来取得具体的值
int  executeUpdate ( String sql)
执行如create table\drop table\alter table等的 sql ddl语句
执行返回结果为零。
执行如insert \ delete\update等的sql dml语句。
执行该方法时返回值都是整数,代表更新的数据数

void  addBatch(String sql)
增加批处理语句。
int[ ]  executeBatch()
执行批处理语句。
void  clearBatch()
清除批处理语句。 

在Statement执行SQL语句时,有时会返回ResultSet结果集
可将结果集看成一张二维表,通过一个可控制的、可以指向任意一条记录的指针(游标)来任意访问我们希望的纪录行。
一个结果集对象中只包含一个游标。
并可通过提供的方法可以访问结果的不同字段。 

例子
 while( rs!=null &&  rs.next( ) ){
       String name = rs.getString(“name”);
       int      age     =  rs.getInt(“age”);
       System.out.println(“姓名为 :  ”+name )
       System.out.println(“年龄为 : ”age);
 }
4. ResultSet对象

从JDBC2.0开始在得到statement对象时增加了两个参数设置,通过这些参数的设置可以决定查询结果集ResultSet是否可以上下自由移动,是只读还是可读写的。

通过createStatement( int  resultSetType ,  int resultSetConcurrency )throws SQLException的参数来设置。

createStatement(int type ,int concurrency)的参数说明:
type 参数设置ResultSet对象中的指针是否能够上下自由移动;可选值为:
TYPE_FORWARD_ONLY: 只能使用next方法向下移动指针。
TYPE_SCROLL_SENSITIVE: 能可上下移动,且能得到改临时修改后的数据库值。
TYPE_SCROLL_INSENSITIVE:能可上下移动,只能得到当前查询的值。

concurrency参数指定ResultSet对象的读写属性。
CONCUR_READ_ONLY: ResultSet对象对结果集只能读。
CONCUR_UPDATABLE: ResultSet对象可以直接执行数据库的新增、修改和移除的操作。

boolean next( )
用于使结果集中的当前行向前移动1行,到达最后一行后,返回false。且必须调用该方法才能转到新的一行。

XXX getXXX( int        columnNumber)
XXX getXXX( String  columnName)
XXX代表一个类型,如String,int,date等
用于反户带有列索引columnNumebr或列名字的转换成特定类型的那个列的值,并不是所有的类型转换都是合法的。

void close()
用于立即关闭当前的结果集。

java.sql.ResultSet提供了检索不同类型字段的方法 :
getString( )
获得在数据库里是varchar、char等数据类型的对象。
getFloat( )
获得在数据库里是Float数据类型的对象。
getDouble( )
获得在数据库里是Double Precision数据类型的对象。
getDate( )
获得在数据库里是Date数据类型的对象。
getBoolean( )
获得在数据库里是Boolean数据类型的对象。
getObject( )
在SQL中无对应类型,可以获得序列化对象等。
getBlob( )
获得在数据库里是Blob(二进制大型对象)数据类型的对象。
getClob( )
获得在数据库里是Clob(字符型大型对象)数据类型的对象。
5. ResultSet 对象

如果我们想要得到查询结果集中有多少列、列名称、列标签、列的数据类型分别是什么等信息的时侯就需要用到结果集元数据ResultSetMataData
元数据就是数据的数据,也就是用来描述数据的数据

结果集的元数据并不直接包含在结果集对象中,所以我们要采用如下的方法来获取结果集的元数据:
ResultSet rst = stm.executeQuery(“select…”);

ResultSetMetaData rsmd = rst.getMetaData( ); 

getColumnCount( )
    返回此ResultSet对象中的列数。

getColumnName(int column)
    获取指定列的名称。

getColumnType(int column)
    检索指定列的SQL用数字表示的类型。

getColumnTypeName(int column)
    检索指定列的数据库特定的类型名称。
6. SQLException对象
在大多数JDBC方法执行中都会抛出java.sql.SQLException异常,所以必须在程序中给出相应的方法进行捕获并处理。

SQLException类中提供的方法
String getSQLState()
用于获取格式化的SQLState

int getErrorCode()
用于获取特定供应商设置的异常代码

SQLException getNextException()
用于捕获与该异常相关的异常,它可能包含关于错误的更详细的信息。

猜你喜欢

转载自www.cnblogs.com/xkjlive/p/10460577.html
今日推荐