<14:30 5교시>
package test.main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class MainClass02 {
public static void main(String[] args) {
//member 테이블에 추가할 회원의 정보라고 가정하기
int num=1;
String name="김구라";
String addr="노량진";
Connection conn=null;
try {
//오라클 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//접속할 DB 의 정보 @아이피주소:port번호:db이름
String url="jdbc:oracle:thin:@localhost:1521:xe";
//계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
conn=DriverManager.getConnection(url, "scott", "TIGER");
//예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
System.out.println("Oracle DB 접속 성공");
} catch (Exception e) {
e.printStackTrace();
}
PreparedStatement pstmt=null;
try {
//실행할 미완성의 sql문
String sql="""
Insert into member
(num, name,addr)
Values(?,?,?)
""";
//미완성의 sql문을 전달하면서 PreparedStatement 객체의 참조값 얻어내기
pstmt=conn.prepareStatement(sql);
//미완성인 sql 문 완성 시키기(?에순서대로 값 바인딩하기)
pstmt.setInt(1, num);
pstmt.setString(2, name);
pstmt.setString(3, addr);
//sql문 실행하기
pstmt.executeUpdate();//insert,update,delete는 모두 exectueUpdate()를 호출하면 됨
System.out.println("회원정보를 저장했습니다");
}catch(Exception e){
e.printStackTrace();
}
}
}
위에 코드에서 지역변수 num, name, addr에 대입하는 값을 다르게 하면 다른 값들도 입력이 되는데, 아무래도 이 부분을 inputstream과 outputstream 류 객체들을 이용하면 인터넷에서 입력된 정보를 데이터베이스에 입력하는 형태의 웹서버 앱을 만드는 것이 관건인듯.
예제)
//수정할 회원의 정보라고 가정하자
int num=1;//primary key
String name="에이콘";
String addr ="강남";
//위 정보대로 1번 회원의 이름을 에이콘, 주소를 강남으로 수정하는 프로그래밍 해보기
UPDATE 문 까먹고 있었음.... 휴....ㅠㅠ
더보기
package test.main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class MainClass03 {
public static void main(String[] args) {
//수정할 회원의 정보라고 가정하자
int num=1;//primary key
String name="에이콘";
String addr ="강남";
//위 정보대로 1번 회원의 이름을 에이콘, 주소를 강남으로 수정하는 프로그래밍 해보기
Connection conn=null;
try {
//오라클 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//접속할 DB 의 정보 @아이피주소:port번호:db이름
String url="jdbc:oracle:thin:@localhost:1521:xe";
//계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
conn=DriverManager.getConnection(url, "scott", "TIGER");
//예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
System.out.println("Oracle DB 접속 성공");
} catch (Exception e) {
e.printStackTrace();
}
PreparedStatement pstmt=null;
try {
//실행할 미완성의 sql문
String sql="""
update member
set name=?, addr=?
where num=?
""";
//미완성의 sql문을 전달하면서 PreparedStatement 객체의 참조값 얻어내기
pstmt=conn.prepareStatement(sql);
//미완성인 sql 문 완성 시키기(?에순서대로 값 바인딩하기)
pstmt.setInt(3, num);
pstmt.setString(1, name);
pstmt.setString(2, addr);
//sql문 실행하기
pstmt.executeUpdate();//insert,update,delete는 모두 exectueUpdate()를 호출하면 됨
System.out.println("회원정보를 업데이트했습니다");
}catch(Exception e){
e.printStackTrace();
}
}
}
DELETE 문도 까먹고 있었음...
더보기
package test.main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class MainClass04 {
public static void main(String[] args) {
//삭제할 회원의 PK라고 가정
int num=1;
//실제로 삭제하는 프로그래밍 해보기
Connection conn=null;
try {
//오라클 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//접속할 DB 의 정보 @아이피주소:port번호:db이름
String url="jdbc:oracle:thin:@localhost:1521:xe";
//계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
conn=DriverManager.getConnection(url, "scott", "TIGER");
//예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
System.out.println("Oracle DB 접속 성공");
} catch (Exception e) {
e.printStackTrace();
}
PreparedStatement pstmt=null;
try {
//실행할 미완성의 sql문
String sql="""
delete from member
where num=?
""";
//미완성의 sql문을 전달하면서 PreparedStatement 객체의 참조값 얻어내기
pstmt=conn.prepareStatement(sql);
//미완성인 sql 문 완성 시키기(?에순서대로 값 바인딩하기)
pstmt.setInt(1, num);
//sql문 실행하기
pstmt.executeUpdate();//insert,update,delete는 모두 exectueUpdate()를 호출하면 됨
System.out.println("회원정보를 삭제했습니다");
}catch(Exception e){
e.printStackTrace();
}
}
}
DBConnector 객체로 편하게 오라클 연결하기
package test.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBConnector {
//Connection 객체를 리턴해주는 매소드
//앞으로 Connection 객체 얻기 Connection conn=new DBConnector().getConn();
public Connection getConn() {
Connection conn =null;//DB 연결객체를 담을 지역 변수 만들기
try {
//오라클 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
//접속할 DB 의 정보 @아이피주소:port번호:db이름
String url="jdbc:oracle:thin:@localhost:1521:xe";
//계정 비밀번호를 이용해서 Connection 객체의 참조값 얻어오기
conn=DriverManager.getConnection(url, "scott", "TIGER");
//예외가 발생하지 않고 여기까지 실행순서가 내려오면 접속 성공이다.
System.out.println("Oracle DB 접속 성공");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
}
package test.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import test.util.DBConnector;
public class MainClass05 {
public static void main(String[] args) {
//회원 목록을 불러와서 콘솔에 출력하기
//필요한 객체를 담을 지역변수 미리 준비
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//우리가 설계한 클래스로 객체 생성후 Connection 객체 얻어내기
conn=new DBConnector().getConn();
String sql="""
SELECT num, name, addr
from Member
order by num asc
""";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
int num=rs.getInt("num");
String name=rs.getString("name");
String addr=rs.getString("addr");
System.out.printf("번호 :%d, 이름 :%s, 주소 :%s", num, name, addr);
System.out.println();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
<15:30 6교시>
MemberDto 클래스를 만들었음
package test.dto;
public class MemberDto {
//필드 선언
private int num;
private String name;
private String addr;
//디폴트 생성자
public MemberDto() {}
public MemberDto(int num, String name, String addr) {
super();
this.num = num;
this.name = name;
this.addr = addr;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
우리가 하려는 것
SELECT 된 ROW 하나의 정보를 MemberDto 객체에 담고 있고,
row가 여러개니까 MemberDto 객체 여러개가 있고,
이걸 다 List<MemberDto>객체에 순서대로 담는 연습을 하려는 것
package test.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.dto.MemberDto;
import test.util.DBConnector;
public class MainClass06 {
public static void main(String[] args) {
//회원 목록을 아주 쉽게 얻어낼 수 있다(날로 먹을 수 있다)
List<MemberDto> list =getList();
for(MemberDto tmp:list) {
System.out.printf("번호:%d, 이름:%s, 주소:%s \r\n",tmp.getNum(), tmp.getName(),tmp.getAddr());
}
}
//미리 준비된 메소드가 있다고 가정하면
public static List<MemberDto> getList(){
//여기에 어떻게 코딩하면 회원 목록(List<MemberDto>)를 리턴해줄 수 있을까? 코딩해보세요
//리턴해줄 객체를 담을 지역변수 미리 준비
List<MemberDto> list =new ArrayList<>();
//필요한 객체를 담을 지역변수 미리 준비
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
for(MemberDto tmp:list) {
try {
conn=new DBConnector().getConn();
String sql="""
SELECT num, name, addr
from Member
order by num asc
""";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
int num=rs.getInt("num");
String name=rs.getString("name");
String addr=rs.getString("addr");
//select 된 row 하나의 정보를 memberdto 객체에 담는다.
MemberDto dto=new MemberDto();
dto.setNum(num);
dto.setName(name);
dto.setAddr(addr);
//회원 한명의 정보가 담긴 MemberDto 객체를 ArrayList객체에 누적시킴
list.add(dto);
}
}catch(Exception e) {
e.printStackTrace();
}
}
return list;
}
}
<16:30 7교시>
방금전 시간에 했던 걸 emp 테이블에 대해서 EmpDto를 만들고 진행
package test.dto;
public class EmpDto {
private int empno;
private String ename;
private String job;
private double sal;
public EmpDto() {}
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public double getSal() {
return sal;
}
public void setSal(double sal) {
this.sal = sal;
}
}
package test.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.dto.EmpDto;
import test.dto.MemberDto;
import test.util.DBConnector;
public class MainClass07 {
public static void main(String[] args) {
//사원 목록을 아주 쉽게 얻어낼수 있다 (날로 먹을수 있다)
List<EmpDto> list=getList();
for(EmpDto tmp:list) {
System.out.printf("이름:%s, 번호:%d, 직무:%s, 급여:%f \r\n",
tmp.getEname(), tmp.getEmpno(), tmp.getJob(), tmp.getSal());
}
}
//미리 준비된 메소드가 있다고 가정하면
public static List<EmpDto> getList(){
//리턴해줄 객체를 미리 생성하기
List<EmpDto> list=new ArrayList<>();
//여기에 어떻게 코딩하면 회원 목록(List<MemberDto>) 를 리턴해줄수 있을까? 코딩해 보세요.
//필요한 객체를 담을 지역변수 미리 준비
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//우리가 설계한 클래스로 객체생성후 Connection 객체 얻어내기
conn=new DBConnector().getConn();
String sql="""
SELECT ename, empno, job, sal
from emp
""";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
String ename=rs.getString("ename");
int empno=rs.getInt("empno");
String job=rs.getString("job");
double sal=rs.getDouble("sal");
//select 된 row 하나의 정보를 MemberDto 객체에 담는다.
EmpDto dto=new EmpDto();
dto.setEname(ename);
dto.setEmpno(empno);
dto.setJob(job);
dto.setSal(sal);
//사원 한명의 정보가 담긴 MemberDto 객체를 ArrayList 객체에 누적 시킨다.
list.add(dto);
}
}catch(Exception e) {
e.printStackTrace();
}
return list;
}
}
package test.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.dto.DeptDto;
import test.dto.EmpDto;
import test.util.DBConnector;
public class MainClass08 {
public static void main(String[] args) {
//부서 목록을 아주 쉽게 얻어낼수 있다 (날로 먹을수 있다)
List<DeptDto> list=getList();
for(DeptDto tmp:list) {
System.out.printf("부서번호:%d, 부서이름:%s, 지역:%s \r\n",
tmp.getDeptno(), tmp.getDname(), tmp.getLoc());
}
}
//미리 준비된 메소드가 있다고 가정하면
public static List<DeptDto> getList(){
//리턴해줄 객체를 미리 생성하기
List<DeptDto> list=new ArrayList<>();
//여기에 어떻게 코딩하면 회원 목록(List<DeptDto>) 를 리턴해줄수 있을까? 코딩해 보세요.
//필요한 객체를 담을 지역변수 미리 준비
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//우리가 설계한 클래스로 객체생성후 Connection 객체 얻어내기
conn=new DBConnector().getConn();
String sql="""
SELECT deptno, dname, loc
from dept
""";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
int deptno=rs.getInt("deptno");
String dname=rs.getString("dname");
String loc=rs.getString("loc");
//select 된 row 하나의 정보를 DeptDto 객체에 담는다.
DeptDto dto=new DeptDto();
dto.setDeptno(deptno);
dto.setDname(dname);
dto.setLoc(loc);
//부서의 정보가 담긴 DeptDto 객체를 ArrayList 객체에 누적 시킨다.
list.add(dto);
}
}catch(Exception e) {
e.printStackTrace();
}
return list;
}
}
package test.main;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.dto.EmpDeptDto;
import test.util.DBConnector;
public class MainClass09 {
public static void main(String[] args) {
//부서 목록을 아주 쉽게 얻어낼수 있다 (날로 먹을수 있다)
List<EmpDeptDto> list=getList();
for(EmpDeptDto tmp:list) {
System.out.printf("사원번호:%d, 사원이름:%s, 부서번호:%d, 부서 이름:%s \r\n",
tmp.getEmpno(), tmp.getEname(), tmp.getDeptno(), tmp.getDname());
}
}
//미리 준비된 메소드가 있다고 가정하면
public static List<EmpDeptDto> getList(){
//리턴해줄 객체를 미리 생성하기
List<EmpDeptDto> list=new ArrayList<>();
//여기에 어떻게 코딩하면 회원 목록(List<DeptDto>) 를 리턴해줄수 있을까? 코딩해 보세요.
//필요한 객체를 담을 지역변수 미리 준비
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//우리가 설계한 클래스로 객체생성후 Connection 객체 얻어내기
conn=new DBConnector().getConn();
String sql="""
SELECT empno, ename, deptno, dname
from emp
join dept using (deptno)
""";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
while(rs.next()) {
int empno=rs.getInt("empno");
String ename=rs.getString("ename");
int deptno=rs.getInt("deptno");
String dname=rs.getString("dname");//dname 대신 별칭을 줬다면 여기도 별칭으로 바뀌어야 함
//select 된 row 하나의 정보를 DeptDto 객체에 담는다.
EmpDeptDto dto=new EmpDeptDto();
dto.setEmpno(empno);
dto.setEname(ename);
dto.setDeptno(deptno);
dto.setDname(dname);
//부서의 정보가 담긴 DeptDto 객체를 ArrayList 객체에 누적 시킨다.
list.add(dto);
}
}catch(Exception e) {
e.printStackTrace();
}
return list;
}
}
<17:30 8교시>
지금까지 한거 일단 깃허브에 새로운 허브로 올려보려고 함.
그리고 어제 실패했던거 최대한 다시 해보려고 함..
아래는 삽질 하던데까지 백업..
더보기
package test.frame01;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MemoFrame2 extends JFrame{
//생성자
public MemoFrame2(String title) {
super(title);
var topPanel=new JPanel();
var loadBtn=new JButton("load");
//페널에 UI 두개 추가
topPanel.add(loadBtn);
//프레임의 레이아웃 설정
setLayout(new BorderLayout());
//프레임의 북쪽에 페널 배치
add(topPanel, BorderLayout.NORTH);
//저장 버튼에 리스너 함수 등록
loadBtn.addActionListener((event)->{
//입력한 문자열 읽어오기
//String msg=inputMsg.getText();
File f = new File("C:/Users/acorn/Desktop/playground/myFolder/memo.txt");
try {
//만일 해당 파일이 존재하지 않으면
if(!f.exists()) {
//새로 만들어라
f.createNewFile();
System.out.println("memo.txt 파일을 만들었습니다.");
}
// new FileWriter(File 객체, append mode 여부 )
var fr=new FileReader(f);
fr.close(); //마무리
System.out.println("memo.txt 파일에 문자열을 기록 했습니다");
} catch (IOException e) {
e.printStackTrace();
}
});
}
public static void main(String[] args) {
var f=new MemoFrame2("메모 프레임");
f.setBounds(100, 100, 500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 12/30 오후 기록 027-2 (1) | 2024.12.30 |
---|---|
자바 풀 스택 12/30 오전 기록 027-1 (0) | 2024.12.30 |
자바 풀 스택 12/27 오전 기록 026-1 (1) | 2024.12.27 |
자바 풀 스택 12/26 오후 기록 025-2 (2) | 2024.12.26 |
자바 풀 스택 12/26 오전 기록 025-1 (0) | 2024.12.26 |