java如何写存储过程

合集下载

如何用Java编写一个简单的数据库应用程序

如何用Java编写一个简单的数据库应用程序

如何用Java编写一个简单的数据库应用程序Java是一个非常强大的编程语言,它提供了多种处理数据库的方案。

下面我们将介绍如何用Java编写一个简单的数据库应用程序。

1.安装Java开发环境(JDK):首先,你需要安装Java开发环境(Java Development Kit,JDK)。

你可以从Oracle官方网站上下载最新版本的JDK,并按照它们提供的说明进行安装。

2.设置环境变量:一旦JDK安装完毕,你需要设置相应的环境变量。

在Windows系统中,你可以在“系统属性”中找到“高级”选项卡,点击“环境变量”,并添加JAVA_HOME变量指向JDK的安装路径。

3.下载并安装数据库:Java支持多种数据库,例如MySQL、Oracle和PostgreSQL。

你可以选择其中一个作为你的数据库。

在这个教程中,我们将使用MySQL作为示范。

从MySQL官方网站下载并安装最新版本的MySQL。

4.连接数据库:一旦数据库安装完毕,你需要编写Java代码来连接数据库。

首先,你需要下载MySQL JDBC驱动程序。

你可以从MySQL官方网站上找到最新版本的驱动程序,并将其添加到你的项目中。

接下来,你需要使用编程语言的`import`语句将这个驱动程序导入到你的Java代码中。

5.建立数据库连接:在你的Java代码中,你需要使用JDBC驱动程序提供的API来建立数据库连接。

这包括创建一个Connection对象,并传入数据库的URL、用户名和密码。

```javaimport java.sql.*;public class Main {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/mydatabase";String user = "root";String password = "mypassword";try {Connection conn = DriverManager.getConnection(url, user, password);System.out.println("Connected to the database");} catch (SQLException e) {System.out.println("An error occurred");e.printStackTrace();}}}```在上面的代码中,`url`变量指定了数据库的URL,`user`和`password`变量指定了连接数据库所需的用户名和密码。

java jdbc的callablestatement接口常用方法-概述说明以及解释

java jdbc的callablestatement接口常用方法-概述说明以及解释

java jdbc的callablestatement接口常用方法-概述说明以及解释1.引言1.1 概述在Java开发中,JDBC(Java Database Connectivity)是一种用于与关系型数据库进行交互的标准API。

JDBC提供了一组接口和类,用于连接数据库、执行SQL语句、获取查询结果等操作。

在JDBC中,CallableStatement接口是PreparedStatement接口的子接口,用于调用存储过程和函数。

相比于PreparedStatement,CallableStatement提供了更多关于存储过程和函数的操作方法,使得开发者能够更加方便地与数据库中的存储过程和函数进行交互。

本文将介绍Java JDBC的CallableStatement接口的常用方法,帮助读者了解和掌握在Java程序中使用CallableStatement接口进行存储过程和函数的调用。

在接下来的章节中,我们将首先对CallableStatement接口进行简单的介绍,包括其作用和用途。

然后,我们将详细介绍CallableStatement 接口常用的方法,包括参数设置、执行存储过程和函数、获取返回结果等。

最后,我们将对本文进行总结,并展望一些与CallableStatement相关的未来发展方向。

通过学习本文,读者将能够了解并掌握Java JDBC的CallableStatement接口的常用方法,从而能够在实际开发中灵活地进行存储过程和函数的调用,提高数据库操作的效率和准确性。

接下来,让我们开始深入探索CallableStatement接口的奥秘吧!1.2 文章结构本文主要介绍Java JDBC的CallableStatement接口的常用方法。

文章分为引言、正文和结论三部分。

引言部分概述了文章的主题和目的。

主要介绍了Java JDBC技术是一种用于与数据库进行交互的重要技术,而CallableStatement接口是Java JDBC中用于调用数据库存储过程和函数的核心接口。

oracle存储过程调用javasource的方法

oracle存储过程调用javasource的方法

oracle存储过程调用javasource的方法Oracle存储过程调用Java方法介绍在Oracle数据库中,我们可以使用存储过程来执行一系列的数据库操作。

有时候,我们希望在存储过程中调用Java方法,以实现一些比较复杂的逻辑。

本文将详细介绍在Oracle存储过程中调用Java方法的几种方法。

方法一:使用Java Stored ProcedureJava Stored Procedure是Oracle数据库提供的一种特殊的存储过程类型,在该类型的存储过程中可以直接调用Java方法。

步骤:1.创建Java类,并将其编译成字节码文件(.class文件)。

2.将字节码文件导入到数据库中,可以使用loadjava工具或通过SQL语句执行导入。

3.创建Java Stored Procedure,将其指定为刚导入的字节码文件,并编写实际的存储过程逻辑。

4.在需要的地方调用Java Stored Procedure。

优点:•简单易用,只需创建Java类和Java Stored Procedure即可。

•可以直接访问数据库,无需通过其他方式。

缺点:•必须将Java类编译成字节码文件并导入到数据库中,稍显麻烦。

•Java Stored Procedure在数据库中运行,可能会造成数据库性能的损耗。

方法二:使用外部过程调用Java方法Oracle数据库通过提供外部过程功能,允许我们在存储过程中调用外部的Java方法。

步骤:1.将Java方法包装成Java函数或Java过程,并将其编译成动态加载库文件(.so或.dll文件)。

2.使用CREATE LIBRARY语句在数据库中创建对应的外部库。

3.创建存储过程,将其指定为调用外部库中的函数或过程,并编写实际的存储过程逻辑。

4.在需要的地方调用存储过程。

优点:•可以方便地调用已存在的Java方法,无需修改原有代码。

•外部过程在数据库外部运行,不会对数据库性能造成影响。

callablestatement oracle存储过程out参数调用

callablestatement oracle存储过程out参数调用

在Oracle中,存储过程可以有IN、OUT或IN OUT参数。

OUT 参数用于向存储过程提供输出值,这些值可以在存储过程执行后被检索。

以下是如何使用CallableStatement在Java中调用Oracle存储过程并处理OUT参数的示例:假设我们有一个Oracle存储过程,如下所示:```sqlCREATE OR REPLACE PROCEDURE get_employee_count(p_emp_count OUT NUMBER) ASBEGINSELECT COUNT(*) INTO p_emp_count FROM employees;END get_employee_count;/```现在,我们将使用Java的CallableStatement来调用此存储过程并检索输出参数的值。

