본문 바로가기

[JAVA]

[JAVA]10월 19일 java 코드를 이용해 mysql서버에 접속, Statement, PreparedStatement, Connection

** java 코드를 이용해 mysql 서버에 접속해서 sql문을 날려주는법

java 코드로 mysql 클라이언트를 구현하려면 라이브러리가 필요하다.

라이브러리는 mysql 홈피에서도 받을 수 있고, mysql 설치된 폴더안에 lib 라는 폴더가 있는데 그안에서 가져오는 방법도 있고, 기타 다른곳에서 다운받아서 사용하자


java프로젝트에서 외부 라이브러리 활용하기 

외부 라이브러리 추가하는 방법과 프로젝트 내부에서 내부 참조하는 방법이 있다.

외부 참조 방식은 추가한 프로젝트가 다른환경에 갔을떄 경로에 대해 디팬던시 가 생김.

그래서 저는 프로젝트 내부에서 내부 참조 하는 방법을 설명 하겠다.


내부 참조 방법

프로젝트 내에 lib 라는 폴더를 생성해서 그안에 사용할 라이브러리 파일들을 위치.(방금전 위에서 설명했듯이 라이브러리를 받아와서)

→프로젝트 오른쪽클릭 해서 Properties 에 들어간다.

→왼쪽에 보면 Java Build Path 클릭해서

→상단에 보면 Libraries 눌러보면 JRE System Library 하나가 들어있다.

→그상태에서 우측에 보면 Add JARS...클릭

→위에서 프로젝트안 lib 폴더안에 넣어놓은 라이브러리를 찾아서 추가 누르고 확인.




하면 프로젝트안에 이렇게 생긴다.


  **jdbc를 이용해서 db에 sql을 날리는순서

1. jdbc라이브러리를 위한 클래스로딩(생략가능하지만 관습적으로 그냥 ㄱㄱ)

2. db server 와 연결된 connection 객체 획득

3. 날릴 sql문의 정보가 실린 statement구문 객체 생성

4. connection객체에 statement구문 투척

5. select 문일 경 4번투척의 결과물로 resultset객체 획득해서 결과값 읽기.


위설명을 코드로 작성해보면


그런데 Statement에 실어서 날리는 코드는 난잡해서 효울이 떨어진다.

그래서 저는 Statement 보단 Preparedstatement 에 구문을 실어서 날려보겠다.

추가로 사용자에게 입력받아서 레코드 저장!


public class InsertJDBTest {

public static void main(String[] args){

Connection connection = null;      //주의할점은 Cpnnection은 JAVA.sql 이다!!

String url = "jdbc:mysql://127.0.0.1:3306/sds";

String user = "root";

String password = "mysql";

//클래스 로딩

try {

Class.forName("com.mysql.jdbc.Driver");

//connection 객체 획득

connection = DriverManager.getConnection(url, user, password);

} catch (ClassNotFoundException e) {

// FIXME Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// FIXME Auto-generated catch block

e.printStackTrace();

}

   Scanner scan = new Scanner(System.in);

System.out.println("상품 아이디를 입력하세요");

int p_id = scan.nextInt();

scan.nextLine();

System.out.println("상품 이름을 입력하세요");

String p_name = scan.nextLine();

System.out.println("상품 가격을 입력해보세요");

double p_price = scan.nextDouble();

scan.nextLine();

System.out.println("상품 설명을 입력하세요");

String p_desc = scan.nextLine();

//sql문 정보를 가진 Preparedstatement구문을 만들어서 투척.

PreparedStatement pstmt = null;

try {

pstmt = connection

.prepareStatement("insert into product values(?,?,?,?)");

                //위 구문은 앞서 올린글에서 보았듯이 레코드 추가 하는 구문!

pstmt.setInt(1, p_id);            //앞에 숫자는 물음표 순서.

pstmt.setString(2, p_name);

pstmt.setDouble(3, p_price);

pstmt.setString(4, p_desc);

int result = pstmt.executeUpdate();

if(result > 0)

System.out.println("삽입성공");

else

System.out.println("실패함");

//pstmt의 구문투척 메소드가 3가지

//execute()  >> create table , drop table 등등

//executeQuery()  >>select 레코드 조회 

//executeUpdate() >> insert, update, delete 등 레코드 수정

} catch (SQLException e) {

// FIXME Auto-generated catch block

e.printStackTrace();

}finally{

if(pstmt != null)

try {

pstmt.close();

} catch (SQLException e) {

// FIXME Auto-generated catch block

e.printStackTrace();

}

}

}

}