2012년 9월 12일 수요일

MSSQL 에서 IDENTITY 지정된 필드의 INSERT값 알아내기


MSSQL 에서 IDENTITY 지정된 필드의 INSERT값 알아내기

예를 들어 AA 라는 필드에 IDENTITY 가 걸려있는경우, 알아내기위해 쿼리를 다시 하지 않고..
INSERT 의 리턴값을 해당 필드값으로 반환받을 수 있다.

INSERT INTO 테이블명 ( 컬럼명1, 컬럼명2, ...)
 OUTPUT INSERTED.리턴받을 컬럼명 
 VALUES ( 컬럼값1, 컬럼값2, ...)

예)
         INSERT INTO TEST
            (
                  BB
                , CC
            )
            OUTPUT INSERTED.AA
            VALUES (
                , '1'
                , GETDATE()
            )

자바에서 Process 와 Runtime.getRuntime().exec()를 이용한 외부 프로그램 실행시..

자바에서 Process 와 Runtime.getRuntime().exec()를 이용한 외부 프로그램 실행시..
특정디렉토리에서 수행되도록 하는 경우.

주의할 점은 명령실행 후 출력되는 내용이 getInputStream()으로 대부분 나오지만,
간혹 getErrorStream() 으로 내보내지는 경우도 있으니, 둘다 확인해봐야 한다.




public class Test {

public static void main( String[] args ) {

try {

Process child = Runtime.getRuntime().exec( "java -version", null, new File( "D:\\Java\\jdk1.6.0_16\\bin\\" ) );

System.out.println( readAll( child ) );

child.waitFor();

System.out.println( child.exitValue() );
}
catch ( Exception e ) {

e.printStackTrace();
}
}

private static String readAll( Process child ) {

StringBuffer sb = new StringBuffer();

sb.append( read( child.getInputStream() ) ).append( "\n" );
sb.append( read( child.getErrorStream() ) );

/**
* (필수) OutputStream 을 닫는다.
* waitFor() 무한대기 방지를 위해
*/
try {
child.getOutputStream().close();
} catch (IOException e) {
e.printStackTrace();
}

return sb.toString().trim();
}

private static String read( InputStream in ) {

StringBuffer sb = new StringBuffer();

BufferedReader br = null;

try {

String line = null;

br = new BufferedReader( new InputStreamReader( in ));

while ( ( line = br.readLine() ) != null ) {

sb.append( line ).append( "\n" );
}

}
catch (IOException e) {
e.printStackTrace();
}
finally {

/**
* (필수) InputStream 을 닫는다.
* waitFor() 무한대기 방지를 위해
*/
try {

if ( br != null ) br.close ( );
} catch (IOException e) {
e.printStackTrace();
}
}

// 문자열의 앞/뒤 공백을 제거하고 담는다.
return Util.emptyString( sb.toString() ).trim();
}

}