随分前にOracleの検証をJunit使ってテストした時の垂れ流しコードのメモを一応貼っとこう

もしかしたら何かに使う可能性があるかもしれないから。それにしてもだなー。その時の自分から今の自分に謝りたいと思います。やっつけなコードで大変申し訳ございません。以後気をつけたいと思います。

package jp.co.suda.oracle;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Array;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;

import jp.co.suda.oracle.Exception.Runtime.OracleAddUserException;
import oracle.jdbc.OracleTypes;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class OracleTest1 {

	private static Connection conn;

	private static Statement nowStatement;

	private static PreparedStatement nowPstatement;

	private static CallableStatement cs;

	private static ResultSet result;

	private static String sql;

	private static int testno = 1;

	private static String connectionUser = "suda";

	private static String connectionPass = "hogesuda";

	private static String targetUser = "odu";

	private static String targetUserPass = "hogeodu";

	/**
	 * 
	 * ドライバの読み込み コネクションの取得
	 * 
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	@BeforeClass
	public static void setup() throws ClassNotFoundException, SQLException {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		conn =
			DriverManager.getConnection(
				"jdbc:oracle:thin:@localhost:1521:sudaorcl",
				connectionUser,
				connectionPass);
		nowStatement = conn.createStatement();
		System.out
			.println("ユーザ" + conn.getMetaData().getUserName() + "で接続します。");
		System.out.println("スキーマ" + targetUser + "に対してオブジェクト操作します。");
		System.out.println("");
	}

	@Before
	public void setUpMethod() {
		System.out.println("");
		System.out.println("==================================== "
			+ testno
			+ " つめのテストを開始します ====================================");
	}

	@Test
	public void testAll() throws SQLException {
		testA();
		testB();
		testC();
	}

//	 @Test
	public void deleteAll() throws SQLException {
		deleteA();
		deleteB();
		deleteC();
	}

//	 @Test
	public void testA() throws SQLException {
		try {
			createTable();
			createTable2();
			insertData();
			selectData();
			deleteData();
			alterTable();

			System.out.println("\n\n\n");

			createView();
			selectView();

			System.out.println("\n\n\n");

			createSequence();
			selectSequence();
			alterSequence();

			System.out.println("\n\n\n");

			createIndex();
			alterIndex();

			System.out.println("\n\n\n");

		} catch (Exception e) {
			OracleAddUserException oracleAddUserException =
				new OracleAddUserException("testAでエラーが発生しました!", e);
			throw oracleAddUserException;
		}

	}

//	 @Test
	public void testB() throws SQLException {
		try {

			createProcedure();
			execProcedure();

			System.out.println("\n\n\n");

			createFunction();
			execFunction();

			System.out.println("\n\n\n");

			createType();

			System.out.println("\n\n\n");

			createPackage();
			createPackageBody();
			execPackage();

			System.out.println("\n\n\n");

		} catch (Exception e) {
			OracleAddUserException oracleAddUserException =
				new OracleAddUserException("testAでエラーが発生しました!", e);
			throw oracleAddUserException;
		}

	}

//	 @Test
	public void testC() throws SQLException {
		try {
			createProcedureByJob();
			createJob();
			executeJob();

			System.out.println("\n\n\n");

			createLobTable();
			insertBlob();
			selectBlob();

			System.out.println("\n\n\n");
			
			loadJava();
			createJavaFunction();
			execJavaFunction();
			
			System.out.println("\n\n\n");
			
		} catch (Exception e) {
			OracleAddUserException oracleAddUserException =
				new OracleAddUserException("testAでエラーが発生しました!", e);
			throw oracleAddUserException;
		}

	}

	// @Test
	public void deleteA() throws SQLException {
		try {
			dropIndex();
			System.out.println("\n\n\n");
			dropTable();
			System.out.println("\n\n\n");
			dropView();
			System.out.println("\n\n\n");
			dropSequence();
			System.out.println("\n\n\n");
			
		} catch (Exception e) {
			OracleAddUserException oracleAddUserException =
				new OracleAddUserException("testAでエラーが発生しました!", e);
			throw oracleAddUserException;
		}
	}

	// @Test
	public void deleteB() throws SQLException {
		try {
			/*
			 * ユーザ作成(); 権限付与();
			 */

			dropProcedure();

			System.out.println("\n\n\n");

			dropFunction();

			System.out.println("\n\n\n");

			dropPackage();

			System.out.println("\n\n\n");

			dropType();
			
			System.out.println("\n\n\n");

		} catch (Exception e) {
			OracleAddUserException oracleAddUserException =
				new OracleAddUserException("testAでエラーが発生しました!", e);
			throw oracleAddUserException;
		}
	}

	// @Test
	public void deleteC() throws SQLException {
		try {
			dropProcedureByJob();
			System.out.println("\n\n\n");
			dropJob();
			System.out.println("\n\n\n");
			dropLobTable();
			System.out.println("\n\n\n");
			dropJavaFunction();
			System.out.println("\n\n\n");
			dropJava();
			System.out.println("\n\n\n");
			
		} catch (Exception e) {
			OracleAddUserException oracleAddUserException =
				new OracleAddUserException("testAでエラーが発生しました!", e);
			throw oracleAddUserException;
		}
	}

	// @Test
	public void createUser() throws SQLException {
		System.out.println("ユーザを作成します。");
		sql =
			"CREATE USER "
				+ targetUser
				+ " PROFILE DEFAULT "
				+ "IDENTIFIED BY "
				+ targetUserPass
				+ " DEFAULT TABLESPACE USERS "
				+ "TEMPORARY TABLESPACE TEMP "
				+ "ACCOUNT UNLOCK";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ユーザ" + targetUser + "を作成しました");
	}

	// @Test
	public void grantTo() throws SQLException {
		System.out.println("権限を付与します。");
		sql = "GRANT DBA TO " + targetUser;
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ユーザ" + targetUser + "にDBA権限を付与しました");
	}

	// @Test
	public void RevokeTo() throws SQLException {
		System.out.println("権限を剥奪します。");
		sql = "REVOKE DBA TO " + targetUser;
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ユーザ" + targetUser + "のDBA権限を剥奪しました");
	}

	// @Test
	public void dropUser() throws SQLException {
		System.out.println("ユーザ削除します");
		sql = "DROP USER " + targetUser + " CASCADE";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ユーザ" + targetUser + "を削除しました");
	}

	// @Test
	public void createTable() throws SQLException {
		System.out.println("テーブルを作成します");
		sql =
			"CREATE TABLE "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE ( "
				+ "EmployeeID INTEGER NOT NULL PRIMARY KEY, "
				+ "Name CHAR(20), "
				+ "GroupID INTEGER NOT NULL )";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルを作成しました");

	}

	// @Test
	public void createTable2() throws SQLException {
		System.out.println("テーブルを作成します2");
		sql =
			"CREATE TABLE "
				+ targetUser
				+ "."
				+ "GroupTable ( "
				+ "GroupID INTEGER NOT NULL PRIMARY KEY, "
				+ "GroupName CHAR(20))";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルを作成しました2");
	}

	// @Test
	public void insertData() throws SQLException {
		System.out.println("テーブルデータを挿入します");
		sql =
			"INSERT INTO "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE VALUES (42136, '小津安二郎', 3)";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		sql =
			"INSERT INTO "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE VALUES (77777, 'デビッドフィンチャー', 2)";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		sql = "INSERT INTO " + targetUser + "." + "GROUPTABLE VALUES (2, '監督')";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルデータを挿入しました");
	}

	// @Test
	public void selectData() throws SQLException {
		System.out.println("テーブルデータを参照します");
		sql = "select * from " + targetUser + "." + "EMPLOYEETABLE";
		result = nowStatement.executeQuery(sql);
		while (result.next()) {
			String string = result.getString("name");
			System.out.println("selectデータ :→→→→→: " + string);
		}
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルデータを参照しました");
	}

	// @Test
	public void deleteData() throws SQLException {
		System.out.println("テーブルデータを削除します");
		sql =
			"DELETE FROM "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE WHERE NAME = '小津安二郎'";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルデータを削除しました");
	}

	// @Test
	public void alterTable() throws SQLException {
		System.out.println("テーブルをALTERします");
		sql =
			"ALTER TABLE "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE ADD (addcolumn VARCHAR2(20))";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルをALTERしました");
	}

	// @Test
	public void dropTable() throws SQLException {
		System.out.println("テーブルを削除します");
		sql = "DROP TABLE " + targetUser + "." + "EMPLOYEETABLE purge";
		nowStatement.execute(sql);
		sql = "DROP TABLE " + targetUser + "." + "grouptable purge";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルを削除しました");
	}

	// @Test
	public void createView() throws SQLException {
		System.out.println("ビューを作成します");
		sql =
			"CREATE OR REPLACE VIEW "
				+ targetUser
				+ "."
				+ "emp_view AS "
				+ "select "
				+ "e.name , "
				+ "g.groupname "
				+ "from "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE e , "
				+ targetUser
				+ "."
				+ "grouptable g "
				+ "where e.groupid = g.groupid "
				+ "with read only";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ビューを作成しました");
	}

	// @Test
	public void selectView() throws SQLException {
		System.out.println("ビューを参照します");
		sql = "select * from " + targetUser + "." + "emp_view";
		result = nowStatement.executeQuery(sql);
		while (result.next()) {
			System.out.println(result.getString(1));
			System.out.println(result.getString(2));
		}
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ビューを参照しました");
	}

	// @Test
	public void dropView() throws SQLException {
		System.out.println("ビューを削除します");
		sql = "DROP VIEW " + targetUser + "." + "emp_view";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ビューを削除しました");
	}

	// @Test
	public void createSequence() throws SQLException {
		System.out.println("シーケンスを作成します");
		sql =
			"CREATE SEQUENCE "
				+ targetUser
				+ "."
				+ "exseq "
				+ "START WITH 7 "
				+ "INCREMENT BY 1 "
				+ "MAXVALUE 1000000"
				+ "MINVALUE 0"
				+ "NOCYCLE ";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("シーケンスを作成しました");
	}

	// @Test
	public void selectSequence() throws SQLException {
		System.out.println("シーケンスを参照します");
		sql = "SELECT " + targetUser + "." + "exseq.nextval FROM dual";
		result = nowStatement.executeQuery(sql);
		while (result.next()) {
			String str = result.getString(1);
			System.out.println("シーケンス参照 : → :" + str);
		}
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("シーケンスを参照しました");
	}

	// @Test
	public void alterSequence() throws SQLException {
		System.out.println("シーケンスを変更します");
		sql =
			"ALTER SEQUENCE "
				+ targetUser
				+ "."
				+ "exseq"
				+ " INCREMENT BY 100";
		System.out.println(sql);
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("シーケンスを変更しました");
	}

	// @Test
	public void dropSequence() throws SQLException {
		System.out.println("シーケンスを削除します");
		sql = "DROP SEQUENCE " + targetUser + "." + "exseq";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("シーケンスを削除しました");
	}

	// @Test
	public void createIndex() throws SQLException {
		System.out.println("インデックスを作成します");
		sql =
			"CREATE INDEX "
				+ targetUser
				+ "."
				+ "index_id "
				+ "ON "
				+ targetUser
				+ "."
				+ "EMPLOYEETABLE( groupid asc )";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("インデックスを作成しました");
	}

	// @Test
	public void alterIndex() throws SQLException {
		System.out.println("インデックスをALTERします");
		sql = "ALTER INDEX " + targetUser + "." + "index_id REBUILD ONLINE";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("インデックスをALTERしました");
	}

	// @Test
	public void dropIndex() throws SQLException {
		System.out.println("インデックスを削除します");
		sql = "DROP INDEX " + targetUser + "." + "index_id";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("インデックスを削除しました");
	}

	// @Test
	public void createProcedure() throws SQLException {
		System.out.println("プロシージャを作成します");
		sql =
			"\nCREATE OR REPLACE PROCEDURE "
				+ targetUser
				+ "."
				+ "out_put(input in NUMBER , result out NUMBER) "
				+ "\nIS "
				+ "\nBEGIN"
				+ "\n\tresult := (input + 1);"
				+ "\nEND;\n";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("プロシージャを作成しました");
	}

	// @Test
	public void execProcedure() throws SQLException {
		System.out.println("プロシージャを実行します");
		// sql = "begin " + targetUser + "." + "out_put(?,?); end;";
		sql = "{call " + targetUser + "." + "out_put(?,?)}";
		System.out.println("呼び出すストアドプログラム : " + sql);
		cs = conn.prepareCall(sql);
		cs.registerOutParameter(2, Types.NUMERIC);
		cs.setInt(1, 10);
		cs.executeUpdate();
		int str = cs.getInt(2);
		cs.close();
		System.out.println(str);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("プロシージャを実行しました");
	}

	// @Test
	public void dropProcedure() throws SQLException {
		System.out.println("プロシージャを削除します");
		sql = "DROP PROCEDURE " + targetUser + "." + "out_put";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("プロシージャを削除しました");
	}

	// @Test
	public void createFunction() throws SQLException {
		System.out.println("ファンクションを作成します");

		sql =
			"\nCREATE or REPLACE FUNCTION "
				+ targetUser
				+ "."
				+ "get_data_func(in_data in varchar2)"
				+ "\n return varchar2 "
				+ "\nIS"
				+ "\nBEGIN"
				+ "\n	return in_data;"
				+ "\nEND get_data_func;\n";

		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ファンクションを作成しました");
	}

	// @Test
	public void execFunction() throws SQLException {
		System.out.println("ファンクションを実行します");
		// sql = "begin ? :=" + targetUser + "." + "get_data_func(?); end;";
		sql = "{? = call + " + targetUser + "." + "get_data_func(?)}";
		CallableStatement cs = conn.prepareCall(sql);
		cs.registerOutParameter(1, Types.VARCHAR);
		cs.setString(2, "Hello World!");
		cs.executeUpdate();
		String data = cs.getString(1);
		cs.close();
		System.out.println("Functionの戻り値 :→:" + data);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ファンクションを実行しました");
	}

	// @Test
	public void dropFunction() throws SQLException {
		System.out.println("ファンクションを削除します");
		sql = "DROP FUNCTION " + targetUser + "." + "get_data_func";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("ファンクションを削除しました");
	}

	// @Test
	public void createType() throws SQLException {
		System.out.println("TYPEを作成します");
		sql =
			"\nCREATE OR REPLACE TYPE "
				+ targetUser
				+ "."
				+ "ARRAY_TYPE"
				+ "\nIS"
				+ "\nTABLE OF VARCHAR2(50);\n";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("TYPEを作成しました");
	}

	// @Test
	public void createPackage() throws SQLException {
		System.out.println("パッケージ仕様部を作成します");

		sql =
			"\nCREATE OR REPLACE PACKAGE "
				+ targetUser
				+ "."
				+ "test_pack"
				+ "\nIS"
				+ "\n	arrayType ARRAY_TYPE;"
				+ "\n	FUNCTION out_put RETURN ARRAY_TYPE;"
				+ "\nEND;\n";

		nowStatement.execute(sql);
		System.out.println("パッケージを仕様部を作成しました");
	}

	// @Test
	public void createPackageBody() throws SQLException {
		System.out.println("パッケージ本体を作成します");

		sql =
			"\nCREATE OR REPLACE PACKAGE BODY "
				+ targetUser
				+ "."
				+ "test_pack"
				+ "\nIS"
				+ "\n	FUNCTION out_put RETURN ARRAY_TYPE"
				+ "\n		is"
				+ "\n		BEGIN"
				+ "\n 			SELECT NAME BULK COLLECT INTO arrayType from EMPLOYEETABLE;"
				+ "\n			RETURN arrayType;"
				+ "\n		END;"
				+ "\nEND;\n";

		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("パッケージを本体を作成しました");
	}

	// @Test
	public void execPackage() throws SQLException {
		System.out.println("パッケージを実行します");
		sql = "begin ? := " + targetUser + "." + "test_pack.out_put(); end;";
		System.out.println("実行パッケージ内FUNCTION : " + sql);
		CallableStatement cs = conn.prepareCall(sql);
		cs.registerOutParameter(1, OracleTypes.ARRAY, "ODU"
			+ "."
			+ "ARRAY_TYPE");
		cs.executeUpdate();
		Array array = cs.getArray(1);
		String[] str = (String[]) array.getArray();
		cs.close();
		System.out.println("パッケージ実行結果 : → :" + array);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("パッケージを実行しました");
	}

	// @Test
	public void dropPackage() throws SQLException {
		System.out.println("パッケージを削除します");
		sql = "DROP PACKAGE " + targetUser + "." + "test_pack";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("パッケージを削除しました");
	}

	// @Test
	public void dropType() throws SQLException {
		System.out.println("TYPEを削除します");
		sql = "DROP TYPE " + targetUser + "." + "ARRAY_TYPE";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("TYPEを削除しました");
	}

	// @Test
	public void createProcedureByJob() throws SQLException {
		System.out.println("JOB用プロシージャを作成します");
		sql =
			"\nCREATE OR REPLACE PROCEDURE "
				+ targetUser
				+ "."
				+ "deleteAllEmp "
				+ "\nIS "
				+ "\nBEGIN"
				+ "\n\tdelete from EMPLOYEETABLE;"
				+ "\nEND;\n";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("JOB用プロシージャを作成しました");
	}

	// @Test
	public void createJob() throws SQLException {
		System.out.println("JOBを作成します");
		sql =
			"\nBEGIN"
				+ "\n\tDBMS_SCHEDULER.CREATE_JOB ("
				+ "\n\tjob_name	=>	'"
				+ targetUser
				+ ".myjob',"
				+ "\n\tjob_type	=>	'STORED_PROCEDURE',"
				+ "\n\tjob_action =>'DELETEALLEMP');"
				+ "\nEND;\n";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("JOBを作成しました");
	}

	// @Test
	public void executeJob() throws SQLException {
		System.out.println("JOBを実行します");
		sql = "select * from " + targetUser + "." + "EMPLOYEETABLE";
		result = nowStatement.executeQuery(sql);
		while (result.next()) {
			String string = result.getString("name");
			System.out.println("selectデータ :→→→→→: " + string);
		}
		sql =
			"\nBEGIN"
				+ "\nDBMS_SCHEDULER.RUN_JOB ('"
				+ targetUser
				+ ".myjob');"
				+ "\nEND;\n";
		nowStatement.execute(sql);
		sql = "select * from " + targetUser + "." + "EMPLOYEETABLE";
		result = nowStatement.executeQuery(sql);
		if (!result.next()) {
			System.out.println("データ消えてる");
		}
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("JOBを実行しました");
	}

	// @Test
	public void dropProcedureByJob() throws SQLException {
		System.out.println("JOB用プロシージャを削除します");
		sql = "DROP PROCEDURE " + targetUser + "." + "deleteAllEmp";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("JOB用プロシージャを削除しました");
	}

	// @Test
	public void dropJob() throws SQLException {
		System.out.println("JOBを削除します");
		sql =
			"\nBEGIN"
				+ "\nDBMS_SCHEDULER.DROP_JOB ('"
				+ targetUser
				+ ".myjob'); "
				+ "\nEND;\n";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("JOBを削除しました");
	}

