java调用存储过程返回结果集,返回字符串

合集下载

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中用于调用数据库存储过程和函数的核心接口。

CallableStatement调用Oracle存储过程返回结果集(ResultSet)

CallableStatement调用Oracle存储过程返回结果集(ResultSet)

Java(CallableStatement)调用Oracle存储过程返回结果集(ResultSet) 一:无返回值的存储过程调用存储过程:CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) ASBEGININSERT INTO DBO.EMP (ID,NAME) VALUES (PARA1, PARA2);END PRO_1;Java代码:package com.icesoft.service;import java.sql.*;import java.sql.ResultSet;public class CallProcedureTest1 {public CallProcedureTest1() {super();}public static void main(String[] args) {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl ";String user = "admin";String pwd = "password";Connection conn = null;CallableStatement cs = null;ResultSet rs = null;try {Class.forName(driver);conn = DriverManager.getConnection(url, user, pwd);cs = conn.prepareCall("{ call DBO.PRO_1(?,?) }");cs.setString(1, "10");cs.setString(2, "Peter");cs.execute();} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {if (rs != null) {rs.close();}if (cs != null) {cs.close();}if (conn != null) {conn.close();}} catch (SQLException e) {}}}}备注,存储过程PRO_1中用到了表EMP(ID, NAME),需事先建好二:有返回值的存储过程(非结果集)存储过程:CREATE OR REPLACE PROCEDURE PRO_2(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) ASBEGINSELECT INTO PARA2 FROM EMP WHERE ID= PARA1;END PRO_2;Java代码:package com.icesoft.service;import java.sql.*;public class CallProcedureTest2 {public CallProcedureTest2() {super();}public static void main(String[] args) {String driver = "oracle.jdbc.driver.OracleDriver";String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl"; String user = "admin";String pwd = "password";Connection conn = null;CallableStatement cs = null;ResultSet rs = null;try {Class.forName(driver);conn = DriverManager.getConnection(url, user, pwd); cs = conn.prepareCall("{ call DBO.PRO_2(?,?) }");cs.setString(1, "10");cs.registerOutParameter(2, Types.VARCHAR);cs.execute();String name = cs.getString(2);System.out.println("name: " + name);} catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();} finally {try {if (rs != null) {rs.close();}if (cs != null) {cs.close();}if (conn != null) {conn.close();}} catch (SQLException e) {}}}}注意:cs.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。

jdbctemplate调用存储过程返回多行

jdbctemplate调用存储过程返回多行

jdbctemplate调用存储过程返回多行在Spring 的JdbcTemplate 中,如果要调用存储过程并返回多行结果,可以使用`query` 方法,并通过`RowMapper` 将每行结果映射到相应的对象。

下面是一个简单的示例:假设有一个存储过程,接收输入参数,并返回多行结果:```sqlCREATE PROCEDURE getEmployees(IN departmentId INT)BEGINSELECT * FROM employees WHERE department_id = departmentId;END;```然后,你可以使用JdbcTemplate 来调用这个存储过程:```javaimport org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.stereotype.Repository;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;@Repositorypublic class EmployeeRepository {private final JdbcTemplate jdbcTemplate;public EmployeeRepository(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}public List<Employee> getEmployeesByDepartment(int departmentId) {String sql = "CALL getEmployees(?)";// 使用query 方法调用存储过程,通过RowMapper 映射结果到Employee 对象return jdbcTemplate.query(sql, new Object[]{departmentId}, new EmployeeRowMapper());}private static class EmployeeRowMapper implements RowMapper<Employee> {@Overridepublic Employee mapRow(ResultSet resultSet, int i) throws SQLException {// 将查询结果映射到Employee 对象Employee employee = new Employee();employee.setId(resultSet.getInt("id"));employee.setName(resultSet.getString("name"));// 其他属性的映射...return employee;}}}```在上述示例中,`EmployeeRepository` 类通过`jdbcTemplate.query` 方法调用存储过程,并使用`EmployeeRowMapper` 将查询结果映射到`Employee` 对象。

java获取存储过程返回的结果集(多个结果集)

java获取存储过程返回的结果集(多个结果集)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系java 获取存储过程返回的结果集(多个结果集)2014/01/16 11690 在中,DataSet 可以自动接收多个结果集,形成DataTable 数组。

使用JAVA 时,也想要实现这个效果,百度一顿查找,终于找到解决的办法。

