package org.comstudy.dbcp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JdbcUtil {
private static String className = "org.mariadb.jdbc.Driver";
private static String url = "jdbc:mariadb://localhost:3306/myapp";
private static String user = "myuser";
private static String password = "12345";
private static Connection conn;
public static Connection getConnection() {
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void close(Connection conn) {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println(getConnection());
}
}
package org.comstudy.myapp.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.comstudy.dbcp.JdbcUtil;
//테이블명과 클래스명 동일하게
public class UserDAO {
private String SELECT_ALL="SELECT * FROM users";
private Connection conn;
// Statement를 상속 받는 PreparedStatement타입의 객체 생성
private PreparedStatement stmt;
private ResultSet rs;
public List<UserDTO> selectAll() {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(SELECT_ALL);
// connection 클래스를 상속받는 prepareStatement메소드
// connection객체를 prepareStatement메소드를 통해
//PreparedStatement타입의을 반환한다. 즉, 다른구문
rs = stmt.executeQuery();
while(rs.next()) {
int no = rs.getInt("no");
String id = rs.getString("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.printf("%d, %s, %s, %d\n", no, id, name, age);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
UserDAO dao = new UserDAO();
dao.selectAll();
}
}
package org.comstudy.myapp.model;
public class UserDTO {
private int no;
private String id;
private String name;
private int age;
public UserDTO() {
this(0,"","",0);
}
public UserDTO(int no, String id, String name, int age) {
// TODO Auto-generated constructor stub
this.age = age;
this.id = id;
this.name = name;
this.no = no;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
}
}
Name/Type Version 선택 -> jar list에서 mariaDB Client.jar 파일 선택하고 나머지 파일 remove -> properties에서 JdbcUtil에 정의한 url로 복붙 -> className 복붙 -> userid와 password 복붙
로그인 후 test connection -> finish
코드 드래그&우클릭 -> Execute Selected Text후 에러가 없으면 -> JdbcUtil main 실행
drop table if exists users;
create table if not exists users(
no int not null primary key auto_increment,
id varchar(20) not null,
name varchar(20),
age int
);
show tables;
insert into users(id, name, age) values('ddong','홍길동',25);
insert into users(id, name, age) values('kim','김길동',25);
insert into users(id, name, age) values('park','박길동',25);
select *from users;
commit;
public static void close(Connection conn) {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement conn) {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet conn) {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//메소드 오버로딩
public static void close(Connection conn, PreparedStatement stmt, ResultSet rs) {
// TODO Auto-generated method stub
close(rs);
close(stmt);
close(conn);
// 열린 순서의 역순으로 메소드들을 닫아야한다.
}
public class UserDAO {
// '?'에 변수명을 넣어주면 됨
private static String SELECT_ALL = "SELECT * FROM USERS";
private static String SELECT_ONE = "SELECT * FROM USERS WHERE no=?";
private static String INSERT = "INSERT INTO USERS(id,name,age) values(?,?,?)";
private static String UPDATE = "UPDATE USERS SET ID=?,NAME=?,AGE=? WHERE NO=?";
private static String DELETE = "DELETE FROM USERS WHERE NO=?";
private void commitCheck(int cnt) {
try {
if (cnt > 0) {
conn.commit();
} else {
conn.rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void insert(UserDTO dto) {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(INSERT);
stmt.setString(1, dto.getId());
stmt.setString(2, dto.getName());
stmt.setInt(3, dto.getAge());
commitCheck( stmt.executeUpdate() );// 처리 횟수가 리턴된다.
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
}
public void update(UserDTO dto) {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(UPDATE);
stmt.setString(1, dto.getId());
stmt.setString(2, dto.getName());
stmt.setInt(3, dto.getAge());
stmt.setInt(4, dto.getNo());
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
}
public void delete(UserDTO dto) {
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(DELETE);
stmt.setInt(1, dto.getNo());
commitCheck(stmt.executeUpdate());
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
}
public UserDTO selectOne(UserDTO dto) {
UserDTO user = null;
try {
conn = JdbcUtil.getConnection();
stmt = conn.prepareStatement(SELECT_ONE);
stmt.setInt(1, dto.getNo());
rs = stmt.executeQuery();
if (rs.next()) {
int no = rs.getInt(1);
String id = rs.getString(2);
String name = rs.getString(3);
int age = rs.getInt(4);
user = new UserDTO(no, id, name, age);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(conn, stmt, rs);
}
return user;
}
public static void main(String[] args) {
UserDAO dao = new UserDAO();
List<UserDTO> list = dao.selectAll();
for (UserDTO user : list) {
System.out.println(user);
}
}