//	 @Test
	public void createLobTable() throws SQLException {
		System.out.println("LOBテーブルを作成します");
		sql =
			"CREATE TABLE "
				+ targetUser
				+ "."
				+ "IMGTABLE ( "
				+ "ID VARCHAR(4) NOT NULL primary key,"
				+ "fileName VARCHAR(20) not null,"
				+ "IMG BLOB)";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("LOBテーブルを作成しました");

	}

	// @Test
	public void insertBlob() throws SQLException, Exception {
		System.out.println("BLOBをinsertします");
		nowStatement = conn.createStatement();

		File file = new File("Sunset.jpg");

		StringBuffer sb =
			new StringBuffer("INSERT INTO "
				+ targetUser
				+ ".imgtable (id,fileName,img)");

		sb.append("VALUES(?,?,?)");

		nowPstatement = conn.prepareStatement(sb.toString());

		nowPstatement.setString(1, "01");
		nowPstatement.setString(2, file.getName());
		nowPstatement.setBinaryStream(3, new FileInputStream(file), (int) file
			.length());

		int cnt = nowPstatement.executeUpdate();
		System.out.println("BLOBをinsertしました");
	}

	// @Test
	public void selectBlob() throws SQLException, Exception {
		System.out.println("BLOBを取得します");
		nowPstatement =
			conn.prepareStatement(""
				+ "select img from "
				+ targetUser
				+ ".imgtable Where id = ?");

		nowPstatement.setString(1, "01");

		result = nowPstatement.executeQuery();

		int iData = 0;
		InputStream inputStream = null;
		BufferedInputStream bf = null;

		while (result.next()) {
			Blob blob = (Blob) result.getBlob(1);
			inputStream = blob.getBinaryStream();
		}

		bf = new BufferedInputStream(inputStream);

		FileOutputStream out = new FileOutputStream("copySunset.jpg");

		while ((iData = bf.read()) != -1) {
			out.write(iData);
		}
		System.out.println("BLOBを取得しました");
	}

//	 @Test
	public void dropLobTable() throws SQLException {
		System.out.println("テーブルを削除します");
		sql = "DROP TABLE " + targetUser + "." + "IMGTABLE purge";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("テーブルを削除しました");
	}
	
//	@Test
	public void loadJava() throws Exception{
		System.out.println("Javaをoracleにロードします");
		String user = connectionUser + "/" + connectionPass + "@sudaorcl";
		ProcessBuilder pb = new ProcessBuilder("CMD.EXE", "/C", "loadjava", "-user", user , "-schema" , targetUser , "C:\\Oscar.class" , ">", "stdout.txt", "2>", "stderr.txt");
//		ProcessBuilder pb = new ProcessBuilder("CMD.EXE", "/C", "loadjava", "-user", "odu/hogeodu@sudaorcl" , "C:\\Oscar.class" , ">", "stdout.txt", "2>", "stderr.txt");
		
		Process process = pb.start();
		
		process.waitFor();
		
		System.out.println("Javaをoracleにロードしました");
	}
	
//	@Test
	public void createJavaFunction() throws SQLException {
		System.out.println("Javaファンクションを作成します");

		sql =
			"\nCREATE or REPLACE FUNCTION "
				+ targetUser
				+ "."
				+ "javaFunc"
				+ "\nRETURN varchar2 "
				+ "\nIS LANGUAGE java"
				+ "\nNAME 'jp.co.suda.oracle.Oscar.quote() return java.lang.String';";

		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("Javaファンクションを作成しました");
	}
	