```javaimport java.sql.*;public class OracleCallableStatementExample {public static void main(String[] args) {String url = "jdbc:oracle:thin:@localhost:1521:xe";String user = "username";String password = "password";try {Connection conn = DriverManager.getConnection(url, user, password);CallableStatement cstmt = conn.prepareCall("{call get_employee_count(?)}");cstmt.registerOutParameter(1,Types.INTEGER); // 注册OUT参数cstmt.execute(); // 执行存储过程int empCount = cstmt.getInt(1); // 获取OUT 参数的值System.out.println("Employee count: " + empCount);cstmt.close();conn.close();} catch (SQLException ex) {ex.printStackTrace();}}}```请注意,我们使用`registerOutParameter`方法来注册OUT参数,并使用`getInt`方法来检索OUT参数的值。

如何在Java程序中调用存储过程

如何在Java程序中调用存储过程

如何在Java程序中调用存储过程(一)?(1)使用scott/tiger用户在Oracle中创建2个表并插入几条数据。

Create table carl_test(A varchar2(200));create table carl_test1(B varchar2(200));--insert some data into carl_test1 tableinsert into carl_test1 values('carl1');insert into carl_test1 values('carl2');insert into carl_test1 values('carl3');commit;(2)使用scott/tiger用户在Oracle中创建一个测试存储过程,该存储过程有三个参数,第一个参数为输入参数,最后两个参数为输出参数。

为简单起见,没有在该存储过程中加入异常捕获机制。

CREATE OR REPLACE PROCEDURE carl_sp_test( v_monthly IN varchar2,last_inserted_rows_num OUT number,all_effected_rows_num OUT number)ISBEGIN/*删除carl_test表中所有记录*/delete carl_test;/*将删除行数赋值给总影响行数*/all_effected_rows_num := SQL%Rowcount;commit;/*将用户输入参数插入carl_test表中*/insert into carl_test(a) values(v_monthly);all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount;/*将表carl_test1中的所有记录插入到carl_test1中*/insert into carl_testselect* from carl_test1;/*获得影响记录数*/last_inserted_rows_num:=SQL%Rowcount;all_effected_rows_num:= all_effected_rows_num + SQL%Rowcount;commit;END carl_sp_test;(3)使用scott/tiger用户在SQL/Plus中测试上述存储过程SQL> variable all_effected_rows_num number;SQL> variable last_inserted_rows_num number;SQL> exec carl_sp_test('first var',:last_inserted_rows_num,:all_effected_rows_num);PL/SQL procedure successfully completedlast_inserted_rows_num---------3all_effected_rows_num---------4SQL> print last_inserted_rows_num;last_inserted_rows_num---------3SQL> print all_effected_rows_num;all_effected_rows_num---------4SQL>上述结果表示测试成功(4)使用下面的Java类TestStoreProcedure.java测试存储过程。

JAVA通过MyBatis调用MySql存储过程和函数

JAVA通过MyBatis调用MySql存储过程和函数

JAV A通过MyBatis调用MySql存储过程和函数1.引言无论是采用SPRING MVC框架开发WEB画面,还是开发需按一定时间间隔执行的批处理,都可能要调用数据库的存储过程或函数。

其间调用参数设置不正会浪费大量调试时间初学者甚至放弃使用存储过程。

本文记录了通过MyBatis调用MySql存储过程和函数的具体参数设置内容,供参考。

