-
210503_1~4(mysql연동프로그램)JAVA(Sol)(정리대기중..언젠가) 2021. 5. 3. 12:19
연동 프로그램 작성
1.Connection con <===연동정보를 담고있다
|
2.Statement stmt <=== 쿼리 sql을 작성하고 실행하는 객체
|
3. ResultSet rs <=== 쿼리 실행 결과를 저장하는 가리키고 처리할수 있는 객체
서로연동해서 객체를 만드는것(세트로생각)1번과 2번은 DML(Data Manipulation Language)(insert,update,delete) 문장에서 나옴
<====executeUpdate(sql)로 실행
1번, 2번, 3번은 DQL(Data Query Language)문장에서 나옴 --->select
<=== executeQuery(sql)로 실행
데이타베이스,네트워크,파일은 사용후 반드시 닫는다.
물론 사용하지 않으면 닫지 않아도 된다.
생성 순서의 역순으로 닫는다. 3-->2-->1
3 rs.close(); ==> 실제로는 확인하고 닫는다. if(rs!=null){rs.close()};
2 stmt.close();
1 con.close();
-------------------------mysql에서 테이블먼저생성후
create table owner_info
(
id int not null primary key, # 주민번호
nm varchar(50) null, # 이름
handphone varchar(50), #핸드폰
gender varchar(4) null # 성별 #<=== 영어 4Byte, 한글 4글자..
) engine = innodb default charset= euckr; #<==트랜잭션과 한글지원cf) euckr ===> 영어 latin1 + 한글 완성형 한글 : 글자 하나가 2byte
uft8 ===> 영어 + 한글 (다국어) : 1~3 바이트 가변처리
euc-kr <--- 상호 호환 안됨 ---> UTF-8
INSERTDB
package chapter27; import java.sql.*; public class InsertDB { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; Connection con = null; Statement stmt = null; ResultSet rs = null; //dml문장이기때문에 안나옴 try { Class.forName("org.gjt.mm.mysql.Driver"); //드라이버를 동적으로 로딩하시오 } catch (java.lang.ClassNotFoundException e) { System.out.println("드라이버를 찾지 못했습니다."); System.out.println(e.getMessage()); } try { con = DriverManager.getConnection(url, "javauser", "1234"); //연동객체 생성 String sqlStr = "INSERT INTO owner_info (id,nm,handphone,gender) VALUES" + "(2,'아로미','000-111-2222','여')"; //sql문장을 만들었다 stmt = con.createStatement(); //statement인스턴스생성 stmt.executeUpdate(sqlStr); //sqlStr을 db에서실행하라 System.out.println("레코드가 추가되었습니다."); } catch (SQLException e) { System.out.println("SQLException : " + e.getMessage()); } finally { try { stmt.close(); //생성된객체는 반드시 닫는다 con.close(); } catch (Exception e) { System.out.println(e.toString()); } } } }
con =DriverManager.getConnection(url, "javauser", "1234");
int cnt = INSERT, UPDATE, DELETE<====executeUpdate(sql)로 실행 #실행하고 반환형이 정수이다
resultSet rs = SELECT<=== executeQuery(sql)로 실행 반환형이 resultSet이다.
SelectDB
package chapter27; import java.sql.*; public class SelectDB { public static void main(String[] args) { String url = "jdbc:mysql://127.0.0.1:3306/javadb?useUnicode=true&characterEncoding=euckr"; //연동문구 url Connection DbCon = null; Statement stmt = null; ResultSet rs = null; //select문이 나왔기때문에 사용 try { Class.forName("org.gjt.mm.mysql.Driver"); //드라이버 로딩 } catch (java.lang.ClassNotFoundException e) { System.out.println("ClassNotFoundException :"); System.out.println(e.getMessage()); } try { DbCon = DriverManager.getConnection(url, "javauser", "1234"); //(주소,권한)을가지고 연동 stmt = DbCon.createStatement(); //연동객체로 스테이트먼트생성 String sqlStr = "SELECT id, nm, handphone,gender FROM owner_info"; rs = stmt.executeQuery(sqlStr); //executeQuery 반드시 resultset으로 반환 while (rs.next()) { //모든행을 읽을때까지 반복 String id = rs.getString(1); //인덱스번호=셀렉트절에 명기된 컬럼의 순서 String name = rs.getString(2); String phone = rs.getString("handphone"); String gender = rs.getString("gender"); System.out.println(id + " " + name + " " + phone + " " + gender); } } catch (SQLException e) { System.out.println("SQLException : " + e.toString()); } finally { try { rs.close(); stmt.close(); DbCon.close(); } catch (Exception e) { System.out.println(e.toString()); } } } } //2 아로미 000-111-2222 여
Update DB
package chapter27; import java.sql.*; public class UpdateDB { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; Connection DbCon = null; Statement stmt = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (java.lang.ClassNotFoundException e) { System.out.println("ClassNotFoundException :"); System.out.println(e.getMessage()); } try { DbCon = DriverManager.getConnection(url, "javauser", "1234"); stmt = DbCon.createStatement(); String sqlStr = "UPDATE owner_info SET handphone = 'XXX-XXXX-XXXX' WHERE id=2"; stmt.executeUpdate(sqlStr); System.out.println("레코드가 수정되었습니다."); } catch (SQLException e) { System.out.println("SQLException : " + e.getMessage()); } finally { try { stmt.close(); DbCon.close(); } catch (Exception e) { System.out.println(e.toString()); } } } }
owner_info "+"SET handphone = 'XXX-XXXX-XXXX' WHERE id=8이부분이 자꾸 에러나서 "+"부분을 지워버렸더니 잘됐다..DeleteDB
package chapter27; import java.sql.*; public class DeleteDB { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; Connection DbCon = null; Statement stmt = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (java.lang.ClassNotFoundException e) { System.err.println("ClassNotFoundException"); System.err.println(e.getMessage()); } try { DbCon = DriverManager.getConnection(url, "javauser", "1234"); stmt = DbCon.createStatement(); String sqlStr = "DELETE FROM owner_info WHERE id = 2"; stmt.execute(sqlStr); System.out.println("레코드를 삭제했습니다."); } catch (SQLException e) { System.out.println("SQLException : " + e.getMessage()); } finally { try { stmt.close(); DbCon.close(); } catch (Exception e) { System.out.println(e.toString()); } } } }
PreparedStatement
-------------------
PreparedStatement : 쿼리를 미리 컴파일한다. 실행속도가 빠름 / 추천한다. 모든DB가 지원하는 것은 아니다.
----------------------------------------------sql 적용되는 시점
인스턴스생성 실행시 Statement X SQL PreparedStatement SQL X 위의 내용은 코딩시 에러가 나지 않기때문에조심해야한다.
동적데이타 (미리컴파일 불가능한 부분은)은 ? 로 대체하고,
나중에 생성후 pstmt.set데이타형(1(인덱스),"값") 형식으로 초기화한다.
package chapter27; import java.sql.*; public class InsertPrepDB { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; Connection con = null; //연결객체 PreparedStatement pstmt = null; // preparestatement 미리쿼리를 컴파일한다 try { Class.forName("org.gjt.mm.mysql.Driver");//드라이버로딩 } catch (java.lang.ClassNotFoundException e) { System.out.println("드라이버를 찾지 못했습니다."); System.out.println(e.getMessage()); } try { con = DriverManager.getConnection(url, "javauser", "1234"); //서버연결 String sqlStr = "INSERT INTO owner_info(id,nm,handphone,gender) values" + "(?,?,?,?)"; //인서트문장 동적데이터는?로 빼놓을수있다 뒤에set으로 // sqlStr로 미리 작성해놓고 객체화해서 pstmt = con.prepareStatement(sqlStr); // 나중에 pstmt에 넣응다. //prepare인스턴스생성시 sql이 들어간다. pstmt.setInt(1, 10); //sqlstr작성시했던 ?를 set으로 pstmt.setString(2, "홍길동"); pstmt.setString(3, "999-9999-9999"); pstmt.setString(4, "남"); pstmt.executeUpdate(); System.out.println("레코드가 추가되었습니다."); } catch (SQLException e) { System.out.println("SQLException : " + e.getMessage()); } finally { try { pstmt.close(); con.close(); } catch (Exception e) { System.out.println(e.toString()); } } } }
package chapter27; import java.sql.*; public class PrepDB { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; //select문 try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (java.lang.ClassNotFoundException e) { System.out.println("ClassNotFoundException :"); System.out.println(e.getMessage()); } try { con = DriverManager.getConnection(url, "javauser", "1234"); String sqlStr = "SELECT * FROM owner_info WHERE ID = ?"; pstmt = con.prepareStatement(sqlStr); pstmt.setInt(1, 10); rs = pstmt.executeQuery(); while (rs.next()) { //뷰로직 System.out.println("번호 : " + rs.getString("id") + " "); System.out.println("성명 : " + rs.getString("nm") + " "); System.out.println("핸드폰 번호 : " + rs.getString("handphone") + " "); System.out.println("성별 : " + rs.getString("gender") + " "); } } catch (SQLException e) { System.out.println("SQLException :" + e.getMessage()); } finally { try { rs.close(); //자원반납 pstmt.close(); con.close(); } catch (Exception e) { System.out.println(e.toString()); } } } } //번호 : 10 //성명 : 홍길동 //핸드폰 번호 : 999-9999-9999 //성별 : 남
앞에 컬럼네임 꺼내와보고싶어서 수정해봄
package chapter27; import java.sql.*; public class PrepDB { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/javadb?useUnicode=true&characterEncoding=euckr"; Connection con = null; //연결객체 PreparedStatement pstmt = null; //preparestatement객체 ResultSet rs = null; //select문 try { Class.forName("org.gjt.mm.mysql.Driver"); //드라이버불러오기 } catch (java.lang.ClassNotFoundException e) { System.out.println("ClassNotFoundException :"); System.out.println(e.getMessage()); } try { con = DriverManager.getConnection(url, "javauser", "1234"); //드라이버 연결 String sqlStr = "SELECT * FROM owner_info WHERE ID = ?"; //sql문을 sqlStr에 넣어놓고 pstmt = con.prepareStatement(sqlStr); //생성 pstmt.setInt(1, 10); //1번인덱스를 10으로 둔다 rs = pstmt.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); while (rs.next()) { //뷰로직 System.out.println(rsmd.getColumnName(1)+":\t\t" + rs.getString("id") + " "); System.out.println(rsmd.getColumnName(2)+":\t\t" + rs.getString("nm") + " "); System.out.println(rsmd.getColumnName(3)+":\t" + rs.getString("handphone") + " "); System.out.println(rsmd.getColumnName(4)+":\t\t" + rs.getString("gender") + " "); } } catch (SQLException e) { System.out.println("SQLException :" + e.getMessage()); } finally { try { rs.close(); //자원반납 pstmt.close(); con.close(); } catch (Exception e) { System.out.println(e.toString()); } } } } //id: 10 //nm: 홍길동 //handphone: 999-9999-9999 //gender: 남
'JAVA(Sol)(정리대기중..언젠가)' 카테고리의 다른 글
210504_1~4(WindowListener, WindowAdapter) (0) 2021.05.04 210503_5~8(java.awt.* / javax.swing.*/GUI 프로그래밍/이벤트처리) (0) 2021.05.03 210428_7~8(채팅서버) (0) 2021.04.28 210428_5~6(서버,클라이언트 멀티스레드의 적용) (0) 2021.04.28 210428_1~4(네트워크,사설ip/ 공인ip , 서버,클라이언트) (0) 2021.04.28