最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring中JdbcTemplate操作oracle的存儲(chǔ)過程實(shí)例代碼

 更新時(shí)間:2023年04月14日 10:31:57   作者:zhangbeizhen18  
JdbcTemplate是Spring對(duì)JDBC的封裝,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分,下面這篇文章主要給大家介紹了關(guān)于spring中JdbcTemplate操作oracle的存儲(chǔ)過程的相關(guān)資料,需要的朋友可以參考下

場景:

使用java代碼調(diào)用oracle的存儲(chǔ)過程,本例使用JdbcTemplate模板類操作.

功能:

方便后續(xù)查閱.

1.JdbcTemplate調(diào)用存儲(chǔ)過程(Procedure)不帶返回值

1.1存儲(chǔ)過程

CREATE OR REPLACE PROCEDURE PRO_QUERY_INFO_ARGS4(TASK_ID IN NUMBER) IS
BEGIN
  INSERT INTO F_LOG_INFO
    (TASK_ID,
     BEGIN_TIME,
     END_TIME,
     FLAG,
     FAIL_INFO,
     DATA_COUNT,
     TABLE_NAME)
  VALUES
    (TASK_ID, SYSDATE - 1, SYSDATE, '999', '999', 999, 'TABLE_NAME2019');
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
END PRO_QUERY_INFO_ARGS4;

1.2代碼

public static void doProcedures() {
	String procedures = "{call PRO_QUERY_INFO_ARGS4 ('888')}";
	jdbcTemplate.execute(procedures);
}

2.JdbcTemplate調(diào)用存儲(chǔ)過程(Procedure)帶返回值但值不是集合類型

2.1存儲(chǔ)過程

CREATE OR REPLACE PROCEDURE PRO_QUERY_INFO_ARGS3(ARGS     IN VARCHAR2,
                                                 RTNINFO  OUT VARCHAR2,
                                                 ERRORMSG OUT VARCHAR2,
                                                 FAILINFO OUT VARCHAR2) IS
BEGIN
  ERRORMSG := '';
  RTNINFO  := '你輸入的ARGS=' || ARGS;
  SELECT FAIL_INFO INTO FAILINFO FROM F_LOG_INFO where TASK_ID = 1;
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    ERRORMSG := 'PRO_QUERY_INFO_ARG拋出異常: ' || SQLERRM;
END PRO_QUERY_INFO_ARGS3;

2.2代碼

public static void getProceduresResult() {
  String tt2 = (String) jdbcTemplate.execute(
  new CallableStatementCreator() {
  	public CallableStatement createCallableStatement(
  	  	Connection con) throws SQLException {
  	  String procedures = "{call PRO_QUERY_INFO_ARGS3 (?,?,?,?)}";
  	  CallableStatement cs = con.prepareCall(procedures);
  	  /** 設(shè)置輸入?yún)?shù)的值 */
  	  cs.setString(1, "代碼調(diào)用");
  	  /** 注冊輸出參數(shù)的類型-此處集合為oracle的VARCHAR2 */
  	  cs.registerOutParameter(2, OracleTypes.VARCHAR);
  	  cs.registerOutParameter(3, OracleTypes.VARCHAR);
  	  cs.registerOutParameter(4, OracleTypes.VARCHAR);
  	  return cs;
  	}
  }, new CallableStatementCallback() {
  	public Object doInCallableStatement(CallableStatement st)
  	  	throws SQLException, DataAccessException {
  	  st.execute();
  	  /** 依次獲取存儲(chǔ)過程參數(shù)值,按照順序存儲(chǔ)過程定義參數(shù)的順序獲取 */
  	  Object tt2 = st.getObject(2);
  	  Object tt3 = st.getObject(3);
  	  Object tt4 = st.getObject(4);
  	  return tt2;
  	}
	});
}

3.JdbcTemplate調(diào)用存儲(chǔ)過程(Procedure)帶返回值且值集合類型

3.1存儲(chǔ)過程

CREATE OR REPLACE PROCEDURE PRO_QUERY_INFO_ARGS2(ERRORMSG OUT VARCHAR2,
                                                 CURINFO  OUT SYS_REFCURSOR) IS
