JDBC를 이용한 데이터베이스 활용법
// 1. 대표 클래스를 로딩한다.
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
System.err.println("클래스 로딩 성공");
}
catch(ClassNotFoundException e){
System.err.println("클래스 로딩 오류 : " + e);
}
// 2. Contection 객체를 얻는다.
try{
con = DriverManager.getConnection(jdbcurl, id, pw);
System.out.println("정상접속");
// 3. Statment 객체를 얻는다.
stmt = con.createStatement();
// 4. SQL 구문을 실행한다.
sql = "create table jdbca(a number, b varchar(20))";
result = stmt.execute(sql);
또는 prepareStatement 인터페이스를 사용할 수 있음
sql = "update friend set name = ?, tel = ?, addr = ?, memo = ? where num = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, inputName);
pstmt.setString(2, inputTel);
pstmt.setString(3, inputAddr);
pstmt.setString(4, inputMemo);
pstmt.setInt(5, inputNum);
pstmt.executeUpdate();
/////////////////////////////////////////////////////////////////////////
DML(insert,update,delete) - execute(String sql);
DDL(create,alter,drop) - executeUpdate(String sql);
DCL(grant,revoke) - execute(String sql)
select - executeQuery(String sql);
-- 자바에서 사용 할 때에는 쿼리문 끝에 세미콜론을 사용하지 않는다.
INSERT INTO table_name (컬럼명, 컬럼명) VALUES (값, 값);
INSERT INTO table_name (컬럼명, 컬럼명) VALUES (값, 값) subquery; // 다중 삽입
UPDATE table_name SET column1 = value, column2 = value WHERE condition;
UPDATE table_name SET column1, column2 = (SELECT column1, column2 FROM table_name WHERE condition) value WHERE condition;
DELETE 테이블명 WHERE 컬럼명 > 3000;
DELETE 테이블명 WHERE 1 = 1;
create table it(
a number primary key,
b varchar2(10)
);
DROP TABLE table_name CASCADE CONSTRAINT
GRANT connect, resource TO test;
/////////////////////////////////////////////////////////////////////////
일반적으로 close 해줘야 하는 것들
if(rst != null) rst.close();
if(stmt != null) stmt.close();
if(con != null) con.close();
JDBC
JDBC 파일 복사하여 놓기)
C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar
파일을 아래 디렉토리 경로에 복사하여 붙여놓는다
C:\Java\jdk6\lib\ext
이유는 위 경로가 자바의 기본 경로이기 때문에 해당 경로에 넣어두게 되면 자바 어디에서든지 사용할 수 있게 된다.
JDBC 버전과 JDK 버전 매치
JDBC 1.0 -<---> JDK 1.2 -- JDBC - ODBC 브릿지
JDBC 2.0 -<---> JDK 1.3 -- Native Code Type X
-- 2.0으로 오면서 'Cursor 관리'가 가능해지면서, 커서의 이동이 next 뿐만 아니라 previous가 가능해졌다.
JDBC 3.0 -<---> JDK 1.4 -- 미들웨어 버전
JDBC 4.0 -<---> JDK 5.0 -- 상용화 버전
///////////////////////////////////////////////////////////////////
Class 정적 로딩과 동적 로딩
Sam s; // 정적 로딩
Class.forName("Sam"); // 동적 로딩
Sam s는 Sam이라는 클래스가 없을 경우 컴파일 시 에러가 나게 되지만, Class.forName()을 사용하게 되면 컴파일 시에는 에러가 나지 않지만 Runtime시 에러가 발생하게 된다.
///////////////////////////////////////////////////////////////////
java.sql 패키지의 DriverManager 클래스
일련의 JDBC 드라이버를 관리하기 위한 기본적인 서비스
기본 연결 예제)
import java.sql.*;
public class JDBCTest{
public JDBCTest(){
// 1. 대표 클래스를 로딩한다.
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException e){
System.err.println("클래스 로딩 오류 : " + e);
}
// 2. Contection 객체를 얻는다.
// jdbcurl : jdbc:oracle:thin:@IP:Port:ListenerName
// jdbcurl : jdbc:oracle:thin:ID/PASS@IP;Port:ListenerName
String jdbcurl = "jdbc:oracle:thin:@192.168.0.33:1521:darkhi";
String id = "scott";
String pw = "tiger";
// 아래처럼 url,id,pw를 결합형으로 사용할 수도 있다.
//String jdbcurl = "jdbc:oracle:thin:scott/tiger@192.168.0.33:1521:darkhi";
try{
Connection con = DriverManager.getConnection(jdbcurl, id, pw);
System.out.println("정상접속");
}
catch(SQLException sqle){
System.out.println("접속오류");
}
}
public static void main(String[] args)
{
new JDBCTest();
}
}
///////////////////////////////////////////////////////////////////
use strict;http://www.perl.com/pub/a/2002/08/20/perlandlwp.html?page=2
use warnings;
use LWP 5.64;
my $browser = LWP::UserAgent->new;
my $url = 'http://rain9.com/api/save_replays.php';
for(my $i=1;$i<=300;$i++)
{
my $response = $browser->post($url,['winner' => '0', 'losses0' => '33', 'point0' => '9999', 'losses1' => '74', 'point1' => '4', 'id0' => '2666379', 'id1' => '1564987', 'seed' => '0415000000000000', 'wins0' => '18', 'wins1' => 42]);
die "$url error: ", $response->status_line
unless $response->is_success;
die "Weird content type at $url -- ", $response->content_type
unless $response->content_type eq 'text/html';
# failed라는 단어가 있으면 failed 출력
if( $response->content =~ m{failed} ) {
print "failed!!!\n";
} else {
print "secess!!\n";
}
}
음.... 급하게 http post 데이터 날릴일이 있어서 검색해서 급조....
그런데 서버가 해외 서버라 그런지 응답 속도가 너무 느려서 300번 도는데 하루종일 걸리길래
perl test.pl & 로 백그라운드로 10개 동시에 돌려버렸음.......
쉽게쉽게 쓰기 좋다.....

not as usual