** 상품관리 프로그램을 작성하고자 한다.
목차
1. 데이터베이스 구성 및 연습
2. 프로그램에 의해서 상품추가 가능하도록 하기
3. 모든 상품의 정보를 보여주는 프로그램 작성
4. 사용자로부터 가격을 입력받아 입력받은 가격과 같거나 더 높은 금액의 상품의 정보를 모두 출력하는 프로그램 작성
1. 상품의 정보를 저장하기 위한 데이터베이스 구성하자
상품번호
상품명
가격
상세설명
상품이미지
**테이블 생성 sql 명령어
create table 테이블명(속성명1 자료형1, 속성명2 자료형2, ....);
// 한글로도 가능하지만 권장하지 않는다. 하지만 오늘은 테스트 해보기로
// 상품번호의 경우 순차적으로 입력할때마다 자동으로 지정될때는 int 사용한다
// 오라클에서 정수든 실수든 number로 표현
// 이미지는 경로이름을 넣는 것이 일반적
create table 상품(상품번호 varchar2(20), 상품명 varchar2(20), 가격 number, 상세설명 varchar2(100), 상품이미지 varchar2(30));
** 식별자
예를 들어 데이터가 들어갈때는
A100 사과 1000 맛있는 사과 apple.jpg
A101 사과 1000 꾸우울 사과 apple.jpg
// 속성값이 같은 것도 있지만 다른 것이 있을 때
// 다른 레코드와 구별하기 위한 무엇인가 필요 == '식별자' 라고함 or '주식별자'
여기서는 상품번호로 식별자를 정함
그래서 primary key 를 속성값 뒤에 붙여줌
create table 상품(상품번호 varchar2(20) primary key, 상품명 varchar2(20), 가격 number, 상세설명 varchar2(100), 상품이미지 varchar2(30));
** ed 상품 명령어 // 오타날수도 있으니 편집기 이용
위에 문장 입력 및 저장
** @ 상품 // 상품에 있는 내용을 실행해 주세요
** 테이블의 구조 확인하는 sql 명령어
desc 테이블명;
desc 상품;
** 생성된 테이블에 자료를 추가하기 위한 sql 명령어
insert into 테이블명 values(값1,값2,값3, .....);
이때 값의 순서는 테이블구조 순서와 동일 해야 함
또, 문자나 문자열을 홋따옴표로 ' ' 묶는다.
A100/ 사과/ 1000/ 맛있는 사과/ apple.jpg
insert into 상품 values('A100', '사과',1000,'맛있는 사과','apple.jpg');
실행결과 : 1개의 행이 만들어졌습니다. 라고 나옴
// 하나 더 레코드 만듬
insert into 상품 values('A101', '메론',5000,'꾸우울 메론','melon.jpg');
** 데이터를 추가, 수정, 삭제 명령을 수행 한 후
반영 ==> commit;
취소 ==> rollback; // 다 없어짐 (조심해야함)
다른 사람도 볼 수 있도록 commit; 명령어 사용
** 테이블에 추가된 데이터가 잘 들어갔나 확인 해보고자 한다
(= 자료검색)
속성 골라서 보고 싶을때
select 속성명1, 속성명2 .. from 테이블명;
속성 다 보고 싶을때
select * from 테이블명;
모든상품의 상품명, 가격을 검색하고 싶으면?
select 상품명, 가격 from 테이블명;
** 컬럼 폭 맞춰보기(출력되는 화면이 마음에 안들어서)
지금만 쓰는게 아니니까 파일을 만들어서 저장하기로함
ed ff -> 메모장 열음
입력하는거
column 상품번호 format a5;
column 상품명 format a10;
column 가격 format 9,999;
column 상세설명 format a10;
column 상품이미지 format a10;
@ ff
select * from 상품;
**주식별자가 중복될때 발생하는 오류★★★★★
'개체무결성'
에러내용
java.sql.SQLException: ORA-00001: 무결성 제약 조건(SCOTT.SYS_C004049)에 위배됩니다
**조건에 맞는 자료를 검색
select 컬럼명1, 컬럼명2, ... from 테이블명 where 조건식;
select * from 테이블명 where 조건식;
예) 상품명이 '오렌지'인 상품의 가격을 검색하시오
select 가격 from 상품 where 상품명 = '오렌지';
select 가격 from 상품 where 상품명 != '오렌지'; //아닌
select 가격 from 상품 where 상품명 <> '오렌지'; //작거나크거나
연습문제)
가격이 2000원 이상인 제품의 상품명, 가격, 상품이미지를 검색하시오.
검색방법 2가지
1. ==> select 상품명, 가격, 상품이미지 from 상품 where 가격 >= 2000;
2. ==> select 상품명, 가격, 상품이미지
2 from 상품
3 where 가격 >= 2000
4 ;
비교연산자
( > < >= <= != = )
논리연산자
(&& || 가 아닌 and or)
2. 프로그램에 의해서 상품추가 가능하도록 해보기
// 사용자로부터 상품번호, 상품명, 가격, 상세설명, 상품이미지를 입력받아 데이터베이스에 레코드를 추가하는 프로그램 작성
//
import java.util.*;
import java.sql.*;
class InsertGoods{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String num, name, desc, img;
int price;
System.out.print("상품번호: ");
num = sc.next();
System.out.print("상품명 : ");
name = sc.next();
System.out.print("가격 : ");
price = sc.nextInt();
sc.nextLine();
System.out.print("상세설명 : ");
desc = sc.nextLine(); // 설명이 길기 때문에 Line으로 받고 받기전 버퍼내용 지우기 함
System.out.print("상품이미지 : ");
img = sc.next();
//DB에 연결에서 sql 명령어 실행하면 됨
try{
// 질의문 만들기
//String sql = "insert into 상품 values('100','사과',1000,'꿀사과','apple.jpg')"; 이것을 일일이 더하기로 변수처리하기 복잡함
String sql = "insert into 상품 values(?,?,?,?,?)"; // 변수처리해야할 값을 물음표로 대신 할 수 있음
//sql 명령어는 사용자가 입력한 값(변수)을 가지고 sql 명령어를 만드는 것이 일반적
// 이때 변수의 값을 설정하기가 + 더하기로 해도 되지만 번거롭고 가독성이 안좋기 때문에 ? 물음표로 대신 할 수 있다.
//1. jdbc 드라이버를 메모리로 로드한다
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB 서버 연결
String url = "jdbc:oracle:thin:@203.236.209.111:1521:XE";
//or
//String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "scott";
String pwd = "tiger";
Connection conn = DriverManager.getConnection(url,user,pwd); // 직접입력 혹은 변수 만들어서 사용해도됨
// connection으로 반환한다.
//3. sql명령어를 실행하기 위한 Statement 객체 생성
//conn.createStatement(); // 질의문에 물음표가 없을때 사용하는 것
//perparedStatement 질의문에 물음표가 있을때 사용하는 것
PreparedStatement pstmt = conn.prepareStatement(sql);
//? 물음표가 있기 때문에 저 질의문은 불안하다 그렇기에 각각의 물음표에 값을 설정해야함
//sql 명령어에 결정되지 않은 ? 물음표에 값을 설정해야함
// 설정하는거니까 set__ 시작할것임, 문자열이면 setString, int면 setInt
pstmt.setString(1, num); // 첫번째 물음표에 num , Index 는 1부터 시작(0부터아님)
pstmt.setString(2, name);
pstmt.setInt(3, price);
pstmt.setString(4, desc);
pstmt.setString(5, img);
//sql 명령어를 실행한다.
//실행 메소드(executeUpdate - insert, update, delete // executeQuery - select)
// executeUpdate(String sql) // 물려받은것 // 여기서 이것을 사용하면 물음표가 비어있는 상태로 질의하게 됨
// executeUpdate() // 자기자신꺼
int re = pstmt.executeUpdate(); // 성공적으로 sql문을 실행한 레코드의 수를 반환
if (re ==1){
System.out.println("상품 등록 완료");
}else{
System.out.println("상품 등록 실패");
}
// 사용했던 객체를 닫기
pstmt.close();
conn.close();
}//end try
catch (Exception e){
System.out.println(e);
}//end catch
}// end psv
}//end class
3. 모든 상품의 정보를 보여주는 프로그램을 작성
즉, 다시 말하면 데이터베이스 서버에 접속해서 "select * from 상품" 이라는 sql명령어를 실행해서 그 결과를 화면에 출력하고자 한다.
import java.sql.*;
class ListGoods{
public static void main(String[] args) {
// 실행시키고자 하는 sql명령어를 문자열 변수에 담아 보자
String sql = "select * from 상품";
try{
// java언어에서 데이터베이스 연결 프로그램 ==> JDBC 프로그래밍
//JDBC 프로그래밍 순서
//1. jdbc 드라이버를 메모리로 로드한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB 서버에 연결
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@203.236.209.141:1521:XE","scott","tiger");
//3. sql 명령어 실행하기 위한 Statement 객체 생성
Statement stmt= conn.createStatement();
//4. sql 명령어 실행(Statement를 통해서)
//sql 명령어 실행하기 위한 메소드 executeUpdate, executeQuery
ResultSet rs = stmt.executeQuery(sql);
//일처리 ==> 검색한 결과를 모두 출력
//검색한 결과가 rs에 담겨져 있음
//디비 정보를 검색한 결과만큼 반복실행하여 데이터를 하나씩 꺼내와서 화면에 출력
while (rs.next()){
String num = rs.getString(1); // or rs.getString("상품번호");
String name = rs.getString(2);
int price = rs.getInt(3);
String desc = rs.getString(4);
String img = rs.getString(5);
System.out.println(num+","+name+","+price+","+desc+","+img);
}
rs.close();
stmt.close();
conn.close();
}catch (Exception e){
System.out.println(e);
}
}
}
4. 사용자로부터 가격을 입력받아 입력받은 가격과 같거나 더 높은 금액의 상품의 정보를 모두 출력하는 프로그램 작성
import java.util.*;
import java.sql.*;
class TestGoods{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("가격입력==>");
int input = sc.nextInt();
String sql = "select * from 상품 where 가격 >= " + input;
try{
//1. jdbc 드라이버를 메모리 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
//2. DB 서버 연결
String url = "jdbc:oracle:thin:@203.236.209.141:1521:XE";
String user = "scott";
String pwd = "tiger";
Connection conn = DriverManager.getConnection(url,user,pwd);
//3. sql 명령어 실행하기 위한 Statement 객체 생성
Statement stmt = conn.createStatement();
//4. sql 명령어 실행
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
String num = rs.getString("상품번호");
String name = rs.getString("상품명");
int price = rs.getInt("가격");
String desc = rs.getString("상세설명");
String img = rs.getString("상품이미지");
System.out.println(num + "\t" + name + "\t" + price + "\t" + desc + "\t" + img);
}
rs.close();
stmt.close();
conn.close();
}catch (Exception e){
System.out.println(e);
}
}
}
'JAVA > Oracle' 카테고리의 다른 글
오라클이 제공하는 수학관련 함수를 이용한 자료 검색 (0) | 2016.06.18 |
---|---|
사원관리 시스템 개발 시 필요한 정보와 like 연산자 사용(칼럼의 값이 특정 무자열을 포함하고 있는 자료의 검색) (0) | 2016.06.18 |
Oracle 명령어 (0) | 2016.06.18 |
JDBC 프로그래밍 연동 설정방법 및 예제 (0) | 2016.06.18 |
Oracle 설치 관련 및 주의사항 (0) | 2016.06.18 |