`

JDBC操作调用Qracle中过程或函数取得数据

阅读更多

    在java中可以通过直接向数据库传输SQL语言字符串的方式来调用数据库中的数据,但这样会有很多缺点,比如说容易被他人从网络注入SQL语句,传输数据量大影响效率之类的。

    所以一般的JAVA程序操作数据库的方式都是通过事先在数据库中用PL/SQL编程建立好我们需要操作的过程或者函数,然后由JAVA程序通过JDBC直接来调用数据库中的过程来达到我们的目的,这样他人就难以从网络悄悄的注入SQL语句来窃取我们数据库的数据了,并且传输的数据量也变小的,优化了效率。

    下面是用JDBC调用数据库中的过程和函数来达到获取和修改数据的目的的一个实例:

1.首先我们用scott用户登录,给它新建一个LOL表,再给表中插入一些数据

--新建一个表
create table lol(heronum number(5),heroname varchar2(10),herotype varchar2(10));

 

     (建立一个序列,来给表中的每一条数据一个连续的编号)

--新建一个序列()
create or replace sequence seq_lol
start with 1   --从0开始
increment by 1  --每次增加1
maxvalue 100  --最大值为100
nocycle      --不循环
nocache      --没有缓存(语句执行失败时不会增加)

 

 

 

--给表中插入数据
insert into lol values(seq_lol.nextval,'盖伦','肉盾');
insert into lol values(seq_lol.nextval,'赵信','近战');
insert into lol values(seq_lol.nextval,'易','近战');
insert into lol values(seq_lol.nextval,'提莫','射手');
insert into lol values(seq_lol.nextval,'瑞兹','法师');

2.(修改数据)我们发现表中插入的第一条数据错了,盖伦应该是近战类型的,这里定义一个过程来通过输入一个heroname来修改这条数据的herotype.

--通过输入一个英雄的名字,来修改他的类型
create or replace procedure pro_updateTypeByName(v_heroname varchar2,v_herotype varchar2) is

begin
  update lol set herotype=v_herotype where heroname=v_heroname;
end;

3.通过JDBC来调用数据库中的过程,修改名字为盖伦的英雄的类型.

    (1)首先在JAVA中写一个类用来获得连接数据库的连接对象(此处将这个类的构造方法私有化了,这样让外界只能通过调用它里面的静态方法来获得对象,然后再在这个取得对象的静态方法里作一系列判断,让程序的运行中只存在一个连接对象,这样就节约了程序的资源,优化了数据库与JAVA的连接效率).

/**
 * 连接数据库,获得数据库连接对象
 * @author yy
 *
 */
public class DBUtil {
	private static Connection conn;
	//将构造方法私有化,让这个类只能通过调用下面的静态方法来创建对象
	private DBUtil(){
		
	}
	public static Connection getconn(){
		if(conn==null){
			try {
				//装载驱动(此处先要在工程处引入外界的JDBC包)
				Class.forName("oracle.jdbc.driver.OracleDriver");
				String url = "jdbc:oracle:thin:@172.19.238.127:1521:ORCL";
				//获得数据库连接
				conn = DriverManager.getConnection(url, "scott", "scott");
				return conn;
			} catch (Exception e) {
				e.printStackTrace();
			}
			return null;
		}
		return conn;
	}
}

     (2).定义一个操作类,类中创建一个用来执行数据库中过程的方法.

public class EXEChw {
	/**
	 * 通过名字修改类型
	 * @param name 要修改英雄的名字
	 * @param newtype 要修改成的类型
	 */
	public void setTypeByName(String name,String newtype){
		try{
		//获得数据库连接对象
		Connection conn = DBUtil.getconn();
		//定义调用过程的SQL语句(此处的?是一个占位符,在编译了SQL语句之后再给它赋值,这样可以防止全能等式的BUG)
		String sql = "{call pro_updateTypeByName(?,?)}";
		//获得编译对象
		CallableStatement cstm = conn.prepareCall(sql);
		//给?赋值
		cstm.setString(1, name);
		cstm.setString(2, newtype);
		//执行过程
		cstm.execute();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

     (3).通过调用方法来执行数据库中的过程,修改数据库中的内容,将盖伦的类型改为近战

EXEChw eh = new EXEChw();
eh.setTypeByName("盖伦", "近战");

     (4).在数据库中查看lol表,看以上操作是否改变了盖伦的类型

SQL> select * from lol;
 
HERONUM HERONAME   HEROTYPE
------- ---------- ----------
      1 盖伦       近战
      2 赵信       近战
      3 易         近战
      4 提莫       射手
      5 瑞兹       法师
 
SQL> 

 3.(取得数据)我们要通过输入一个英雄的编号,取得这个英雄的所有信息

    (1).在数据库中创建这个过程.

--通过输入一个英雄的编号,来获得这个英雄的所有信息
create or replace procedure pro_getAllByNum(v_heronum in number,v_heroname out varchar2,v_herotype out varchar2) is

begin
  select heroname,herotype into v_heroname,v_herotype from lol where heronum=v_heronum;
end;

    (2).在EXChw类中创建一个方法来通过JDBC调用这个过程,获得该编号英雄的名字和类型输出.

 

	/**
	 * 通过编号来获得名字和类型
	 * @param num 依据的编号
	 */
	public void getNameTypeByNum(int num){
		try{
		//获得数据库连接对象
		Connection conn = DBUtil.getconn();
		//定义调用过程的SQL语句(此处的?是一个占位符,在编译了SQL语句之后再给它赋值,这样可以防止全能等式的BUG)
		String sql = "{call pro_getAllByNum(?,?,?)}";
		//获得编译对象
		CallableStatement cstm = conn.prepareCall(sql);
		//给第一个?赋值
		cstm.setInt(1, num);
		//给第二三个?注册输出的参数
		cstm.registerOutParameter(2, java.sql.Types.VARCHAR);
		cstm.registerOutParameter(3, java.sql.Types.VARCHAR);
		//执行过程
		cstm.execute();
		//获得输出的参数的值
		String name = cstm.getString(2);
		String type = cstm.getString(3);
		//输出
		System.out.println("名字:"+name+",类型:"+type);
		}catch(Exception e){
			e.printStackTrace();
		}
	}

     (3).JAVA中的输出为

名字:易,类型:近战

 4.显示lol表中的所有数据(游标的使用)

太晚了,明天写  ≡ ‘(*>﹏<*)′ ~

 

0
2
分享到:
评论
8 楼 Y_1746119035 2014-10-20  
Lover_IT 写道
LOL无处不在啊

别队形 0 0
7 楼 Y_1746119035 2014-10-20  
肆无忌惮_ 写道
LOL无处不在啊

别队形  = =!
6 楼 Lover_IT 2014-10-20  
LOL无处不在啊
5 楼 肆无忌惮_ 2014-10-20  
LOL无处不在啊
4 楼 Y_1746119035 2014-10-20  
lzlg302 写道
学习中,楼主加油

嗯嗯,一起加油O(∩_∩)O~
3 楼 lzlg302 2014-10-20  
学习中,楼主加油
2 楼 Y_1746119035 2014-10-20  
thc1987 写道
LOL无处不在啊

汗...(=@__@=)
1 楼 thc1987 2014-10-20  
LOL无处不在啊

相关推荐

    QRACLE安装详细图解

    总之,QRACLE 10g的安装与数据库创建是一个涉及多个配置环节的过程,每个环节都需要细心操作,以确保数据库能够正常运行并满足业务需求。熟悉这个过程不仅可以帮助你顺利安装,还能提升你在日常运维中的问题解决能力...

    Qracle jar包

    Qracle jar包是专为连接Oracle数据库设计的Java库,它在Hibernate框架中起到了关键作用,使得开发者能够轻松地在Java应用中管理和操作Oracle数据库。这篇文章将深入探讨Qracle jar包、其功能以及如何在Hibernate环境...

    Qracle数据库笔记

    Oracle数据库中的表是存储数据的主要容器,下面介绍表的基本管理操作: 1. **表和列的命名规则** - 表名和列名必须以字母开头。 - 不能使用Oracle的保留关键字。 - 只能使用字母、数字、$、#等符号。 - 长度...

    c# 连接oracle数据库和对数据库的基本操作

    在C#中与Oracle数据库进行交互是常见的任务,尤其对于初学者来说,了解这个过程是必要的。本篇文章将深入探讨如何使用C#连接Oracle数据库以及执行基本的数据操作。由于描述中提到这适用于初学者,我们将从基础知识...

    Qracle 10g OCP 原厂培训PPT

    在Oracle 10g OCP的培训中,你可能会学到以下核心知识点: 1. 数据库安装与配置:如何在不同的操作系统平台上安装Oracle 10g,包括选择正确的软件包、规划硬件资源、配置网络服务和创建数据库实例。 2. 数据库管理...

    oracle 各版本驱动

    在你提供的压缩包"Qracle各版本驱动"中,包含了适用于JDK 1.4、1.5和1.6的Oracle驱动,这些都是针对Oracle 11g数据库的。 1. JDBC驱动类型: Oracle的JDBC驱动主要分为四种类型: - Type 1( Thin driver):这是...

    Oracle各个版本驱动

    对于描述中提到的"Qracle 11g Driver (JDK 1.6)",这应该是Oracle 11g版本的JDBC驱动,兼容Java Development Kit (JDK) 1.6。在使用这个驱动时,确保你的Java运行环境是JDK1.6,否则可能无法正常工作。要使用驱动,...

    通过Oracle访问Sybase数据库

    最后,在Oracle数据库中创建数据库链接,以便应用程序可以直接调用存储过程或其他对象访问Sybase数据库中的数据。可以通过执行如下SQL语句创建数据库链接: ```sql CREATE DATABASE LINK sybase_link CONNECT TO ...

    涂抹Qracle ---PDF完整版PART1

    在网上看到很多都是不全的,所以我上传了一份完整版的,一共554页,17章。文档是PDF格式,80M左右,分为两部分。 此为part1

    涂抹Qracle ---PDF完整版PART2

    在网上看到很多都是不全的,所以我上传了一份完全版的,文档是PDF格式,80M左右,分为两部分。 此为part2

    VC.rar_MFC sql_VC ODBC_pusdn_vc ODBC API_vc pusdn

    开发Windows应用程序时,在很多情况下可能要和数据库连接。数据库类型多种多样,功能...而实际应用中,往往要求数据库应用程序能关联二个或多个数据表。VC++的好多书籍对此只是简单的介绍。本文透彻地解决这一问题。

    项目开发工具包——tomcat+项目框架+大屏模板+winfrom美化工具+连接Qracle数据库插件

    Tomcat:apache-tomcat-8.5.77-windows-x64; winfrom窗体美化工具:...批量导入导出数据库:可以导入导出SQLserver数据库百万数据; 連接Oracle的插件; 項目開發框架:AdminLTE+bootstrap+layui(可自行去官网下载)

    数据库入门常有语句简单实用的SQL 语句,你一定可以用到,简单介绍了数据查询操作结果集的运用和格式转换

    简单实用的SQL 语句,你一定可以用到,简单介绍了数据查询操作结果集的运用和格式转换,举例详实,清晰明了...1.ASCII 返回与指定的字符对应的十进制数; SQL&gt; select ascii('A') A,ascii('a') a,ascii('0') zero,...

    oracle表字段或是视图字段添加备注方法

    在本节中,我们将详细介绍如何使用 Oracle 的 Comment 机制来添加备注信息到表字段或视图字段中。 添加备注信息到表字段或视图字段的方法 在 Oracle 中,添加备注信息到表字段或视图字段的方法非常简单。我们可以...

    Oracle必备知识

    跟大家分享一下清华大学计算中心ORACLE培训资料,揭开Oracle的神秘面纱。

    Linux安装Oracle 11g服务器图文教程

    应该是最完整的Oracle安装教程了,全程在测试服务器上完成,软件环境:Red Hat

Global site tag (gtag.js) - Google Analytics