BEGIN
  ERRORMSG := '';
  OPEN CURINFO FOR
    SELECT FAIL_INFO, TABLE_NAME FROM F_LOG_INFO;
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    ERRORMSG := 'PRO_QUERY_INFO_ARG2拋出異常: ' || SQLERRM;
END PRO_QUERY_INFO_ARGS2;

3.2代碼

public static List getProceduresResultList() {
 
 List resultList = (List) jdbcTemplate.execute(
  new CallableStatementCreator() {
  	public CallableStatement createCallableStatement(
  	  	Connection conn) throws SQLException {
  	  /** 調(diào)用指定存儲(chǔ)過程 */
  	  String procedures = "{ CALL PRO_QUERY_INFO_ARGS2(?,?) }";
  	  CallableStatement statement = conn
  	  		.prepareCall(procedures);
  	  /** 注冊輸出參數(shù)的類型-此處集合為oracle的VARCHAR2 */
  	  statement.registerOutParameter(1, OracleTypes.VARCHAR);
  	  /** 注冊輸出參數(shù)的類型-此處集合為oracle的游標(biāo)類型 */
  	  statement.registerOutParameter(2, OracleTypes.CURSOR);
  	  return statement;
  	}
  }, new CallableStatementCallback() {
  	public Object doInCallableStatement(
  	  	CallableStatement statement) throws SQLException,
  	  	DataAccessException {
  	  List resultsMap = new ArrayList();
  	  statement.execute();
  	  /** 獲取游標(biāo)結(jié)果集-此處2是存儲(chǔ)過程參數(shù)順序 */
  	  ResultSet resultSet = (ResultSet) statement
  	  		.getObject(2);
  	  /** 轉(zhuǎn)換每行的返回值到Map中 */
  	  while (resultSet.next()) {
  	  	Map rowMap = new HashMap();
  	  	rowMap.put("FAIL_INFO",
  	  			resultSet.getObject("FAIL_INFO"));
  	  	rowMap.put("TABLE_NAME",
  	  			resultSet.getObject("TABLE_NAME"));
  	  	resultsMap.add(rowMap);
  	  }
  	  resultSet.close();
  	  return resultsMap;
  	}
  });
 return resultList;
}

4.附本例使用建表語句

create table F_LOG_INFO
(
  task_id    NUMBER(16) not null,
  begin_time DATE,
  end_time   DATE,
  flag       VARCHAR2(8),
  fail_info  VARCHAR2(512),
  data_count NUMBER(16),
  table_name VARCHAR2(256)
);
alter table F_LOG_INFO
  add constraint PK_F_LOG_INFO primary key (TASK_ID);

5.附本例使用完整測試代碼

