您的位置:首页 > 数据库 > Oracle

【Oracle】6.JDBC

2016-05-02 13:46 302 查看

简述

JDBC的全称是Java DataBaseConnectivity,即Java数据库连接。它是一套行业标准的API,可以在Java应用程序中与关系型数据库建立连接,并执行相关操作,例如Oracle,DB2等主流数据库产品。
控制台,图形界面客户端与数据库交互的途径是执行SQL语句,Java程序也不例外。Java中访问数据库主要使用JDBC。JDBC是Java规定的访问数据库的标准API,目前主流的数据库都支持JDBC。
JDBC(Java数据基础连接,JavaDatabase Connectivity)是标准的Java访问数据库的API。JDBC定义了数据库的连接,SQL语句的执行以及查询结果集的遍历等。JDBC把这些操作定义为接口,位于包java.sql下面。 

应用

通过JDBC技术与数据库建立连接、了解数据库的信息、查询数据库、获取并显示结果集、更新数据库(数据的增删改)及调用存储过程和批处理。
下图为JDBC技术应用过程:



1.驱动管理器
加载驱动程序
使用Class.forName()显式加载驱动程序。
例如:
Class.forName(“oracle.jdbc.driver.OracleDriver”);


加载了oracle提供的jar包内的OracleDriver类
2.连接数据库
建立连接
指定数据库连接的url,数据源的位置
使用DriverManager.getConnection(url);
例如:
String url=“jdbc:oracle:thin:@127.0.0.1:1521:orcl”;
Connection conn=DriverManager.getConnection(url);
或者:
Connection conn=DriverManager.getConnection(Stringurl , String user , String password)
3.SQL语句
创建Statement
用户执行sql语句,
Statement stmt=conn.createStatement();
执行查询语句
String sql=“select * from emp”
ResultSet rs=stmt.executeQuery(sql);
executeQuery()一般用于执行一个sql语句,返回一个结果集,execute()方法返回多个结果集,
一个Statement对象在同一时间只能打开一个结果集,对第二个结果集的打开隐含着对第一个结果集的关闭。
关闭Statement  stmt.close()
4.结果集
前面讲了如何执行sql语句,返回了ResultSet类的对象,这里讲如何对ResultSet对象进行处理
ResultSet的基本处理方法
ResultSet对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果,按照行和列进行处理。
ResultSet对象维持一个指向当前行的指针。最初,这个指针指向第一行之前。ResultSet类的next()方法使这个指针移向下一行。第一次,使用next()方法,将指针指向结果集的第一行。next方法的返回值是一个boolean值,若为true,则成功移向下一行。若返回false则没有下一行。
getXXX方法可以从某一列中获得结果。其中XXX是jdbc中的java数据类型。如getInt();需要制定检索的列或名称。
Demo
Statement stmt=conn.createStatement();
String sql=“select a,b,c frommytable”;
ResultSet rs=stmt.executeQuery(sql);
While (rs.next())
{
inti=rs.getInt(1);
String s=rs.getString(“a”);
}
Statement对象在每次执行sql语句时都将语句传给数据库,在多次执行同一个语句时,效率比较低。
Statement对象Sql注入引起安全问题,可以使用PreparedStatement,使用数据库的预编译功能,速度可以提高很多。避免sql注入引起的安全问题。
PreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数。
创建
String sql=“select * from emp where ename=?”
PreparedStatement ps=conn.prepareStatement(sql);
执行
ps.setInt(1,”SMITH”);
ResultSet rs=pstmt.executeQuery();
关闭
ps.close();
更新数据库
包括修改,更新和删除记录,创建和删除表,以及增加和删除列,对应于数据库insert,update ,delete等;
对数据库的更新操作也是通过PreparedStatement对象完成的;
不使用executeQuery()方法,使用executeUpdate()方法;
executeUpdate的返回值是它影响的记录的行数。
Demo
String sql=“update Customer set address =‘Peking’ wherelastname=‘Li’”
int i=Stmt.executeUpdate(sql)
返回更新的行数。
调用存储过程
用于执行 SQL 存储过程的接口。
JDBC API 专门提供了调用存储过程的语法,语法如下:
         {call  <过程名>    [(<arg1>,<arg2>, 。。。)]}
存储过程中IN 参数值是使用继承自PreparedStatement的 set 方法设置的。
在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的get()方法获取的。
5.批处理
多次执行数据更新操作时,可以使用批处理减少连接数据库次数,提高效率。
Statement批处理方式:
            Statement st = conn.createStatement();
st.addBatch(更新语句1);
st.addBatch(更新语句2);
……
st.executeBatch();
st.close();
建议采用PreparedStatement
PreparedStatement批处理方式:    
PreparedStatement ps = conn。preparedStatement(sql);
ps.setXXX(索引,参数值);
……
ps.addbatch();
ps.executeBatch();
ps.close();
statement 和 preparestatement区别和联系:
Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句。
PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中。被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。
使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。
PrepareStatement可以减少编译次数提高数据库性能。

模型支持

JDBC支持两层模型,也支持三层模型访问数据库。 两层模型中,一个javaAppple或者一个JAVA应用直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。数据库可以在同一机器上,也可以另一机器上通过网络进行连接。这被称为“C/S”结构,用户的计算机作为Client,运行数据库的计算机作为Server。这个网络可是intranet(内网),比如连接全体雇员的企业内部网,当然也可以是internet(外网)。
在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。数据库处理SQL语句并将结果返回“中间层”,然后“中间层”将它们返回用户。MIS管理员将发现三层模型很有吸引力,因为“中间层”可以进行对访问的控制并协同数据库的更新,另一个优势就是如果有一个“中间层”用户就可以使用一个易用的高层的API,这个API可以由“中间层”进行转换,转换成底层的调用。而且,在许多情况下,三层模型可以提供更好的性能。
到目前为止,“中间层”通常还是用C或C++实现,以保证其高性能。但随着优化编译器的引入,将java的字节码转换成高效的机器码,用java来实现“中间层”将越来越实际。而JDBC是允许从一个java“中间层”访问数据库的关键。

业务思想

JDBC技术的出现,是数据库的一条锁链,掌握好它等于你已经开启了通往无限数据的大门,很是方便我们的业务,努力ing!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: