'기술/programming'에 해당되는 글 8건
- 2009.09.24 Microsoft REMIX09 / WEB 세미나중.
- 2009.03.05 시스템 관리자가 설치하지 못하도록 설정해 놓았습니다 3
- 2008.12.12 오라클에서 loadjava 사용하기
- 2008.11.07 FPS게임의 창시자 존 카멕의 게임과 삶
- 2008.10.30 toad 를 vista 에서 실행시 에러 날때...
- 2008.10.10 long raw type에 이미지 일괄 업로드 하는 프로그램(JAVA)
- 2008.09.30 TOAD Export 시 한글 깨짐 현상
- 2008.09.10 Weblogic Server 다운로드
DBA가 하면 금방할것 같은데 ㅡㅡ;
오라클에서 트리거를 등록하여 mssql로 데이터를 보내주어야 할일이 생기게 되었다.
오라클은 unix에 설치 되어 있고 mssql은 윈도우 서버에 설치 되어 있다.
원래는 pro-c로 짜려고 하였는데 proc는 라이센스를 사야 한다고 하여 방법을 찾다.
오라클에서 java클래스를 등록하고 procedure나 function에서 호출하여 사용하는 방법으로 하기로 했다.
사용 방법은
loadjava -user scott/tiger@tplanner -resolve -v SayHello.java
소스 내용중에 아래와 같이 mssql 드라이버를 로드 하여
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://10.17.0.1:1433;DatabaseName=Emer;";
보통 java 같으면 classpath에 sqljdbc.jar을 설정하고 javavm에서 실행 하면 되지만
오라클에서는 해당 jar파일을 스키마에 등록 해 줘야 한다. 이걸 몰라서 무지 고생했다.
등록하는 명령어는
loadjava -user scott/tiger -resolve -schema BLAKE serverObjs.jar
처럼 스키마에 등록을 해줘야 한다. (이걸 해결하려고 이틀을 인터넷 바다에 빠져 있었다 ㅡㅡ;)
그 후에 실행을 하면 권한이 없다 나올 경우
dba권한으로
exec dbms_java.grant_permission( 'BLAKE', 'SYS:java.net.SocketPermission', '10.17.0.1:1433', 'connect,resolve' )
를 실행시키후
실행시켜보면 잘 될것이다.
추후에 좀더 자세하게 적어 보자.
Long Row 타입에 ORACLE DB에 이미지 파일을 일괄적으로 업로드 하는 프로그램
잠시 DB 마이그레이션 지원 나왔다가 필요하게되 급하게 작성해 봄.
10008032_이나영_0000011395400.JPG 이런 형식으로 된 이미지 파일을 일괄 업로드 하는 프로그램
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class img_upload {
private Connection con;
private String driverName = "oracle.jdbc.driver.OracleDriver";
private String dbURL = "jdbc:oracle:thin:@00.21.00.0:1521:ORADB";
public img_upload(String filename) {
try {
Class.forName(driverName);
Connection con = DriverManager.getConnection(dbURL, "user", "pass");
File dir = new File(filename); -- 해당 디렉토리에 파일 목록을 가져 온다
String[] files = dir.list(); -- 배열에 쏙 담아 두고.
for(int i=0; i < files.length;i++){ -- 끝까지 마구 돌릴꺼다.
String img_name = files[i]; -- 파일명을 가져와서
int lst_idx = img_name.lastIndexOf("_"); -- 마지막 _를 찾는다.
String reg = img_name.substring(lst_idx+1, lst_idx+14); -- 주민번호를 가저 오기 위해 가차 없이 잘라 버린다.
String full_filename = filename + img_name; -- 전체 경로를 만들어
File file = new File(full_filename); -- 파일 객체에 담고
int fileLength = (int)file.length(); -- 크기도 가져 오고
InputStream fin = new FileInputStream(file); --스트림으로 읽어 버린다.
PreparedStatement pstmt =
con.prepareStatement("update tb_img set img = ?, IMGLEN = ? where id = (select id from tb_mas where reg = ?)");
pstmt.setBinaryStream(1, fin, fileLength); -- Long Raw 에 이미지를 넣는다
pstmt.setInt(2, fileLength); -- 파일 크기도 넣어준다.
pstmt.setString(3, reg); -- 그사람만 찾아서
pstmt.executeUpdate(); -- 걍 실행 시켜 준다.
pstmt.close(); -- 이걸 빼먹으면 커서수 초과했다는 에러를 만나보게 될것이다.
System.out.println(i + full_filename); -- 잘 올라가나 확인 해보자.
}
con.close();
}
catch(SQLException e) {
e.printStackTrace();
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
if(args[0] == null) {
System.out.println("사용법 : java [이미지 디렉토리]");
System.exit(0);
}
img_upload fileup = new img_upload(args[0]);
}
}
-----------------------------------------------------------------
테이블 스크립트
CREATE TABLE tb_IMG
(
ID VARCHAR2(32 BYTE) NOT NULL,
IMGLEN NUMBER(8),
IMG LONG RAW
)
TABLESPACE DAT
PCTUSED 0
PCTFREE 20
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 163M
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
LOGGING
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING;
개발용으로는 무료로 사용하실수 있습니다.
사이트 : http://commerce.bea.com/showallversions.jsp?family=WLS
다운로드 동영상
logon Account Information 부분에 아이디 비밀번호 이메일주소를 입력해주시고
나머지는 대충 입력혀서도 됩니다.