- Java Web程序开发范例宝典
- 王国辉 郭铁 李根福编著
- 7字
- 2020-06-27 11:01:04
4.4 连接Oracle数据库
实例084 通过JDBC连接Oracle数据库
本实例是一个典型的、连接数据库的程序
实例位置:光盘\mingrisoft\04\084
实例说明
由于Oracle数据库的数据管理功能比较强大,对计算机的要求比较高,初学者很少使用它,但是由于它在IT行业所占的地位比较重要,又必须学会使用它,在程序中使用的前提是成功连接数据库,本例将通过JDBC连接Oracle数据库,运行本实例,将查询“家庭住址”为“长春”的员工信息,如图4.39所示。
图4.39 通过JDBC连接数据库
技术要点
要通过JDBC方式连接数据库,首先是加载数据库驱动程序,加载方式如下:
Class.forName(String driverClass).newInstance();
参数说明:
参数driverClass用来指定数据库驱动,Oracle数据库的驱动为oracle.jdbc.driver.Oracle Driver。
注意:数据库驱动只需在该类第一次被调用时执行一次,所以通常将加载数据库驱动放在静态方法中。
然后是建立数据库连接,建立方式如下:
Connection con = DriverManager.getConnection(url, username, password); Statement stat stat = con.createStatement();
参数说明:
● url是数据库的访问路径。
例如本例的url为jdbc:oracle:thin:@localhost:1521:MRSOFT。
● username为连接数据库的用户名。
● password为用户密码。
在完成对数据库的操作后,关闭数据库连接,关闭方式如下:
stat.close(); con.close();
注意:在每次操作数据库之前,都要重新建立数据库连接,并且在操作结束后及时关闭数据库连接,释放数据库连接所占用的资源。
实现过程
(1)创建数据表。本例将用到TB_RECORD表,表结构如图4.40所示。
图4.40 数据表结构图
(2)编写操作数据库的JavaBean(JdbcDriver.java),代码如下:
public class JdbcDriver { static String driverClass = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:MRSOFT"; String username = "SYSTEM"; String password = "SYSTEM"; static{ //加载数据库驱动类,放在静态块中 try { Class.forName(driverClass).newInstance(); } catch (Exception e) { System.out.println("在加载驱动类时抛出异常,内容如下:"); e.printStackTrace(); } } Connection con = null; Statement stat = null; ResultSet rs = null; public void openCon(){ //开启数据库连接的方法 try { con = DriverManager.getConnection(url, username, password); stat = con.createStatement(); } catch (Exception e) {} } public void closeCon(){ //关闭数据库连接的方法 try { if (rs != null) { rs.close(); } if (stat != null) { stat.close(); } if (con != null) { con.close(); } } catch (Exception e) {} } public ResultSet query(String sql){ //查询数据的方法 try { rs = stat.executeQuery(sql); } catch (Exception e) {} return rs; } }
(3)编写JSP页,查询所有数据,并遍历查询结果。关键代码如下:
<% JdbcDriver jdbc=new JdbcDriver(); jdbc.openCon(); //建立连接 ResultSet rs=jdbc.query("select*from TB_RECORD”+where+”order by id"); // 查询数据 try{ while(rs.next()){ //遍历查询结果 %> <tr align="center"> <td><%=rs.getInt("ID") %></td> <td><%=rs.getString("NAME") %></td> <td><%=rs.getDate("BIRTHDAY") %></td> </tr> <% } }catch(Exception e){ }finally{ jdbc.closeCon(); // 关闭连接 } %>
注意:一定要在数据库操作完全结束之后关闭数据库,否则会发生连接已关闭的异常,例如不可以在查询数据之后,遍历查询结果之前关闭数据库连接。
举一反三
根据本实例,读者可以:
通过JDBC实现数据的插入、修改和删除;
通过JDBC连接其他数据库。
实例085 应用Hibernate连接Oracle数据库
本实例是一个典型的、连接数据库的程序
实例位置:光盘\mingrisoft\04\085
实例说明
Oracle数据库以它强大的数据管理功能,成为较完整的Internet数据库之一,受到所有大客户的青睐。在IT行业,也以能否熟练运用Oracle数据库作为软件工程师的衡量标准之一。本例将通过Hibernate连接Oracle数据库,并实现数据插入和数据检索的功能。运行本实例,输入相应的员工信息(见图4.41(A))后,单击“提交”按钮,即可将数据保存到数据表中,在插入成功的页面中,你会看到新插入的记录(见图4.41(B))。
图4.41 新建员工档案
技术要点
连接Oracle数据库时hibernate.cfg.xml的配置方式如下:
<session-factory> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:MRSOFT</property> <property name="connection.username">SYSTEM</property> <property name="connection.password"> SYSTEM </property> <property name="dialect">org.hibernate.dialect.OracleDialect</property> <property name="show_sql">true</property> <mapping resource="mrgf/HibernateJoin.hbm.xml"/> </session-factory>
Oracle数据库的驱动为oracle.jdbc.driver.OracleDriver,即包classes12.jar(在Oracle安装根目录的jdbc/lib文件夹下),将它复制到Web工程的WEB-INF/lib文件夹下,其中localhost代表连接本机的数据库,1521代表Oracle数据库的端口号,MRSOFT代表数据库的名称。
实现过程
(1)创建Hibernate配置文件,代码可参见本例的“技术要点”。
(2)创建数据表。本例将用到TB_RECORD表,表结构如图4.42所示。
图4.42 数据表结构图
注意:在这里将ID定义为Number类型,持久化类对应的属性仍可以定义为int类型,在映射文件中通过Hibernate提供的int映射类型进行映射。
(3)创建持久化类及映射文件。
(4)编写基于持久化的业务逻辑类。在本例中添加了一个持久化对象的方法,代码如下:
public void saveObject(HibernateJoin join) { try{ session=sessionFactory.openSession(); //打开Session tx=session.beginTransaction(); //开启事务 session.save(join); //持久化对象 tx.commit(); //提交事务 session.close(); //关闭Session }catch(Exception e){ e.printStackTrace(); } }
注意:saveObject()方法的入口参数不能定义为Object类型,虽然默认情况下所有类都继承Object类,如果定义为Object类型,在调用Session类的save()方法对join对象进行持久化时,Hibernate会抛出异常。
(5)创建index.jsp页面,实例化持久化对象,检索所有数据。代码如下:
<% Hibernate hibernate=new Hibernate(); HibernateJoin h=new HibernateJoin(); h.setName(hibernate.toChinese(request.getParameter("name"))); h.setBirthday(Date.valueOf(request.getParameter("birthday"))); … //此处省略了部分为属性赋值的代码 hibernate.saveObject(h); List result=hibernate.query("from HibernateJoin"); for(int i=0;i<result.size();i++){ HibernateJoin join=(HibernateJoin)result.get(i); %> <tr align="center"> <td><%=join.getName() %></td> <td><%=join.getBirthday() %></td> </tr> <% } %>
举一反三
根据本实例,读者可以:
通过Hibernate实现修改和删除Oracle数据库中的记录;
运用Hibernate持久层技术和Oracle数据库开发一个家庭成员留言软件。