核心方法:CallableStatement ResultSet具体实现代码:import java.sql.CallableStatement; import java.sql.ResultSet;public void search() {String re = ““;String sql = “call pro1(?,?);”;Connection con = DBConnPool.getConnection();//建立数据连接对像CallableStatement callsm = null;try {callsm = con.prepareCall(sql);// 给存储过程传参// callsm.setString(1, “res”);// callsm.setString(2, “me”);//执行存储过程callsm.execute();// 获取结果集ResultSet rs = callsm.getResultSet();while(rs.next()){re += (re!=““?”,”:”“)+rs.getString(“ID”);}re+= “|”;//判断是否有第二个结果集if (callsm.getMoreResults()) {// 这个判断会自动指向下一个结果集ResultSet rs1 = callsm.getResultSet();while(rs1.next()){re += (re!=““?”,”:”“)+rs1.getString(“Q_ID”);}try{// 关闭rs1if (rs1 != null){rs1.close();}}catch (Exception e) {e.printStackTrace();}}try {// 关闭rs1if (rs != null) {rs.close();}}catch (Exception e) {e.printStackTrace();}System.out.println(re);}catch (Exception e) {e.printStackTrace();}finally {try {callsm.close();con.close();}catch (Exception e) {e.printStackTrace();}} }tips:感谢大家的阅读,本文由我司收集整编。

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调用sql函数_java调用数据库中的函数和存储过程

java调用sql函数_java调用数据库中的函数和存储过程

java调用sql函数_java调用数据库中的函数和存储过程Java是一种常用的编程语言,用于开发各种类型的应用程序,包括与数据库进行交互的应用程序。

在Java程序中,我们可以使用JDBC(Java Database Connectivity)技术来连接和操作数据库。

通过JDBC,我们可以调用数据库中的函数和存储过程来执行一些特定的任务。

在Java中调用SQL函数和存储过程的基本步骤如下:2. 建立数据库连接:使用JDBC连接字符串、用户名和密码等相关参数来创建与数据库的连接。

JDBC提供了一个名为Connection的接口来表示与数据库的连接。

可以使用DriverManager类的静态方法getConnection来获取数据库连接对象。

```javaString username = "用户名";String password = "密码";Connection connection = DriverManager.getConnection(url, username, password);```3. 创建CallableStatement对象:CallableStatement是一个表示可以执行存储过程或函数的SQL语句的接口。

使用Connection对象的prepareCall方法创建一个CallableStatement对象。

```javaString sql = "{call 存储过程或函数名称(参数1, 参数2, ...)}";CallableStatement statement = connection.prepareCall(sql);```4. 设置参数:如果存储过程或函数需要输入参数,可以使用setXXX 方法设置参数的值。

XXX表示参数的数据类型,例如setInt、setString 等。

参数索引从1开始。

```javastatement.setString(1, "参数值");```5. 执行SQL语句:使用execute方法执行存储过程或函数。

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创建的。

jtds 存储过程 调用

jtds 存储过程 调用

jtds 存储过程调用Jtds是一个开源的JDBC驱动程序,它允许Java应用程序连接到Microsoft SQL Server和Sybase数据库。

在Java应用程序中,我们可以使用Jtds来调用存储过程。

存储过程是一组预编译的SQL语句,它们被存储在数据库中并可以被多次调用。

存储过程可以接受参数并返回结果,它们通常用于执行复杂的数据库操作,例如数据转换、数据验证和数据处理。

在Java应用程序中,我们可以使用Jtds来调用存储过程。

首先,我们需要创建一个Connection对象来连接到数据库。

然后,我们可以使用PreparedStatement对象来调用存储过程。

PreparedStatement对象是一个预编译的SQL语句,它可以接受参数并返回结果。

下面是一个使用Jtds调用存储过程的示例代码:```import java.sql.*;public class JtdsStoredProcedureExample {public static void main(String[] args) {try {// Connect to databaseString url = "jdbc:jtds:sqlserver://localhost:1433/mydatabase";String username = "myusername";String password = "mypassword";Connection conn = DriverManager.getConnection(url, username, password);// Call stored procedureString sql = "{call my_stored_procedure(?, ?)}";CallableStatement stmt = conn.prepareCall(sql);stmt.setString(1, "John");stmt.setString(2, "Doe");ResultSet rs = stmt.executeQuery();// Process result setwhile (rs.next()) {String firstName = rs.getString("first_name");String lastName = rs.getString("last_name");System.out.println(firstName + " " + lastName);}// Close resourcesrs.close();stmt.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}}```在上面的示例代码中,我们首先创建一个Connection对象来连接到数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;
/**
* java调用存储过程
*
* @author Administrator
*
*/
public classJavaCallPro{
/**
* @paramargs
* @throws Exception
*/
public static void main(String[]args) throws Exception {
// TODO Auto-generated method stub
ResultSetMetaDatarm=rs.getMetaData();
intcolumnNums=rm.getColumnCount();
String[] t = null;
while (rs.next()) {
list.add(t = new String[columnNums]);
for (inti= 1;i<=columnNums;i++) {
packagecom.utour.util;
importjava.sql.CallableStatement;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.ResultSetMetaData;
t[i- 1] =rs.getString(i);
}
}
ct.close();
return list;
}
private static StringtestOutParams() throws Exception {
// TODO Auto-generated method stub
Connection ct = null;
// TODO Auto-generated method stub
List<String[]> list = newArrayList<String[]>();
Connection ct = null;
StringdbURL= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ADMIN";
c.setString(2, "2001");
c.execute();
Stringsss=c.getString(1);
ct.close();
returnsss;
}
}
String s =testOutParams();
System.out.p<String[]> list = test();
//
//for(inti=0;i<list.size();i++){
//String[]dd=list.get(i);
//String aa1 =dd[0];
Class.forName(drv);
ct =DriverManager.getConnection(dbURL, user,pwd);
CallableStatementc =ct.prepareCall("{callADMIN.DBO.test_pro(?,?)}");
c.registerOutParameter(1,java.sql.Types.VARCHAR);
StringdbURL= "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ADMIN";
String user = "admin";
Stringpwd= "Admin";
Stringdrv= "com.microsoft.sqlserver.jdbc.SQLServerDriver";
CallableStatementc =ct.prepareCall("{call UTRDW.DBO.SP_TEST_SELECTTABLE(?,?)}");
c.setString(1, "U1003");
c.setString(2, "20140521");
ResultSetrs=c.executeQuery();
String user = "admin";
Stringpwd= "Admin";
Stringdrv= "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(drv);
ct =DriverManager.getConnection(dbURL, user,pwd);
//String aa2 =dd[1];
//String aa3 =dd[2];
//
//System.out.println("aa1====="+aa1+"-----aa2====="+aa2+"----aa3====="+aa3);
//
//}
}
private static List<String[]> test() throws Exception {
相关文档
最新文档