2022. 8. 6. 22:30ㆍ3층 1구역 - 개발의 장/Oracle DataBase
1. 지난 번에 뭘 했음?(서론)
지난 게시물에서 데이터베이스에 저장되어 있는 어떠한 정보의 입력으로 관련 정보를 모두 열람하는 ConnectionTest
while문을 사용하여 데이터베이스에 모든 정보를 열람할 수 있는 SelectAll
데이터베이스에 정보를 추가하고자 할 때 cmd인 명령 프롬프트 즉 데이터베이스에 직접 관여하는 게 아니라
이클립스를 통해 데이터를 삽입할 수 있는 Insert 코드에 대해 알아 보았다.
오늘은 정보수정에 관해서 알아보고자 한다.
이제 정보수정과 정보삭제를 구현하게 되면 이클립스의 명령어들이 메모리(단기 기억력)에 올라갈 때만 저장되던 자료들이 데이터베이스에 올려지며 심심할 (?) 때마다 그 데이터를 볼 수 있다. (내가 컴퓨터를 지배할 수 있다.!!!)
하기 전에...
필자가 여태까지 했던 회원 정보 관리 프로그램 만드는 퀴즈를 돌아보도록 하자.
왜 여태까지 안하던 짓거리를 하냐고 그럴 수도 있는데...
필자가 회원정보 프로그램 코드를 짜면서 업데이트 부분을 자세하게 보면...
(안 봤다고? 어쩌라고....)
특정한 정보 하나를 입력하여 그 입력값이 존재한다면 그 입력값을 포함하거나 또는 그 값을 제외한 값을 수정하였고,
존재하지 않는다면 '입력값이 없으니 나가!!' 라는 출력어를 표현했었다.
데이터베이스에서 이런 비슷한 역할 하는 명령어가 있는데....
SELECT count(*) FROM 테이블 이름 WHERE 검색 카테고리='검색하고자 하는 데이터';
이것을 사용하여 정보값을 수정할 수 있을 것이라 예상한다.
그럼 소스코드를 알아보도록 하자.
2.코드(Insert.java)
package jdbc_concept1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class Update {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "oracle";
String password= "oracle";
String sql = "SELECT count(id) FROM test WHERE id=?";
//↑↑↑↑↑↑ 공통으로 들어가는 부분.
Scanner sc = new Scanner(System.in);
//아이디를 입력하여
System.out.print("아이디 : "); String id = sc.next();
try {
//드라이버에서 oracle url에 접속후, user와 password를 입력해 연결.
con = DriverManager.getConnection(url, user, password);
//prepaerStatement에서 sql로 연결하여
ps = con.prepareStatement(sql);
//1번에 id의 입력값을 세팅
ps.setString(1, id);
//ps의 쿼리문을 실행
rs = ps.executeQuery();
//만약 ResultSet이 입력한 값이라면(== ps.setString(1, id);)
if(rs.next()) {
//rs.getInt(1) == ps.setString(1, id);
//즉, rs.getInt(1)이 0이나 1이 나올것이므로
// row에 그 값을 대입해서...
int row = rs.getInt(1);
//만약 row가 1이면
if(row == 1) {
//해당 입력을 실행한다.
System.out.print("비밀번호 : "); String pass = sc.next();
System.out.print("이름 : "); String name = sc.next();
//sql 서버에서는 그 아이디에 대한 password와 name을 갱신보고
//아이디 확인했고, 사용자가 입력한 값으로 바꾸도록 허용.
sql = "UPDATE test SET password=?, name=? WHERE id=?";
//sql의 갱신보고를 ps가 받아들이며...
ps = con.prepareStatement(sql);
//sql문에서 명시된 내용대로
//1번엔 사용자가 원하는 password를
ps.setString(1, pass);
//2번엔 사용자가 원하는 name을
ps.setString(2, name);
//3번에 사용가가 입력한 아이디와 DB에 기록되 있는
//id가 일치하기 때문에
ps.setString(3, id);
//정보를 넣는 것을 실행한다.
ps.executeUpdate();
}else {
//그게 아니면 다음 내용을 출력
System.out.println(id + "는/은 등록된 정보가 아닙니다.");
}
}
} catch (SQLException e) {
e.printStackTrace();
}
//이후 모든 과정이 끝나면 데이터베이스 종료 실행.
try {
if(rs != null)
rs.close();
if(ps != null)
ps.close();
if(con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
이전 게시물부터 수정해야될 사항이 있는데...
sql = "UPDATE test SET password=?, name=? WHERE id=?";
sql에 위와 같이 SET을 하겠다고 선언 한다면
ps.setString(1, pass);
ps.setString(2, name);
ps.setString(3, id);
sql의 선언한 것과 동일하게 순번을 매겨줘야 한다.
틀린 내용이 있다면 피드백 부탁드립니다! 오늘도 감사드립니다!!!!
'3층 1구역 - 개발의 장 > Oracle DataBase' 카테고리의 다른 글
DB - DB, 이클립스 연동 후 회원정보 프로그램 구축하는 퀴즈 (2022-08-07) (0) | 2022.08.07 |
---|---|
DB - 오라클과 이클립스(자바) 정보삭제(Delete) (2022-08-06) (0) | 2022.08.06 |
DB - 오라클과 이클립스(자바) 정보 삽입(Insert) (2022-08-05) (0) | 2022.08.05 |
DB - 오라클과 이클립스(자바) 모든정보열람(Select All) (2022-08-05) (0) | 2022.08.05 |
DB - 모든 오라클과 이클립스(자바) 연결하기 (2022-08-04) (0) | 2022.08.05 |