728x90

 

import java.sql.Connection;
import java.sql.DriverManager;

public class Test1{
    public static Connection get() {
        Connection con=null;

        try{
            String id="아이디";
            String pw="패스워드";
            String url="jdbc:mysql://localhost:호스트넘버/스키마이름";

            Class.forName("com.mysql.cj.jdbc.Driver");
            //Class 클래스로 mysql 드라이버를 로딩하는 코드 =>DriverManager에 등록됨

            con= DriverManager.getConnection(url,id,pw);
            //Connection객체를 얻음
            //con은 실제로 데이터베이스와 연결하여 작업을 수행할 수 있는 통로로 작용하는 중요한 객체 변수로 사용됨

            System.out.println("DB에 연결됐다.");
        }
        catch (Exception e){
            System.out.println("로딩실패");
        }
        return con;
    }
}
import java.sql.*;

public class Test2 {
    public static void main(String[] args) throws SQLException {

        Connection con = null; //DB와 연결하는 인터페이스
        PreparedStatement psmt=null;
        ResultSet rs=null; //sql에 대한 반환 (쿼리 실행에 대한 결과값 저장)

        try{
            String que="select *from emp";

            con=Test1.get(); // DB연결

            psmt=con.prepareStatement(que);
            rs=psmt.executeQuery();

            //select -> executeQuery()
            //DML(insert, update, delete..) -> excuteUpdate();
            while(rs.next()){
                //DB에 있는 값들을 가져옴(행 기준)
                String empno=rs.getString(1);
                String ename=rs.getString(2);
                String job=rs.getString(3);
                int mgr=rs.getInt(4);
                Date hiredate=rs.getDate(5);
                int sal=rs.getInt(6);
                int comm=rs.getInt(7);
                int deptno=rs.getInt(8);

                System.out.println(empno+" "+ename+" "+job);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        rs.close();
        psmt.close();
        con.close();

    }
}

 


 

테이블 2개 생성

use 스키마이름;

create table users(
userid varchar(20) primary key,
username varchar(20) not null,
password varchar(20) not null,
age int(3) not null,
email varchar(40) not null);

create table boards(
bno int primary key auto_increment,
btitle varchar(100) not null,
bcontent longtext not null,
bwriter varchar(30) not null,
bdate datetime default now(),
bfilename varchar(50) null,
bfiledata longblob null); -- binary large object

desc boards;

 

JDBC 연결하기

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Jdbc1 {
	public static void main(String[] args) throws SQLException {
		
		Connection conn=null;
		
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			//Class클래스로 JDBC드라이버를 로딩되어지면서 DriverManager에 등록된다
			
			conn=DriverManager.getConnection(
			"jdbc:mysql://localhost:3306/스키마이름",
			"아이디",
			"비밀번호");
			//Connection객체 생성하여 데이터베이스와 연결이 이루어지도록 한다
		}catch(Exception e) {}

		conn.close();  //연결끊기
	}

}

 

MySQL 데이터베이스에 새로운 사용자 정보를 삽입

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class jdbc1 {
    public static void main(String[] args) throws SQLException {

        Connection conn = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            //Class클래스로 JDBC드라이버를 로딩되어 지면서 DriverManager에 등록된다

            conn= DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/khw","root","0000");
            //  Connection 객체 생성하여 DB와 연결이 이루어지도록 함

            String sql="insert into users(userid,username,password,age,email)"
                        +"values(?,?,?,?,?)";

            PreparedStatement pstmt = conn.prepareStatement(sql);
            // ? : 바인드 변수 -> 매번 값이 바뀔 수 있기 때문에 미리 정해 놓지 않는다
            // setXXX (순서, 데이터)
            pstmt.setString(1, "com");
            pstmt.setString(2, "tom");
            pstmt.setString(3, "1234");
            pstmt.setInt(4, 49);
            pstmt.setString(5,"aa@naver.com");

            int r = pstmt.executeUpdate();
            //executeXXX : 쿼리문 실행되기 위해 호출하는 메소드
            System.out.println(r);

            pstmt.close();

        } catch (Exception e){}

        conn.close(); // 연결끊기

    }
}

 

MySQL 데이터베이스에 게시글을 삽입

package jdbc;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class BoardInsert {
    public static void main(String[] args) {
        Connection conn = null;
        try {

            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/khw", "root", "0000");

            String sql = "INSERT INTO boards (btitle, bcontent, bwriter, bdate, bfilename,bfiledata) "
                    + "VALUES (?, ?, ?, now(), ?, ?)";

            PreparedStatement pstmt = conn.prepareStatement(sql,
                    Statement.RETURN_GENERATED_KEYS);
//자동증가된 bno값 가져옴
            pstmt.setString(1, "금요일");
            pstmt.setString(2, "금요일입니다");
            pstmt.setString(3, "juli");
            pstmt.setString(4, "뤂");
            pstmt.setBlob(5, new FileInputStream
                    ("C:\\Users\\Kang\\Pictures/고죠사토루.jfif"));

            int r=pstmt.executeUpdate();
            System.out.println(r); //갱신된 행의 개수

            if(r==1) {
                ResultSet rs=pstmt.getGeneratedKeys(); //bno값
                if(rs.next()) {
                    int bno=rs.getInt(1);
                    System.out.println("게시글 수 "+bno);
                }
                rs.close();
            }
            pstmt.close();
            conn.close();
        }catch(Exception e) {}
    }
}

 