//	@Test
	public void execJavaFunction() throws SQLException{
		System.out.println("Javaファンクションを実行します");
		sql = "{? = call + " + targetUser + "." + "javaFunc}";
		CallableStatement cs = conn.prepareCall(sql);
		cs.registerOutParameter(1, Types.VARCHAR);
		cs.executeUpdate();
		String data = cs.getString(1);
		cs.close();
		System.out.println("Functionの戻り値 :→:" + data);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("Javaファンクションを実行しました");
	}
	
//	 @Test
	public void dropJavaFunction() throws SQLException {
		System.out.println("Javaファンクションを削除します");
		sql = "DROP FUNCTION " + targetUser + "." + "javaFunc";
		nowStatement.execute(sql);
		System.out.println("sql的には : " + sql + "を実行したからね");
		System.out.println("Javaファンクションを削除しました");
	}
	
//	 @Test
	public void dropJava() throws SQLException, Exception {
		System.out.println("Javaをクラスを削除します");
		String conuser = connectionUser + "/" + connectionPass + "@sudaorcl";
		ProcessBuilder pb = new ProcessBuilder("CMD.EXE", "/C", "dropjava", "-user", conuser , "-schema" , targetUser , "C:\\Oscar.class" , ">", "stdDROPout.txt", "2>", "stdDROPerr.txt");
		Process process = pb.start();
		
		InputStream is = process.getInputStream();
	    BufferedReader br = new BufferedReader(new InputStreamReader(is));
	    String line;
	    while ((line = br.readLine()) != null) {
	    	System.out.println(line.toString());
	    }
		process.waitFor();
		System.out.println("Javaをクラスを削除しました");
		
		System.out.println("JavaLOBテーブルを削除します");
		sql = "DROP TABLE " + targetUser + "." + "CREATE$JAVA$LOB$TABLE purge";
		nowStatement.execute(sql);
		System.out.println("JavaLOBテーブルを削除します");
		
	}
	
	
	
	
	@After
	public void tearDownMethod() {
		System.out.println("==================================== "
			+ testno
			+ " つめのテストを終了します ====================================");
		testno = testno + 1;
	}

	/**
	 * 
	 * クローズ処理
	 * 
	 * @throws Exception
	 */
	@AfterClass
	public static void teardown() throws Exception {
		DatabaseMetaData metaData = conn.getMetaData();
		System.out.println("");
		System.out.println("");
		System.out
			.println("接続ユーザ" + metaData.getUserName() + "のコネクションをクローズします");
		if (result != null) {
			result.close();
		}
		if (result != null) {
			nowStatement.close();
		}
		if (conn != null) {
			// ここでoracleのセッションも破棄される
			conn.close();
		}
	}

}