2.MySql存储过程例/*全公司员工下一年度带薪休假一发赋予处理*/CREATE DEFINER=`DBuser`@`%` PROCEDURE `paid_vacation_compute `( OUT p_返回值 INT(11) ,INOUT p_员工号 CHAR(3) ,p_操作者ID VARCHAR(3))PROC_START:BEGIN/* 变量声明 */DECLARE done INT; #异常退出控制变量DECLARE empNo CHAR(3); #员工号DECLARE dateHire date; #分公司就职日DECLARE workYears INT; #集团内工作年数DECLARE lastYearRemainDays FLOAT; #昨年残日数(允许以小时为单位休假)DECLARE nowYearleaveDays FLOAT; #今年休暇日数(允许以小时为单位休假)DECLARE elapseYear INT; #入集团经过年度数/* 游标声明 */#上年带薪休假数据DECLARE staffPaidVacationDaysCur CURSOR FORSELECT a.EMP_NO, #员工号a.DATE_HIRE, #入职日期a.WORK_YEARS, #工作年限b.REMAIN_DAYS # 上年带薪休假应休但未休残日数FROM T_EMPLOYEE AS a,T_PAID_VACATION AS bWHERE a. EMP_NO = b. EMP_NO/* 程序退出规定声明 */DECLARE CONTINUE HANDLER FOR NOT FOUND SET SET done = 1;DECLARE EXIT HANDLER FOR SQLWARNING SET done = 2;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINSET done = 3;ROLLBACK; #SQL异常回滚END;/* 1.输入参数妥当性检查 */IF (p_操作者 IS NULL OR p_操作者 = '') THENSET p_返回值 = 9;LEAVE PROC_START;END IF;SET done = 0;START TRANSACTION;loop_label:LOOP# 读入一条记录, 代入到各个变量中FETCH staffPaidVacationDaysCurINTO empNo, #员工号dateHire, #就职日workYears, #集团内工作年数lastYearRemainDays #昨年残日数;IF done = 1 THENLEAVE loop_label;END IF;/*根据集团内工作年限+分公司就职年限计算下一年度带薪天数*/ SET elapseYear = YEAR(current_timestamp)- Year(dateHire)+ workYears;IF elapseYear = 0 THENSET nowYearLeaveDays = 10;ELSEIF elapseYear = 1 THENSET nowYearLeaveDays = 11;ELSEIF elapseYear = 2 THENSET nowYearLeaveDays = 12;ELSEIF elapseYear = 3 THENSET nowYearLeaveDays = 14;ELSEIF elapseYear = 4 THENSET nowYearLeaveDays = 16;ELSEIF elapseYear = 5 THENSET nowYearLeaveDays = 18;ELSEIF elapseYear >= 6 THENSET nowYearLeaveDays = 20;END IF;SET done = 0;SET p_员工号= empNo;UPDATE T_PAID_VACATIONSETLAST_YEAR_REMAIN_DAYS = lastYearRemainDays,THIS_YEAR_BASE_DAYS = nowYearLeaveDays,UPDATE_DATETIME = current_timestamp,UPDATE_USER_ID = 'SYS',UPDATE_TERMINAL_ID = 'MANUAL'WHERE EMP_NO = CONVERT(empNo USING binary);IF done = 3 THENSET p_返回值 = 6;LEAVE PROC_START;END IF;END LOOP;COMMIT;END3.MySql函数例CREATE DEFINER=`DBuser`@`%` FUNCTION ` paid_vacation_compute `( p_员工号 CHAR(3) ,p_操作者ID VARCHAR(3))) RETURNS int(11)BEGIN/* 变量声明 */DECLARE done INT; #异常退出控制变量DECLARE empNo CHAR(3); #员工号DECLARE dateHire date; #分公司就职日DECLARE workYears INT; #集团内工作年数DECLARE lastYearRemainDays FLOAT; #昨年残日数(允许以小时为单位休假)DECLARE nowYearleaveDays FLOAT; #今年休暇日数(允许以小时为单位休假)DECLARE elapseYear INT; #入集团经过年度数/* 游标声明 */#上年带薪休假数据DECLARE staffPaidVacationDaysCur CURSOR FORSELECT a.EMP_NO, #员工号a.DATE_HIRE, #入职日期a.WORK_YEARS, #工作年限b.REMAIN_DAYS # 上年带薪休假应休但未休残日数FROM T_EMPLOYEE AS a,T_PAID_VACATION AS bWHERE a. EMP_NO = b. EMP_NO/* 程序退出规定声明 */DECLARE CONTINUE HANDLER FOR NOT FOUND SET SET done = 1;DECLARE EXIT HANDLER FOR SQLWARNING SET done = 2;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGINSET done = 3;ROLLBACK; #SQL异常回滚END;/* 1.输入参数妥当性检查 */IF (p_操作者 IS NULL OR p_操作者 = '') THENRETURN 9;END IF;SET done = 0;START TRANSACTION;loop_label:LOOP# 读入一条记录, 代入到各个变量中FETCH staffPaidVacationDaysCurINTO empNo, #员工号dateHire, #就职日workYears, #集团内工作年数lastYearRemainDays #昨年残日数;IF done = 1 THENLEAVE loop_label;END IF;/*根据集团内工作年限+分公司就职年限计算下一年度带薪天数*/ SET elapseYear = YEAR(current_timestamp)- Year(dateHire)+ workYears;IF elapseYear = 0 THENSET nowYearLeaveDays = 10;ELSEIF elapseYear = 1 THENSET nowYearLeaveDays = 11;ELSEIF elapseYear = 2 THENSET nowYearLeaveDays = 12;ELSEIF elapseYear = 3 THENSET nowYearLeaveDays = 14;ELSEIF elapseYear = 4 THENSET nowYearLeaveDays = 16;ELSEIF elapseYear = 5 THENSET nowYearLeaveDays = 18;ELSEIF elapseYear >= 6 THENSET nowYearLeaveDays = 20;END IF;SET done = 0;SET p_员工号= empNo;UPDATE T_PAID_VACATIONSETLAST_YEAR_REMAIN_DAYS = lastYearRemainDays,THIS_YEAR_BASE_DAYS = nowYearLeaveDays,UPDATE_DATETIME = current_timestamp,UPDATE_USER_ID = 'SYS',UPDATE_TERMINAL_ID = 'MANUAL'WHERE EMP_NO = CONVERT(empNo USING binary);IF done = 3 THENRETURN 6;END IF;END LOOP;COMMIT;END4.MySql存储过程调用时的iBatis用Mapper例BaseInfoEditMapper.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-////DTD Mapper 3.0//EN""/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.xxx.web.mapper.base_info_edit"><select id="VacationProcedure"parameterType="VacationBean"statementType="CALLABLE"> { call paid_vacation_compute (#{ReturnValue,javaType=INTEGER, jdbcType=INTEGER, mode=OUT},#{StaffNumber,javaType=String, jdbcType=CHAR, mode=INOUT},#{HireDate,javaType=String, jdbcType=VARCHAR, mode=IN},#{OperateID,javaType=String, jdbcType=VARCHAR, mode=IN})}</select></mapper>5.MySql函数调用时的iBatis用Mapper例BaseInfoEditMapper.xml<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapperPUBLIC"-////DTD Mapper 3.0//EN""/dtd/ibatis-3-mapper.dtd"><mapper namespace="com.xxx.web.mapper.base_info_edit"><select id="VacationProcedure"parameterType="VacationBean"statementType="CALLABLE"> { #{ReturnValue,javaType=INTEGER, jdbcType=INTEGER, mode=OUT} =call paid_vacation_compute (#{StaffNumber,javaType=String, jdbcType=CHAR, mode=IN},#{HireDate,javaType=String, jdbcType=VARCHAR, mode=IN},#{OperateID,javaType=String, jdbcType=VARCHAR, mode=IN} )} </select></mapper>6.JAVA调用例1(MySql存储过程和函数相同)package com.XXX.impl;import java.util.ArrayList;import java.util.List;import com.XXX.web.bean.VacationCreateBean;import com.XXX.web.dao.BaseInfoEditDAO;import com.XXX.web.util.BasicSqlSupport;public class BaseInfoEditDAOImpl extends BasicSqlSupport implements BaseInfoEditDAO { public boolean addBaseInfo(BaseInfoEditBean objUserInfo) throws Exception {boolean blnFlag=false;//成功FLAG;//全公司员工下一年度带薪休假一发赋予处理VacationCreateBean objVacationCreateBean = new VacationCreateBean();objVacationCreateBean.setStaffNumber(objUserInfo.getSTAFF_NUMBER());objVacationCreateBean.setHireDate(objUserInfo.getDATE_HIRE().toString());objVacationCreateBean.setOperateID(objUserInfo.getCREATE_USER_ID());objVacationCreateBean.setDhcWorkYearsShinKi(objUserInfo.getDHC_WORK_YEARS());String returnValue = (String)this.session.selectOne("com.XXX.web.mapper.base_info_edit.VacationProcedure", objVacationCreateBean);//System.out.println("staffNumber=" + objVacationCreateBean.getStaffNumber());//System.out.println("result=" + objVacationCreateBean.getReturnValue());//System.out.println("returnValue=" + returnValue);//追加結果の判断blnFlag=true;return blnFlag;}}7.処理DAO接口package com.XXX.web.dao;import java.util.List;import com.XXX.web.bean.BaseInfoEditBean;/*** 员工基本信息画面の処理DAO*/public interface BaseInfoEditDAO {public List<BaseInfoEditBean> selectAuthoriyList() throws Exception;public String selectStaffId() throws Exception;public int selectOpetateTimeNum(String strStaffNumber) throws Exception;public boolean addBaseInfo(BaseInfoEditBean objUserInfo) throws Exception;public boolean updateBaseInfo(BaseInfoEditBean objUserInfo) throws Exception;public BaseInfoEditBean searchBaseInfo(String strStaffNumber) throws Exception; }8.共同処理package com.XXX.web.util;import org.apache.ibatis.session.SqlSession;public class BasicSqlSupport{protected SqlSession session;public SqlSession getSession() {return session;}public void setSession(SqlSession session) {this.session = session;} }9. DAO与MAP间的交互BEANpackage com.XXX.web.bean;import java.io.Serializable;public class VacationCreateBean implements Serializable{private int ReturnValue;private String StaffNumber;private String HireDate;private String OperateID;private int WorkYearsShinKi;public int getReturnValue() {return ReturnValue;}public void setReturnValue(int returnValue) {ReturnValue = returnValue;}public String getStaffNumber() {return StaffNumber;}public void setStaffNumber(String staffNumber) {StaffNumber = staffNumber;}public String getHireDate() {return HireDate;}public void setHireDate(String hireDate) {HireDate = hireDate;}public String getOperateID() {return OperateID;}public void setOperateID(String operateID) {OperateID = operateID;}public int getDhcWorkYearsShinKi() {return dhcWorkYearsShinKi;}public void setDhcWorkYearsShinKi(int dhcWorkYearsShinKi) {this.dhcWorkYearsShinKi = dhcWorkYearsShinKi;}}10.通过MAIN函数进行调用package com.ohc.pms.batch;import java.io.FileInputStream;import java.io.IOException;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class VacationCreate {/**JDBC驱动名 */static String jdbcDriver = "com.mysql.jdbc.Driver";/**DB URL */static String dbURL = "jdbc:mysql://172.999.999.35:3306/empdb";/** DB用户名 */static String user = "empuser";/**DB密码 */static String pass = "empuser123";/**日志输出 */static protected Logger log = Logger.getLogger(VacationCreate.class );public static void main(String[] args) {Connection conn = null;CallableStatement stmt = null;try{PropertyConfigurator.configure(System.getProperty("user.dir") + "\\" + "log4j.properties");("実行路径:" + System.getProperty("user.dir"));String fileName = "jdbc.properties"; // 属性文件名Properties conf = new Properties();try {conf.load(new FileInputStream(System.getProperty("user.dir") + "\\" + "jdbc.properties"));} catch (IOException e) {System.err.println("Cannot open " + fileName + ".");e.printStackTrace();System.exit(-1); // 程序終了}// 读入jdbcDriver = conf.getProperty("driver");dbURL = conf.getProperty("url");user = conf.getProperty("user");pass = conf.getProperty("password");//JDBC driver登録Class.forName("com.mysql.jdbc.Driver");("DB连接。