MySQL 데이터베이스의 게시글을 업데이트

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class BoardUpdate {
public static void main(String[] args) throws SQLException {
Connection conn = null;
try {

Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/sjw", "root", "1234");

String sql = new StringBuilder()
.append("UPDATE boards SET ")
.append("btitle= ?, ")
.append("bcontent= ?, ")
.append("bfilename= ?, ")
.append("bfiledata= ? ")
.append("WHERE bno= ?")
.toString();

PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setString(1, "hi");
pstmt.setString(2, "hello");
pstmt.setString(3, "루피.jpg");
pstmt.setBlob(4, new FileInputStream
("C://Users//itcamp//Desktop/짱구.jpg"));
pstmt.setInt(5,1);

int r=pstmt.executeUpdate();
System.out.println("수정된 행 개수" + r);
pstmt.close();


}catch(Exception e) {}
conn.close();
}

}

 

 

클래스를 사용하여 데이터베이스 작업을 수행/ 사용자 정보를 데이터베이스에 삽입하거나 가져오는 등의 작업 가능

package jdbc;

public class User {
    private String userid;
    private String username;
    private String password;
    private int age;
    private String  email;

    public String getUserid() {
        return userid;
    }

    public void setUserid(String userid) {
        this.userid = userid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
    @Override
public String toString(){
        return userid+" "+username+" "+email;
}

}
// 테이블에서 User정보를 가져온 후 콘솔에 출력하기를 원함

 

 

JDBC를 사용하여 MySQL 데이터베이스에서 사용자 정보를 선택하고 출력

package jdbc;

import java.sql.*;

public class UserSelect {
    public static void main(String[] args) throws SQLException {
        // 테이블에서 User정보를 가져온 후 콘솔에 출력하기를 원함


        Connection conn = null;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            //Class클래스로 JDBC드라이버를 로딩되어 지면서 DriverManager에 등록된다

            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/khw", "root", "0000");
            //  Connection 객체 생성하여 DB와 연결이 이루어지도록 함

            String sql = "select *from users where userid=?";

            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, "com");

            //ResultSet : 반환값이 여러 개의 행인 경우에 쉽게 처리할 수 있게 설계된 클래스
            ResultSet rs = pstmt.executeQuery(); //정보들 가져옴
            if (rs.next()) {
                User u = new User();
                u.setUserid(rs.getString(1));
                //테이블에 저장되어 있는 userid값을 가져와서 User클래승 userid라는 필드에 세팅
                u.setUsername(rs.getString("username"));
                u.setPassword(rs.getString(3));
                u.setAge(rs.getInt(4));
                u.setEmail(rs.getString(5));

                System.out.println(u);
            }
            rs.close();
            pstmt.close();
        } catch (Exception e) {
        }
        conn.close();
    }
}

 

 

게시글 정보를 표현하는 Board 클래스를 정의

package jdbc;

import java.sql.Blob;
import java.util.Date;


public class Board {

    private int bno;
    private String btitle;
    private String bcontent;
    private String bwriter;
    private Date bdate;
    private String bfilename;
    private Blob bfiledata;

    @Override
    public String toString() {
        return btitle+" "+bwriter;
    }


    public int getBno() {
        return bno;
    }

    public void setBno(int bno) {
        this.bno = bno;
    }

    public String getBtitle() {
        return btitle;
    }

    public void setBtitle(String btitle) {
        this.btitle = btitle;
    }

    public String getBcontent() {
        return bcontent;
    }

    public void setBcontent(String bcontent) {
        this.bcontent = bcontent;
    }

    public String getBwriter() {
        return bwriter;
    }

    public void setBwriter(String bwriter) {
        this.bwriter = bwriter;
    }

    public Date getBdate() {
        return bdate;
    }

    public void setBdate(Date bdate) {
        this.bdate = bdate;
    }

    public String getBfilename() {
        return bfilename;
    }

    public void setBfilename(String bfilename) {
        this.bfilename = bfilename;
    }

    public Blob getBfiledata() {
        return bfiledata;
    }

    public void setBfiledata(Blob bfiledata) {
        this.bfiledata = bfiledata;
    }


}

 

 

JDBC를 사용하여 MySQL 데이터베이스에서 게시글 정보를 선택하고 출력

package jdbc;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.*;

public class BoardSelect {
    public static void main(String[] args) throws SQLException {

        Connection conn = null;
        try {

            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/khw", "root", "0000");

            String sql = "select *from boards where bno=?";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, 2);
            //bno값이 2인 테이블 정보 다 가져옴

            ResultSet rs=pstmt.executeQuery();
            while(rs.next()) {
                Board bo=new Board();
                bo.setBno(rs.getInt(1));
                bo.setBtitle(rs.getString("btitle"));
                bo.setBcontent(rs.getString(3));
                bo.setBwriter(rs.getString(4));
                bo.setBdate(rs.getDate(5));
                bo.setBfilename(rs.getString(6));
                bo.setBfiledata(rs.getBlob(7));

                System.out.println(bo);


                Blob b=bo.getBfiledata();
                if(b!=null) { //이미지 있음
                    InputStream is= b.getBinaryStream();
                    OutputStream os=new FileOutputStream("C:\\Users\\Kang"+ bo.getBfilename());

                    is.transferTo(os);
                    os.flush();
                    os.close();
                    is.close();
                }

            }
            rs.close();
            pstmt.close();
        }catch(Exception e) {}
        conn.close();
    }
    }

 

 

 

728x90

'DBMS' 카테고리의 다른 글

[DBMS] 제약조건  (0) 2024.03.15
[DBMS] Key  (0) 2024.03.15
DBMS(계속..)  (0) 2024.03.13

+ Recent posts