`

JDBC执行匿名块

 
阅读更多
mytables.sql
declare
    num int:=0;
begin
    dbms_output.PUT_LINE('--------------------start pro[OracleTools]-----------------------');
	--getStrBeforeLine
    select count(*) into num from mytables  where dict_id=10;
    if num>0 then
       update mytables set STATE='001',DESCRIPTION='',DISPLAY_INDEX=1,EDIT_USER=NULL,LAST_OPER_ID=NULL,CREATE_USER='admin',EDIT_DATE=NULL,DICT_NAME='文本',DICT_CODE='001',CREATE_DATE=NULL,DICT_TYPE_CODE='BSC_ANALYSIS_ITEM_TYPE',VERSION_NUM=NULL where dict_id=10;
    else
       insert into mytables(STATE,DESCRIPTION,DISPLAY_INDEX,EDIT_USER,LAST_OPER_ID,CREATE_USER,EDIT_DATE,DICT_NAME,DICT_CODE,CREATE_DATE,DICT_TYPE_CODE,DICT_ID,VERSION_NUM) values('001','',1,NULL,NULL,'admin',NULL,'文本','001',NULL,'BSC_ANALYSIS_ITEM_TYPE',10,NULL);
    end if;
	--getStrAfterLine

	--getStrBeforeLine
    select count(*) into num from mytables  where dict_id=30;
    if num>0 then
       update mytables set STATE='001',DESCRIPTION='',DISPLAY_INDEX=2,EDIT_USER=NULL,LAST_OPER_ID=NULL,CREATE_USER='admin',EDIT_DATE=NULL,DICT_NAME='日期',DICT_CODE='002',CREATE_DATE=NULL,DICT_TYPE_CODE='BSC_ANALYSIS_ITEM_TYPE',VERSION_NUM=NULL where dict_id=30;
    else
       insert into mytables(STATE,DESCRIPTION,DISPLAY_INDEX,EDIT_USER,LAST_OPER_ID,CREATE_USER,EDIT_DATE,DICT_NAME,DICT_CODE,CREATE_DATE,DICT_TYPE_CODE,DICT_ID,VERSION_NUM) values('001','',2,NULL,NULL,'admin',NULL,'日期','002',NULL,'BSC_ANALYSIS_ITEM_TYPE',30,NULL);
    end if;
	--getStrAfterLine
	
	......
	......
	......

    dbms_output.PUT_LINE('--------------------end pro[OracleTools]-----------------------');
    commit;
exception WHEN others THEN
    dbms_output.PUT_LINE('--------------------exception-----------------------');
    dbms_output.PUT_LINE(sqlerrm);
    rollback;
end;



要用StringBuffer来存放匿名块文件的代码,读取每一行的时候,记得加上回车符号。
然后:
PreparedStatement st = conn.prepareStatement(sb.toString());
st.execute();
调用匿名块是运行参数的,具体看API

package com.geosun.main;

import java.io.BufferedReader;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.PreparedStatement;

import com.geosun.conf.DBUtils;

public class ProcessUnNameSQL {

	public static StringBuffer readFile(String filePath){
		BufferedReader reader = null;
		StringBuffer sb = new StringBuffer();
		try {
			reader = new BufferedReader(new FileReader(filePath));
			String line = reader.readLine();
			while(line!=null){
				sb.append(line+"\n");
				line = reader.readLine();
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
		System.out.println(sb.toString());
		return sb;
	}
	public static void process(Connection conn, String filePath){
		StringBuffer sb = readFile(filePath);
		try {
			conn.setAutoCommit(false);
			PreparedStatement st = conn.prepareStatement(sb.toString());
			System.out.println("Start Process");
			st.execute();
			conn.commit();
			System.out.println("Process success.");
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			Connection conn = DBUtils.getNewConn("jdbc:oracle:thin:@localhost:1521:orcl", "aaa", "aaa", "oracle.jdbc.driver.OracleDriver");
			String filePath="D:\mytables.sql";
			process(conn, filePath);
			conn.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}
分享到:
评论

相关推荐

    JDBC编程 J275练习题、Java基础知识

    3. **异常处理**:Java使用try-catch-finally结构来捕获和处理异常,finally块确保关键代码始终被执行。 4. **集合框架**:ArrayList、LinkedList、HashSet、HashMap等是常用的集合类,它们提供了存储和操作数据的...

    2014 java servet jdbc struts struts2面试题

    1. **JDBC基本操作**:连接数据库、创建Statement或PreparedStatement、执行SQL、处理结果集。 2. **事务管理**:理解ACID特性,手动控制事务的提交和回滚。 3. **批处理**:提高性能的批量操作,通过addBatch()和...

    PLSQL.rar_pl\sql_plsql_plsql java 分析_语法分析

    匿名块可以直接在SQL*Plus或其他数据库工具中执行,而子程序和包则可以被多次调用,提高代码复用性。 PLSQL与Java的交互: PLSQL可以通过Java Database Connectivity (JDBC) API与Java进行交互。Java应用程序可以...

    Oracle_PLSQL.rar_Java plsql_oracle_oracle doc_pl sql_plsql

    - **块结构**:PL/SQL程序由一个或多个块组成,包括匿名块(直接在SQL*Plus或应用中执行的代码)、过程、函数、包等。 - **数据类型**:包括数值型(NUMBER、BINARY_INTEGER、INTEGER等)、字符型(VARCHAR2、CHAR...

    oracle-电子书资料

    5. **PL/SQL块**:包括匿名块(standalone blocks)和命名块(如PROCEDURE和FUNCTION)。匿名块可以用于测试代码片段,而命名块则可以重复使用并作为数据库对象。 6. **游标**:游标用于逐行处理查询结果集。它们在...

    PLSQL.rar_oracle

    比如,一个简单的PLSQL匿名块可能如下所示: ```sql DECLARE var1 NUMBER; BEGIN SELECT column1 INTO var1 FROM table1 WHERE condition; -- 执行其他业务逻辑 EXCEPTION WHEN OTHERS THEN -- 处理异常 ...

    SWT增删改查

    在SWT中,事件监听通常通过实现`org.eclipse.swt.events.Listener`接口或使用匿名内部类来完成。 5. 获取数据下标作为ID: 在描述中提到,此示例使用数据行的下标作为ID进行操作。这可能意味着在表格中,每一行有一...

    java代码

    这需要理解JDBC的基本概念,如Connection、Statement、PreparedStatement、ResultSet等对象,以及如何进行数据库连接配置、SQL语句执行等。 综上所述,Java7不仅在语言层面带来了诸多改进,还提升了与外部系统如...

    如何调用oracle的函数、存储过程

    存储过程通常在PL/SQL块中调用,如匿名块(BEGIN...END;): ```sql DECLARE result VARCHAR2(50); BEGIN my_procedure(10, result); DBMS_OUTPUT.PUT_LINE('Result: ' || result); END; ``` 4. **在应用...

    PL/SQL Develope8

    程序块包括匿名块(即直接在SQL*Plus或PL/SQL Developer中执行的代码)和命名块(如存储过程、函数、包)。 4. **PL/SQL与SQL的区别**:SQL是用于查询和操作数据库的标准语言,而PL/SQL是Oracle特有的扩展,增加了...

    java基础教程

    JDBC是Java连接数据库的标准API,包括加载驱动、建立连接、创建Statement或PreparedStatement、执行SQL语句、处理结果集等步骤。预编译的PreparedStatement可以防止SQL注入,提高性能。事务管理也是数据库操作的关键...

    java存储过程函数案例.ppt

    在这个例子中,我们声明了三个变量来存储新用户的信息,然后在匿名块中调用`AddNewUser`存储过程。 - **直接方式**: ```sql EXEC AddNewUser('008', 'zhou', 'xingxing'); ``` 直接使用`EXECUTE`关键字调用...

    调用存储过程.txt

    存储过程是存储在数据库中的SQL代码块,它可以接受输入参数并返回输出结果。在Java中,通常使用`CallableStatement`接口来调用存储过程。该接口继承自`PreparedStatement`,并提供了额外的方法来处理输入/输出参数。...

    java笔试复习资料.pdf

    静态块是一段在类加载时执行的代码,用于初始化静态变量。 JDBC(Java Database Connectivity)是Java访问数据库的标准API,允许程序员用SQL语句操作数据库,它包含一组接口和类,可以实现跨数据库平台的应用。接口...

    Java语言程序设计 基础篇 第八版 带目录

    - **数据库操作**:通过JDBC执行SQL语句,实现数据的增删改查操作。 ### 并发编程 - **多线程**:线程的基本概念、创建方式以及同步机制(synchronized关键字、wait()与notify()方法等)。 - **并发工具类**:介绍...

    Java_54实用知识库分享

    方法是Java程序中实现特定功能的代码块,函数则通常指返回值的特定类型的方法。数组和字符串是处理数据的基本工具。继承、多态、抽象类、接口是面向对象编程的四大特征。继承允许类拥有父类的属性和方法,多态是同一...

    将EXCEL数据 插入ORACLE数据库

    2. **利用PL/SQL程序**:编写PL/SQL存储过程或者匿名块,通过Oracle的DBMS_LOB和UTL_FILE包读取Excel文件内容,逐行处理并插入到数据库中。这种方法灵活性高,可以处理复杂的转换逻辑,但需要一定的编程技能。 3. *...

    OraclePPLSQL.rar_Oracle数据库_Java_

    在Oracle中,PL/SQL块可以是匿名块(直接在SQL*Plus或其他客户端执行)或命名块(存储在数据库中供以后调用)。学习PL/SQL还包括理解如何创建和管理存储过程、函数、包,这些是数据库应用程序的重要组成部分。 Java...

Global site tag (gtag.js) - Google Analytics