public class TestProcedures {
public static JdbcTemplate jdbcTemplate = getJdbcTemplate();
public static void main(String[] args) {
 System.out.println("測試開始......");
 // getProceduresResult();
 doProcedures();
 List result = getProceduresResultList();
 for (int i = 0; i < result.size(); i++) {
  Map rowMap = (Map) result.get(i);
  String id = rowMap.get("FAIL_INFO").toString();
  String name = rowMap.get("TABLE_NAME").toString();
  System.out.println("FAIL_INFO=" + id + ";TABLE_NAME=" + name);
 }
 System.out.println("測試結(jié)束......");
}
/**
 * 執(zhí)行存儲(chǔ)過程無返回值
 * */
public static void doProcedures() {
	String procedures = "{call PRO_QUERY_INFO_ARGS4 ('888')}";
	jdbcTemplate.execute(procedures);
}
/**
 * 調(diào)用存儲(chǔ)過程-返回值是非集合
 * */
public static void getProceduresResult() {
 String tt2 = (String) jdbcTemplate.execute(
  new CallableStatementCreator() {
  	public CallableStatement createCallableStatement(
  	 	Connection con) throws SQLException {
  	 String procedures = "{call PRO_QUERY_INFO_ARGS3 (?,?,?,?)}";
  	 CallableStatement cs = con.prepareCall(procedures);
  	 /** 設(shè)置輸入?yún)?shù)的值 */
  	 cs.setString(1, "代碼調(diào)用");
  	 /** 注冊輸出參數(shù)的類型-此處集合為oracle的VARCHAR2 */
  	 cs.registerOutParameter(2, OracleTypes.VARCHAR);
  	 cs.registerOutParameter(3, OracleTypes.VARCHAR);
  	 cs.registerOutParameter(4, OracleTypes.VARCHAR);
  	 return cs;
  	}
  }, new CallableStatementCallback() {
  	public Object doInCallableStatement(CallableStatement st)
  	 	throws SQLException, DataAccessException {
  	 st.execute();
  	 /** 依次獲取存儲(chǔ)過程參數(shù)值,按照順序存儲(chǔ)過程定義參數(shù)的順序獲取 */
  	 Object tt2 = st.getObject(2);
  	 Object tt3 = st.getObject(3);
  	 Object tt4 = st.getObject(4);
  	 return tt2;
  	}
  });
}
/**
 * 調(diào)用存儲(chǔ)過程-返回值是List集合
 * */
public static List getProceduresResultList() {
  List resultList = (List) jdbcTemplate.execute(
   new CallableStatementCreator() {
   	public CallableStatement createCallableStatement(
   	 	Connection conn) throws SQLException {
   	 /** 調(diào)用指定存儲(chǔ)過程 */
   	 String procedures = "{ CALL PRO_QUERY_INFO_ARGS2(?,?) }";
   	 CallableStatement statement = conn
   	 		.prepareCall(procedures);
   	 /** 注冊輸出參數(shù)的類型-此處集合為oracle的VARCHAR2 */
   	 statement.registerOutParameter(1, OracleTypes.VARCHAR);
   	 /** 注冊輸出參數(shù)的類型-此處集合為oracle的游標(biāo)類型 */
   	 statement.registerOutParameter(2, OracleTypes.CURSOR);
   	 return statement;
   	}
   }, new CallableStatementCallback() {
   	public Object doInCallableStatement(
   	 	CallableStatement statement) throws SQLException,
   	 	DataAccessException {
   	 List resultsMap = new ArrayList();
   	 statement.execute();
   	 /** 獲取游標(biāo)結(jié)果集-此處2是存儲(chǔ)過程參數(shù)順序 */
   	 ResultSet resultSet = (ResultSet) statement
   	 		.getObject(2);
   	 /** 轉(zhuǎn)換每行的返回值到Map中 */
   	 while (resultSet.next()) {
   	 	Map rowMap = new HashMap();
   	 	rowMap.put("FAIL_INFO",
   	 			resultSet.getObject("FAIL_INFO"));
   	 	rowMap.put("TABLE_NAME",
   	 			resultSet.getObject("TABLE_NAME"));
   	 	resultsMap.add(rowMap);
   	 }
   	 resultSet.close();
   	 return resultsMap;
   	}
   });
  return resultList;
}
/** 獲取JdbcTemplate數(shù)據(jù)源 */
public static JdbcTemplate getJdbcTemplate() {
  DruidDataSource dataSource = new DruidDataSource();
  /**數(shù)據(jù)庫連接信息*/
  String username = "demodb";
  String password = "123456";
  String jdbcUrl = "jdbc:oracle:thin:@127.0.0.1:1521/orcl";
  String driverName = "oracle.jdbc.OracleDriver";
  /** 設(shè)置數(shù)據(jù)源屬性參數(shù) */
  dataSource.setPassword(password);
  dataSource.setUrl(jdbcUrl);
  dataSource.setUsername(username);
  dataSource.setDriverClassName(driverName);
  /** 獲取spring的JdbcTemplate*/
  JdbcTemplate jdbcTemplate = new JdbcTemplate();
  /** 設(shè)置數(shù)據(jù)源 */
  jdbcTemplate.setDataSource(dataSource);
  return jdbcTemplate;
}
}

以上,感謝.

總結(jié)

