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();
}
}