Java存储过程在异构数据库访问中的应用

Java存储过程在异构数据库访问中的应用

收稿 1期 :0 9—1 5 20 t 0—2 . 1
作者简介 : 孙
璐 (9 8 , , 16 一) 男 江苏镇 江人 , 华南理工大学 自动化科学与工程学院讲师
基金项 目: 广东省科技计划基金 资助项 目(0 4 13 1 1 . 20 A 0 0 ) 1 0
14 9
武汉 理工大学 学报 ・ 信息与管理工程版
务数据 的共 享 , 要 用 到异 构数 据 服 务技 术 就

即使是同一种数据库平 台, 一旦分布在不同的服务 器上或具有不同的安全边界 , 也需要精心设计数据 共享 的实现手 段 _ 。绝 大 多数 的异 构数 据服 务 技 3 J 术都是以数据提供者信任数据使用者为前提设计 的。以国内主流 的数据 库平台 Oal rc e为例 , 的 常用
() 2 建立异构数据库 的数据库快照 。利用数 据库复制技术在 目标数 据库 中建立 源数 据的快 照, 然后透明地使用源数据, 但该方法需要在源、 目的数据库问进行复杂的配置 , 且实时性不强。 ( ) 用 Oal 构 服 务 连 接 。Oal 构 3利 rc e异 rc e异
服务是 集 成在 Oal 据库 软 件 中 的功 能 ( r— rce数 Oa
Ap . 01 r2 0
文 章 编 号 :0 7—14 2 1 ) 2— 13— 4 10 4 X(0 0 0 0 9 0
文献 标 志码 : A
Jv a a存 储 过 程 在 异 构 数 据 库 访 问 中 的 应 用
孙 璐
( 南理工大学 自动化科学与工程学院 , 华 广东 广州 5 ቤተ መጻሕፍቲ ባይዱ 4 ) 16 1
第3卷 第2 2 期 21 00年4 月
武 汉 理 工 大 学 学 报 ・信 息 与 管 理 工 程 版 J U N LO T IF R A IN&M N G M N N IE RN ) O R A FWU (N O M TO A A E E TE GN E IG

类型长度大于最大值(Java调用存储过程)

类型长度大于最大值(Java调用存储过程)
if (retCode == -1) { // 如果出错时,返回错误信息
System.out.println("报错!");
log
.error("retCode:" + retCode + " ; " + "retMsg:"
+ retMsg);
java.sql.SQLException: 类型长度大于最大值
当时仔细检查每个参数变量的类型、长度,都没有问题,况且在测试工程中都测试通过了。
当时的java代码调用存储过程如下:
Connection conn = null;
ResultSet rst = null;
CallableStatement stmt = null;
+ ";-- endOrderCount:" + endOrderCount + "; --newOrderCount" + newOrderCount + "; ");
}
}
DbUtil.closeConnection(conn);
如下异常:
java.sql.SQLException: 类型长度大于最大值
} else {
rst = ((OracleCallableStatement) stmt).getCursor(3);
// 对结果进行输出 while来自(rst.next()) {
orderCount = rst.getLong(1);// 订购次数
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:2978)

mybatis调用存储过程获的几种写法

mybatis调用存储过程获的几种写法

mybatis调用存储过程获的几种写法MyBatis 是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。

MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果集。

MyBatis 可以使用简单的XML 或注解来配置和映射原生信息,将接口和Java 的POJOs(Plain Old Java Objects, 普通的Java 对象)映射成数据库中的记录。

当使用MyBatis 调用存储过程时,有几种常见的写法。

以下是一些例子:1. 使用XML 映射器调用存储过程你可以在MyBatis 的XML 映射器文件中定义一个调用存储过程的select、insert、update 或delete 元素。