到此這篇關(guān)于spring中JdbcTemplate操作oracle的存儲(chǔ)過程的文章就介紹到這了,更多相關(guān)JdbcTemplate操作oracle存儲(chǔ)過程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Scala之文件讀取、寫入、控制臺(tái)操作的方法示例

    Scala之文件讀取、寫入、控制臺(tái)操作的方法示例

    這篇文章主要介紹了Scala之文件讀取、寫入、控制臺(tái)操作的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Windows 下安裝配置 Eclipse詳細(xì)教程

    Windows 下安裝配置 Eclipse詳細(xì)教程

    Eclipse是一款非常優(yōu)秀的開源IDE,非常適合Java開發(fā),由于支持插件技術(shù),受到了越來越多的開發(fā)者的歡迎。配合眾多令人眼花繚亂的插件,完全可以滿足從企業(yè)級(jí)Java應(yīng)用到手機(jī)終端Java游戲的開發(fā)。本文將帶您手把手步入Eclipse的廣闊天地
    2016-09-09
  • SpringBoot實(shí)現(xiàn)二維碼掃碼登錄的原理及項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)二維碼掃碼登錄的原理及項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot實(shí)現(xiàn)二維碼掃碼登錄的原理及項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Spring中@PathVariable和@RequestParam注解的用法區(qū)別

    Spring中@PathVariable和@RequestParam注解的用法區(qū)別

    這篇文章主要介紹了Spring中@PathVariable和@RequestParam注解的用法區(qū)別,@PathVariable 是 Spring 框架中的一個(gè)注解,用于將 URL 中的變量綁定到方法的參數(shù)上,它通常用于處理 RESTful 風(fēng)格的請(qǐng)求,從 URL 中提取參數(shù)值,并將其傳遞給方法進(jìn)行處理,需要的朋友可以參考下
    2024-01-01
  • Spring與MyBatis集成?AOP整合PageHelper插件的操作過程

    Spring與MyBatis集成?AOP整合PageHelper插件的操作過程

    Spring與MyBatis集成的主要目的是為了提供更強(qiáng)大的數(shù)據(jù)訪問和事務(wù)管理能力,以及簡化配置和提高開發(fā)效率,這篇文章主要介紹了Spring與MyBatis集成AOP整合PageHelper插件,需要的朋友可以參考下
    2023-08-08
  • SpringBoot2使用WebFlux函數(shù)式編程的方法

    SpringBoot2使用WebFlux函數(shù)式編程的方法

    這篇文章主要介紹了SpringBoot2使用WebFlux函數(shù)式編程的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 自己寫的java日志類和方法代碼分享

    自己寫的java日志類和方法代碼分享

    這篇文章主要介紹了一個(gè)自己寫的java日志類和方法,下面把代碼分享給大家
    2014-01-01
  • MyBatis測試報(bào)錯(cuò):Cannot?determine?value?type?from?string?'xxx'的解決辦法

    MyBatis測試報(bào)錯(cuò):Cannot?determine?value?type?from?string?&a

    這篇文章主要給大家介紹了關(guān)于MyBatis測試報(bào)錯(cuò):Cannot?determine?value?type?from?string?'xxx'的解決辦法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Springboot 自定義校驗(yàn)代碼實(shí)例

    Springboot 自定義校驗(yàn)代碼實(shí)例

    這篇文章主要介紹了Springboot 自定義校驗(yàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • SpringMVC + jquery.uploadify實(shí)現(xiàn)上傳文件功能

    SpringMVC + jquery.uploadify實(shí)現(xiàn)上傳文件功能

    文件上傳是很多項(xiàng)目都會(huì)使用到的功能,SpringMVC當(dāng)然也提供了這個(gè)功能。不過小編不建議在項(xiàng)目中通過form表單來提交文件上傳,這樣做的局限性很大。下面這篇文章主要介紹了利用SpringMVC + jquery.uploadify實(shí)現(xiàn)上傳文件功能的相關(guān)資料,需要的朋友可以參考下。
    2017-06-06

最新評(píng)論

庆云县| 元朗区| 和田市| 广汉市| 广汉市| 阿巴嘎旗| 新昌县| 青州市| 衡水市| 图木舒克市| 安康市| 贵南县| 米林县| 进贤县| 漾濞| 宣汉县| 巩义市| 改则县| 娄烦县| 利津县| 阿坝| 瓦房店市| 五峰| 铁岭县| 闽侯县| 修文县| 麻阳| 海丰县| 河南省| 海淀区| 建湖县| 商城县| 嫩江县| 鄂尔多斯市| 凤台县| 寿光市| 龙州县| 广饶县| 沾益县| 同江市| 寿宁县|