例如:xml<mapper namespace="com.example.MyMapper"><select id="callStoredProc" statementType="CALLABLE">{CALL your_stored_procedure(#{param1, mode=IN, jdbcType=VARCHAR}, #{param2, mode=OUT, jdbcType=INTEGER})} </select></mapper>在这个例子中,your_stored_procedure 是存储过程的名称,param1 和param2 是存储过程的参数。

mode=IN 表示该参数是输入参数,mode=OUT 表示该参数是输出参数。

2. 使用注解调用存储过程你也可以使用MyBatis 的注解来调用存储过程,而不是使用XML 映射器。

例如:java@Mapperpublic interface MyMapper {@Select("{CALL your_stored_procedure(#{param1, mode=IN, jdbcType=VARCHAR}, #{param2, mode=OUT, jdbcType=INTEGER})}") @Options(statementType = StatementType.CALLABLE)void callStoredProc(String param1, @Param("param2") Integer param2);}在这个例子中,@Select 注解用于定义调用存储过程的SQL 语句,@Options 注解用于指定该语句的类型为CALLABLE,表示它是一个调用存储过程的语句。

JAVA调用存储过程

JAVA调用存储过程

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

已储存过程储存在数据库中。

对已储存过程的调用是CallableStatement对象所含的内容。

这种调用是用一种换码语法来写的,有两种形式:一种形式带结果参,另一种形式不带结果参数。

结果参数是一种输出(OUT)参数,是已储存过程的返回值。

两种形式都可带有数量可变的输入(IN参数)、输出(OUT参数)或输入和输出(INOUT参数)的参数。

问号将用作参数的占位符。

在JDBC中调用已储存过程的语法如下所示。

注意,方括号表示其间的内容是可选项;方括号本身并非语法的组成部份。

{call过程名[(?,?,...)]}返回结果参数的过程的语法为:{?=call过程名[(?,?,...)]}不带参数的已储存过程的语法类似:{call过程名}通常,创建CallableStatement对象的人应当知道所用的DBMS是支持已储存过程的,并且知道这些过程都是些什么。

然而,如果需要检查,多种DatabaseMetaData方法都可以提供这样的信息。

例如,如果DBMS支持已储存过程的调用,则supportsStoredProcedures方法将返回true,而getProcedures方法将返回对已储存过程的描述。

CallableStatement继承Statement的方法(它们用于处理一般的SQL语句),还继承了PreparedStatement的方法(它们用于处理IN参)。

CallableStatement中定义的所有方法都用于处理OUT参数或INOUT参数的输出部分:注册OUT参数的JDBC类型(一般SQL类型)、从这些参数中检索结果,或者检查所返回的值是否为JDBC NULL。

1、创建CallableStatement对象CallableStatement对象是用Connection方法prepareCall创建的。

Teller8.8开发步骤

Teller8.8开发步骤

Teller8.8开发步骤一、部署应用1.部署weblogic。

(1)使用totalcmd704工具从服务器中下载wls1033_genneric.jar。

(2)打开命令行,使用-java jar命令解压,在沙盒盘新建一个文件夹命名为Oracle,将weblogic部署在该文件夹下,解压完成后选择启动服务。

(3)使用weblogic创建一个域,用来部署SmartTeller,域名为teller_7001, 登录用户名为weblogic,密码为password123,端口号选择为7001。

(4)使用weblogic创建一个域,用来部署SmartEnsemble,域名为cbsd_7002,登录用户名为weblogic,密码为password123,端口号选择为7002。

2.部署SmartTeller(1)启动teller_7001域,路径:H:/Oracle/MiddleWare/user_projects/domains/ teller_7001/startWeblogic.bat(2)打开浏览器,登录http://127.0.0.1:7001/console(3)部署数据源,左侧菜单,选择JDBC→数据源→新建:①teller:SmartTeller的数据源②sso:登录SmartTeller时密码随便填写(4)使用totalcmd704工具从服务器中下载SmartTeller,解压SmartTeller(5)在控制台中选择部署SmartTeller。

选择路径,点击安装。

3.部署SmartEnsemble(1)启动teller_7001域,路径:H:/Oracle/MiddleWare/user_projects/domains/ teller_7002/startWeblogic.bat(2)打开浏览器,登录http://127.0.0.1:7002/console(3)部署数据源:①cbsd_batch②cbsd_listener③cbsd_online④ensemble(4)使用totalcmd704工具从服务器中下载SmartEnsemble,解压SmartEnsemble,打开解压的文件,找到web.xml,修改SmartEnsemble的路径为本地的。

银行java开发笔试面试题13道(含答案)

银行java开发笔试面试题13道(含答案)

银⾏java开发笔试⾯试题13道(含答案)1、在多线程环境中使⽤HashMap会有什么问题?在什么情况下使⽤get()⽅法会产⽣⽆限循环?HashMap本⾝没有什么问题,有没有问题取决于你是如何使⽤它的。

⽐如,你在⼀个线程⾥初始化了⼀个HashMap然后在多个其他线程⾥对其进⾏读取,这肯定没有任何问题。

有个例⼦就是使⽤HashMap来存储系统配置项。

当有多于⼀个线程对HashMap进⾏修改操作的时候才会真正产⽣问题,⽐如增加、删除、更新键值对的时候。

因为put()操作可以造成重新分配存储⼤⼩(re-sizeing)的动作,因此有可能造成⽆限循环的发⽣,所以这时需要使⽤Hashtable或者ConcurrentHashMap,⽽后者更优。

2、不重写Bean的hashCode()⽅法是否会对性能带来影响?这个问题⾮常好,每个⼈可能都会有⾃⼰的体会。

按照我掌握的知识来说,如果⼀个计算hash的⽅法写得不好,直接的影响是,当向HashMap中添加元素的时候会更频繁地造成冲突,因此最终增加了耗时。

但是⾃从Java 8开始,这种影响不再像前⼏个版本那样显著了,因为当冲突的发⽣超出了⼀定的限度之后,链表类的实现将会被替换成⼆叉树(binary tree)实现,这时你仍可以得到O(logN)的开销,优于链表类的O(n)。

3、对于⼀个不可修改的类,它的每个对象是不是都必须声明成final的?不尽然,因为你可以通过将成员声明成⾮final且private,并且不要在除了构造函数的其他地⽅来修改它。

不要为它们提供setter⽅法,同时不会通过任何函数泄露出对此成员的引⽤。

需要记住的是,把对象声明成final仅仅保证了它不会被重新赋上另外⼀个值,你仍然可以通过此引⽤来修改引⽤对象的属性。

这⼀点是关键,⾯试官通常喜欢听到你强调这⼀点。

4、String的substring()⽅法内部是如何实现的?⼜⼀个Java⾯试的好问题,你应该答出“substring⽅法通过原字符串创建了⼀个新的对象”,否则你的回答肯定是不能令⼈满意的。

如何实现Java对0racle存储过程的调用

如何实现Java对0racle存储过程的调用
的作 用
s mts t tig 1 v id p n ) t .e S r ( , n e t o ; n
smt x c t U d t ( t . e u e p ae) e :
/ 的结果集 : / 取
R s l e =( a l atb S a e n) mtg t us ) e u S t s ( ce l l t t me t t ) e C ro : t r Or C a e s .
P /Q 中 创 建 Jv O R E 对 象 . 然 后 再 把 Jv O R E LS L aaS U C aa S U C 对 象 转 换 成 P /Q LS L存 储 过 程 。 因 为 Jv aa访 问 操 作 系 统 资 源
的 接 口 相 当 丰 富 .基 本 都 能 满 足 各 种 业 务 场 景 的 需 求 , 比 如 访 问 文 件 、调 用 动 态 链 接 库 等 ,现 在 实 现 一 个 具 体 应 用 , 就 是 访 问操 作 系 统 的 目录 树 及 其 下 的 文 件 , 主 要 起 个 抛 砖 引 玉 ‘ r cet i @1 4.04 9 1 2 :rl c t"tg r) , "
或 用 动 态 的 S L语 句 来 对 数 据 库 对 象 的 控 制 操 作 ,如 创 建 或 Q
删 除 数 据 库 表 、数 据 库 视 图 等 数 据 库 对 象 。 但 是 在 有 些 业 务 场 景 中 , 需 要 在 P /Q 中 直 接 访 问 或 控 制 操 作 系 统 的 一 些 LS L 资 源 ,操 作 系 统 的 资 源 有 很 多 , 比 如 文 件 、设 备 、操 作 系 统 的 A I 等 , 以 实 现 一 些 特 定 的 功 能 需 求 ,实 现 这 种 功 能 的 P等

java sqlserver中存储过程return返回值处理

java sqlserver中存储过程return返回值处理

java sqlserver中存储过程return返回值处理Java与SQL Server中存储过程的返回值处理一、介绍存储过程是一组预先编译的SQL语句集合,可以被视为一种数据库对象,用于执行一系列数据库操作。

在Java应用程序中与SQL Server数据库交互时,经常需要调用存储过程并处理其返回值。

本文将详细介绍在Java中如何调用SQL Server存储过程,并处理其返回值。

我们将按照以下步骤逐一分析。

二、创建存储过程首先,我们需要在SQL Server数据库中创建一个存储过程,用于演示和测试。

假设我们创建一个简单的存储过程,用于根据输入参数获取员工的姓名。

CREATE PROCEDURE GetEmployeeName@EmployeeID INT,@EmployeeName VARCHAR(100) OUTPUTASBEGINSELECT @EmployeeName = EmployeeNameFROM EmployeeWHERE EmployeeID = @EmployeeIDEND这个存储过程接受一个输入参数@EmployeeID,以及一个输出参数@EmployeeName。

它根据输入的员工ID查询数据库,将结果赋值给输出参数@EmployeeName。

三、Java代码中调用存储过程现在,我们可以在Java代码中调用SQL Server中的存储过程。

首先,我们需要建立与数据库的连接。

1. 导入相关的包和类import java.sql.*;2. 建立数据库连接String connectionString ="jdbc:sqlserver:localhost:1433;databaseName=YourDatabase;user=Your User;password=YourPassword";Connection connection =DriverManager.getConnection(connectionString);在上面的代码中,我们使用了JDBC驱动程序建立与数据库的连接。

java把内容写入txt文件

java把内容写入txt文件

java把内容写入txt文件在Java编程中,我们经常需要将程序中生成的内容写入到txt 文件中,以便进行持久化保存或者进行数据交换。

本文将介绍如何使用Java实现把内容写入txt文件的操作。

首先,我们需要使用Java中的File类和FileWriter类来实现文件写入操作。

File类用于表示文件或目录的路径名,而FileWriter类则用于写入字符流。

我们可以通过以下代码来创建一个新的txt文件并写入内容:```java。

import java.io.File;import java.io.FileWriter;import java.io.IOException;public class WriteToFile {。

public static void main(String[] args) {。

String content = "这是要写入到txt文件中的内容";try {。

File file = new File("output.txt");FileWriter writer = new FileWriter(file);writer.write(content);writer.close();System.out.println("内容已成功写入到文件中");} catch (IOException e) {。

e.printStackTrace();}。

}。

}。

```。

在上面的代码中,我们首先定义了一个字符串变量content,用于存储要写入到txt文件中的内容。

然后,我们创建了一个File 对象来表示要写入的文件,这里我们将文件命名为output.txt。

接着,我们使用FileWriter类来创建一个文件写入流,并调用write 方法将内容写入到文件中。

最后,记得要关闭文件写入流。

除了使用FileWriter类,我们还可以使用BufferedWriter类来提高文件写入的效率。

sybase数据库存储过程调用外部JAVA

sybase数据库存储过程调用外部JAVA

sybase数据库存储过程调用外部JAVA2010-01 老鸟现在基本上所有的数据库都支持存储过程嵌入JAVA程序,以便实现在没有系统服务器的情况定时调度任务。

对于不同的数据库,存储过程和调用方法都不相同。

下面主要以Sybase 举例。

对于这部分,教程上的说的及其含糊以及混乱。

我用的版本是12.7.它内置的JDK版本是1.3.所以我们需要的工具是JDK1.3和eclipse2.1版本。

用eclipse的目的不是为了编译,而是测试我们写的JAVA类是否能够正常执行。

因为在数据库环境下,对JAVA的错误没有任何提示,通常的提示是找不到自定义的类。

首先编写一个正常的JAVA类import java.io.File;import java.io.IOException;public class Invoice {public static String lineItem1Description;public static double lineItem1Cost;public static String lineItem2Description;public static double lineItem2Cost;public static double totalSum(){double runningsum;double taxfactor=1+Invoice.rateOfTaxation();runningsum=lineItem1Cost+lineItem2Cost;runningsum=runningsum*taxfactor;return runningsum;}public static double rateOfTaxation(){double rate;rate=.15;return rate;}public static void init(String item1desc,double item1cost,String item2desc,double item2cost){lineItem1Description=item1desc;lineItem1Cost=item1cost;lineItem2Description=item2desc;lineItem2Cost=item2cost;}public static String getLineItem1Description(){return"你好";}public static double getLineItem1Cost(){return lineItem1Cost;}public static String getLineItem2Description(){return"他好";}public static double getLineItem2Cost(){return lineItem2Cost;}}如果需要另外的JAR,必须在Sybase central java editon里把JAR导入。

java存储过程写法

java存储过程写法

java存储过程写法在Java中,可以通过JDBC(Java Database Connectivity)来调用和执行存储过程。

下面我将从多个角度来介绍Java中存储过程的写法。

1. 使用CallableStatement:在Java中,可以使用CallableStatement来调用存储过程。

首先,你需要获取数据库连接,然后创建一个CallableStatement对象,并设置存储过程的参数,最后执行存储过程。

例如:java.Connection conn = DriverManager.getConnection(url, username, password);CallableStatement cs = conn.prepareCall("{callyour_stored_procedure(?, ?)}");cs.setInt(1, parameter1);cs.setString(2, parameter2);cs.execute();2. 使用存储过程注解:一些持久层框架(如MyBatis)提供了注解的方式来调用存储过程。

你可以在Java方法上使用注解来指定要调用的存储过程的名称和参数。

例如(使用MyBatis的@Select注解):java.@Select("{call your_stored_procedure(#{parameter1, mode=IN, jdbcType=INTEGER}, #{parameter2, mode=IN, jdbcType=VARCHAR})}")。

void callStoredProcedure(int parameter1, Stringparameter2);3. 使用存储过程的ORM映射:一些ORM框架(如Hibernate)允许你将存储过程映射为Java方法,然后直接调用这些方法来执行存储过程。

jdbc调用达梦存储过程

jdbc调用达梦存储过程

jdbc调用达梦存储过程要通过JDBC调用达梦存储过程,您需要执行以下步骤:1. 导入必要的JDBC库文件:从达梦官方网站下载并导入适用于您的Java版本和达梦数据库版本的JDBC 驱动程序。

2. 建立数据库连接:使用驱动程序管理器类(`DriverManager`),使用提供的JDBC URL、用户名和密码建立与达梦数据库的连接。

例如:```javaString jdbcUrl = "jdbc:dmi://localhost:5236/dmdb";String username = "your_username";String password = "your_password";Connection connection =DriverManager.getConnection(jdbcUrl, username, password);```3. 创建可调用的语句对象:使用连接对象(`connection`)创建`CallableStatement`对象,并准备调用存储过程。

例如:```javaString callStatement = "{callyour_stored_procedure(?, ?)}"; CallableStatement callableStatement = connection.prepareCall(callStatement);```4. 设置输入和输出参数:根据存储过程定义,使用`callableStatement`的`setXXX`方法设置输入参数的值,以及注册输出参数的类型。

例如,如果存储过程有两个参数,一个输入参数和一个输出参数:```javacallableStatement.setString(1, "input_value"); callableStatement.registerOutParameter(2, Types.INTEGER);```5. 执行存储过程:使用`callableStatement`的`execute()`方法执行存储过程。

oracle的存储过程写法

oracle的存储过程写法

oracle的存储过程写法Oracle的存储过程写法Oracle是一款非常常用的关系型数据库管理系统,其存储过程是一种非常重要的功能。

下面我们来看一下Oracle的存储过程写法。

1. 创建存储过程在Oracle中,创建存储过程需要使用CREATE PROCEDURE语句。

下面是一个简单的例子:CREATE PROCEDURE my_procedureASBEGIN-- 存储过程的代码END;在这个例子中,我们创建了一个名为my_procedure的存储过程,其中存储过程的代码写在BEGIN和END之间。

2. 存储过程的参数存储过程可以接受参数,这些参数可以是输入参数、输出参数或输入/输出参数。

下面是一个接受输入参数的例子:CREATE PROCEDURE my_procedure(input_param IN VARCHAR2)ASBEGIN-- 存储过程的代码在这个例子中,我们定义了一个名为input_param的输入参数。

3. 存储过程的返回值存储过程可以返回一个值,这个值可以是一个标量值或一个游标。

下面是一个返回标量值的例子:CREATE PROCEDURE my_procedure(output_param OUT NUMBER)ASBEGINSELECT COUNT(*) INTO output_param FROM my_table;END;在这个例子中,我们定义了一个名为output_param的输出参数,并将一个查询结果赋值给这个参数。

4. 存储过程的异常处理存储过程中可能会出现异常,我们需要对这些异常进行处理。

下面是一个异常处理的例子:CREATE PROCEDURE my_procedureASBEGINBEGIN-- 存储过程的代码EXCEPTIONWHEN OTHERS THEN-- 异常处理的代码END;在这个例子中,我们使用BEGIN和END将存储过程的代码括起来,并使用EXCEPTION关键字来处理异常。

java保存数组到数据库的方法

java保存数组到数据库的方法

在Java编程中,我们经常需要将数组中的数据保存到数据库中。

这篇文章将介绍一些常见的方法和技巧,来帮助你在Java中实现这一功能。

一、使用JDBC保存数组数据到数据库1. JDBC(Java Database Connectivity)是Java用于与数据库进行连接和操作的一套API。

我们可以使用JDBC来将数组中的数据保存到数据库中。

2. 我们需要在Java程序中引入JDBC相关的包,然后通过JDBC连接数据库、创建SQL语句,并执行插入操作。

3. 对于数组,我们通常需要使用循环来逐个将数组中的数据插入到数据库中。

这里需要注意的是,不同的数据库可能对于插入数据的方式有一些差异,需要根据具体的数据库类型来编写相应的SQL语句。

4. 在使用JDBC操作数据库的过程中,我们需要注意异常处理和资源释放,以确保程序的稳定性和性能。

二、使用ORM框架保存数组数据到数据库1. 除了直接使用JDBC操作数据库外,我们还可以通过ORM (Object-Relational Mapping)框架来简化数据库操作。

ORM框架可以将Java对象与数据库表进行映射,从而实现对象的持久化。

2. 使用ORM框架保存数组数据到数据库,通常需要首先定义好对应的实体类,并在实体类中设置数组属性。

3. 我们需要配置ORM框架的映射规则,以及数据库连接等相关信息。

4. 我们可以通过ORM框架提供的API来操作数据库,将数组中的数据保存到数据库中。

ORM框架会帮助我们生成对应的SQL语句,并执行数据库操作。

5. 在使用ORM框架时,我们需要注意配置文件的编写、映射关系的设置以及性能优化等方面。

三、使用Spring Data JPA保存数组数据到数据库1. Spring Data JPA是Spring框架中的一个子项目,它提供了一种简化数据库访问的方式。

通过Spring Data JPA,我们可以很方便地将数组数据保存到数据库中。

2. 我们需要在Spring项目中引入Spring Data JPA相关的依赖,然后配置好数据源和实体类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java中对存储过程的调用一:Java如何实现对存储过程的调用:A:不带输出参数的---------------不带输出参数的----------------------------------create procedure getsum@n int =0<--此处为参数-->asdeclare @sum int<--定义变量-->declare @i intset @sum=0set @i=0while @i<=@n beginset @sum=@sum+@iset @i=@i+1endprint 'the sum is '+ltrim(rtrim(str(@sum)))--------------在SQL中执行:--------------------exec getsum 100------------在JAVA中调用:---------------------JAVA可以调用但是在JAVA程序却不能去显示该存储过程的结果因为上面的存储过程的参数类型int 传递方式是in(按值)方式import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");//创建存储过程的对象CallableStatement c=conn.prepareCall("{call getsum(?)}");//给存储过程的参数设置值c.setInt(1,100); //将第一个参数的值设置成100//执行存储过程c.execute();conn.close();}}B:带输出参数的1:返回int-------------------------带输出参数的----------------alter procedure getsum@n int =0,@result int outputasdeclare @sum intdeclare @i intset @sum=0set @i=0while @i<=@n beginset @sum=@sum+@iset @i=@i+1endset @result=@sum-------------------在查询分析器中执行------------declare @myResult intexec getsum 100,@myResult outputprint @myResult------------在JAVA中调用---------------------import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");//创建存储过程的对象CallableStatement c=conn.prepareCall("{call getsum(?,?)}");//给存储过程的第一个参数设置值c.setInt(1,100);//注册存储过程的第二个参数c.registerOutParameter(2,java.sql.Types.INTEGER);//执行存储过程c.execute();//得到存储过程的输出参数值System.out.println (c.getInt(2));conn.close();}}2:返回varchar----------------存储过程带游标-------------------在存储过程中带游标使用游标不停的遍历orderid create procedure CursorIntoProcedure@pname varchar(8000) outputas--定义游标declare cur cursor for select orderid from orders--定义一个变量来接收游标的值declare @v varchar(5)--打开游标open curset @pname=''--给@pname初值--提取游标的值fetch next from cur into @vwhile @@fetch_status=0beginset @pname=@pname+';'+@vfetch next from cur into @vendprint @pname--关闭游标close cur--销毁游标deallocate cur------------执行存储过程--------------exec CursorIntoProcedure ''--------------JAVA调用------------------import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa",""); CallableStatement c=conn.prepareCall("{call CursorIntoProcedure(?)}");c.registerOutParameter(1,java.sql.Types.VARCHAR);c.execute();System.out.println (c.getString(1));conn.close();}}C:删除数据的存储过程------------------存储过程--------------------------drop table 学生基本信息表create table 学生基本信息表(StuID int primary key,StuName varchar(10),StuAddress varchar(20))insert into 学生基本信息表values(1,'三毛','wuhan')insert into 学生基本信息表values(2,'三毛','wuhan')create table 学生成绩表(StuID int,Chinese int,PyhSics intforeign key(StuID) references 学生基本信息表(StuID)on delete cascadeon update cascade)insert into 学生成绩表values(1,99,100)insert into 学生成绩表values(2,99,100)--创建存储过程create procedure delePro@StuID intasdelete from 学生基本信息表where StuID=@StuID--创建完毕exec delePro 1 --执行存储过程--创建存储过程create procedure seleProasselect * from 学生基本信息表--创建完毕exec selePro --执行存储过程------------------在JAVA中调用----------------import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");//创建存储过程的对象CallableStatement c=conn.prepareCall("{call delePro(?)}");c.setInt(1,1);c.execute();c=conn.prepareCall("{call selePro}");ResultSet rs=c.executeQuery();while(rs.next()){String Stu=rs.getString("StuID");String name=rs.getString("StuName");String add=rs.getString("StuAddress");System.out.println ("学号:"+" "+"姓名:"+" "+"地址");System.out.println (Stu+" "+name+" "+add);}c.close();}}D:修改数据的存储过程---------------------创建存储过程---------------------@StuID int,@StuName varchar(10)asupdate 学生基本信息表set StuName=@StuName where StuID=@StuID-------------执行存储过程-------------------------exec ModPro 2,'四毛'---------------JAVA调用存储过程--------------------import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");//创建存储过程的对象CallableStatement c=conn.prepareCall("{call ModPro(?,?)}");c.setInt(1,2);c.setString(2,"美女");c.execute();c=conn.prepareCall("{call selePro}");ResultSet rs=c.executeQuery();while(rs.next()){String Stu=rs.getString("StuID");String name=rs.getString("StuName");String add=rs.getString("StuAddress");System.out.println ("学号:"+" "+"姓名:"+" "+"地址");System.out.println (Stu+" "+name+" "+add);}c.close();}}E:查询数据的存储过程(模糊查询)-----------------存储过程---------------------@cust varchar(10)asselect customerid from orders where customeridlike '%'+@cust+'%'---------------执行---------------------------execute FindCusts 'alfki'-------------在JAVA中调用--------------------------import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");//创建存储过程的对象CallableStatement c=conn.prepareCall("{call FindCusts(?)}");c.setString(1,"Tom");ResultSet rs=c.executeQuery();while(rs.next()){String cust=rs.getString("customerid");System.out.println (cust);}c.close();}}F:增加数据的存储过程------------存储过程--------------------create procedure InsertPro@StuID int,@StuName varchar(10),@StuAddress varchar(20)asinsert into 学生基本信息表values(@StuID,@StuName,@StuAddress)-----------调用存储过程---------------exec InsertPro 5,'555','555'-----------在JAVA中执行-------------import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");//创建存储过程的对象CallableStatement c=conn.prepareCall("{call InsertPro(?,?,?)}");c.setInt(1,6);c.setString(2,"Liu");c.setString(3,"wuhan");c.execute();c=conn.prepareCall("{call selePro}");ResultSet rs=c.executeQuery();while(rs.next()){String stuid=rs.getString("StuID");String name=rs.getString("StuName");String address=rs.getString("StuAddress");System.out.println (stuid+" "+name+" "+address);}c.close();}}G:在JAVA中创建存储过程并且在JAVA中直接调用import java.sql.*;public class ProcedureTest{public static void main(String args[]) throws Exception{//加载驱动DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());//获得连接Connection conn=DriverManager.getConnection("jdbc:odbc:mydata","sa","");Statement stmt=conn.createStatement();//在JAVA中创建存储过程stmt.executeUpdate("create procedure OOP as select * from 学生成绩表"); CallableStatement c=conn.prepareCall("{call OOP}");ResultSet rs=c.executeQuery();while(rs.next()){String chinese=rs.getString("Chinese");System.out.println (chinese);}conn.close();}}。

相关文档
最新文档