일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 정처기3회 #정보처리기사2023
- Doit #Doit오라클 #Doit시리즈 #연습문제
- QUERY #DML #SQL문 #내림차순정렬 #오름차순정렬
- web.xml #배포지시자 #서블릿테스트
- Init-param #context-param #
- Controller
- 어노테이션 #@WebServlet #WebServlet #
- 자바웹프로그래밍
- 정처기 #정처기필기 #정보처리기사 #정보처리기사필기 #정보처리기사2023 #정처기2023 #정처기3회 #정보처리기사3회 #정보처리기사실기 #정처기실기 정처기합격
- 기말고사 #방통대기말고사 #방통대후기 #방통대기말고사후기 #방통대2023년1학기 #방통대1학기 #방통대C프로그래밍 #방통대장학금 #방통대영어회화1
- jsp #게시판만들기 #자바로게시판만들기 #웹테스트 #JNDI #myora #Oracle #오라클 #DAO #DTO #아파치톰캣 #웹자바셋팅 #모델1 #모델1방식 #모델1방식웹프로그래밍 #웹프로그래밍
- cos.jar #cos드라이버 #파일업로드드라이버 #루피는귀여워 #마이바티스 #MyBatis #마이바티스sql #마이바티스DB #마이바티스jsp #마이바티스이클립스 #mapper #config.xml #마이바티스다운로드
- 자바 #웹자바 #JAVA #WEB #WEBJAVA #WEBPROGRAMMING #웹 #웹프로그래밍 #코딩 #CODING #모델1 #모델2 #모델1방식 #모델2방식
- 정처기필기합격 #정처기합격후기
- 8 실무에서 가장 많이 사용하는 SQL
- sql #오라클 #불리언형 #boolean #webjava #java #jsp #Mybatis #마이바티스 #마이바티스환경설정 #모델1 #모델1프로그래밍 #Batis #마이바티스다운로드 #web설정 #웹프로그래밍 #게시판 #게시판제작 #게시판만
- spring #스프링 #전자정부표준프레임워크 #표준프레임워크 #자바스프링 #스프링다운로드 #자바스크립트 #웹프로그래밍설정 #웹프로그래밍셋팅
- 방통대 #방송통신대학교 #컴퓨터과학 #컴퓨터과학과 #컴과 #방통대컴퓨터과학과 #방통대컴과 #방통대파이썬 #방통대C #방통대자바
- java #array #자바 #배열 #프로그래밍 #코딩 #자바프로그래밍
- 서블릿 #자바모델1 #자바모델2 #mvc #mvc패턴
- html #자바와서블릿 #자바와웹연결 #웹연결
- union #sql99 #외부조인 #오라클조인 #sql조인 #자체조인 #비등가조인 #비등가조인 #테이블복사 #오라클테이블 #null인데이터출력
- 마이바티스환경설정
- 갤러리제작 #갤러리만들기 #jsp갤러리 #jsp게시판 #jsp프로그래밍 #jsp웹프로그래밍 #jsp웹 #jsp모델1방식 #사진업로드 #jsp사진업로드 #jdbc6 #jdbc드라이버다운 #jdbc드라이버무료다운
- 서블릿선언 #서블릿선언방법 #
- ORACLE #TIGER #SCOTT #SCOTT계정 #오라클학습계정 #프로그래밍 #SQL #SQLORACLE #오라클 #오라클연습 #오라클연습계정 #오라클연습문제 #WHERE절 #오라클조건절
- 자바 #웹자바 #webJava #java #코딩 #코딩초보 #ojdbc #서블릿 #자바서블릿 #javaServelet #servelet #httpServlet
- tern다운로드 #메이븐다운로드 #maven #스프링라이브러리 #자바라이브러리 #톰캣설정 #WAS #웹어플리케이션서버
- View #
- Model #
- Today
- Total
장미의 개발일기
JDBC: 자바와 오라클 연결하여, 테이블 생성 및 결과 출력 해보기 본문
혈압이 너무 오른다...
너무 간단하고 어이없었던 오류때문에 2시간을 날렸다. 삽질하면서 배우는 거라지만,
너무너무너무 화가나고 짜증이 난다.
어제 포스팅했던, 자바,오라클 연결 테스트
JDBC : 오라클과 자바 연결 테스트하기 (tistory.com)
어제는 자바에서 몇 가지 열을 입력 받아서 오라클DB에 넣는 걸 했었는데,
오늘은 여기에 좀 업글(?)을 해서 연습해보았다.
연결 후, 자바에서 테이블, 시퀀스 생성 다하고, 데이터 5개 입력받기 (반드시 시퀀스 번호 제대로 뜨게 하기)
1.JDBC 드라이버 로드 (Class의 forgetname() 메소드를 사용)
2. DRIVERMANAGER 클래스의 getConnection( ) 메소드를 사용하여, CONNECTION 객체를 생성하기
3. CONNECTION객체를 통해 PreparedStatement 객체를 생성
(String형 변수에 sql명령문을 저장하고 PreparedStatement 생성자의 매개변수로 사용)
4. PreparedStatement의 executeUpdate() 메소드를 사용해서 쿼리를 실행해준다.
(테이블에 데이터 넣는건 - 변수 하나에 5개 다 넣은 다음에 한번에 실행하려고 했는데 오류난다;)
분명 한번에 넣을 방법 있을텐데 아직 덜 배웠으므로 ㅠㅠ
문제의 그 오류 :
ORA-00911: 문자가 부적합합니다
중간 코드 ... 입력형으로 바꿨다가 다시 고침
insertValA.executeUpdate(); 이 줄에서 계속 오류가 난 것;;
검색 다해도 안 뜨고 , GPT는 틀린 답만 도돌이표로 알려주고 (얘 진짜 가끔 멍청해)
정말 100번은 오라클에서 테이블 지우고 자바에서 수정 후 다시 돌려보고...한 듯 ㅠ
정말 원인은 어이없게도 쿼리 문장 마지막에 ' ; ' 세미콜론이 있어서였음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아니 DB프로그램에선 ;를 넣어야 명령어가 끝나니까 당연한 건줄...
더 웃긴건 저거 위에 있던 테이블생성, 시퀀스 생성 쿼리엔 실수로 ;를 안 넣어서 멀쩡히 실행이 되었던 것...
고생해서 얻은 원하는 출력물:
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
//오라클에 자바를 연결한 후에, 테이블을 생성해보자,
// 생성하고 입력해보자.
public class Oracle_Test2 {
private static Object createTab;
public static void main(String[] args) {
// 1.드라이버 로드
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 로드 성공!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// 2 오라클과 연결하기
Connection con = null;
PreparedStatement createTab = null; // 쿼리 1실행하는 객체 stmt
// 이거 하나당 쿼리 하나인듯?
PreparedStatement createSeq = null; // 쿼리 2실행
PreparedStatement insertValA = null; // 쿼리 3 담당
PreparedStatement insertValB = null;
PreparedStatement insertValC = null;
PreparedStatement insertValD = null;
PreparedStatement insertValE = null;
try {
// 오라클과 연결
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String pwd = "tiger";
con = DriverManager.getConnection(url, user, pwd); /// 여까지 노프라블럼
// 테이블 생성하는 쿼리
String sql = "CREATE TABLE BOOK_LIST ( BNUM NUMBER(4) PRIMARY KEY," + " SUB VARCHAR2(30) UNIQUE,"
+ " WRITER VARCHAR2(30)," + " REALDATE DATE," + " HOWMUCH NUMBER(4) )";
createTab = con.prepareStatement(sql);// pre stament 객체 생성
createTab.executeUpdate(); // 쿼리1ㅣ 실행
// 시퀀스 생성
String sql2 = "CREATE SEQUENCE B_SEQ MINVALUE 0 MAXVALUE 10 INCREMENT BY 1 START WITH 0";// ;
createSeq = con.prepareStatement(sql2); // stament 객체 생성
createSeq.executeUpdate();
// 쿼리2실행
// 테이블에 정보 집어넣기 // 쿼리 3을 담는 객체 생성
String sqlA = "INSERT INTO BOOK_LIST VALUES (B_SEQ.NEXTVAL, '짜증나', '죽어' ,SYSDATE, 10)";
String sqlB = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '파반느','얍스',SYSDATE, 50)";
String sqlC = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '상수리 나무','김미희',SYSDATE, 40)";
String sqlD = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '그럼 안녕히,','닥치시오',SYSDATE, 15)";
String sqlE = "INSERT INTO BOOK_LIST VALUES(B_SEQ.NEXTVAL, '당신과나','홍매열', TO_DATE('06-05-2023','DD-MM-YYYY'), 5)";
// 쿼리3 하나씩 실행하기
insertValA = con.prepareStatement(sqlA);
insertValA.executeUpdate();
insertValB = con.prepareStatement(sqlB);
insertValB.executeUpdate();
insertValC = con.prepareStatement(sqlC);
insertValC.executeUpdate();
insertValD = con.prepareStatement(sqlD);
insertValD.executeUpdate();
insertValE = con.prepareStatement(sqlE);
insertValE.executeUpdate();
} catch (SQLException e) {
System.out.println("오류1");
e.printStackTrace();
} finally {
try {
//ResultSet이 있을 경우 맨 먼저 종료;
if (createTab != null) {createTab.close();}
if (createSeq != null) {createSeq.close();}
if (insertValA != null) {insertValA.close();}
if (insertValB != null) {insertValB.close();}
if (insertValC != null) {insertValC.close();}
if (insertValD != null) {insertValD.close();}
if (insertValE != null) {insertValE.close();}
if (con != null) {con.close();}
} catch (SQLException e2) {
System.out.println("오류2");
e2.printStackTrace();
}
}
}// main
}
'개발일기 > Oracle' 카테고리의 다른 글
Do it! 오라클로 배우는 데이터베이스 입문 : 연습문제 7 (0) | 2023.05.10 |
---|---|
Do it! 오라클로 배우는 데이터베이스 입문 : 연습문제 6 (0) | 2023.05.09 |
JDBC : 오라클과 자바 연결 테스트하기 (0) | 2023.05.05 |
Do it! 오라클로 배우는 데이터베이스 입문 : 연습문제 (0) | 2023.05.05 |
ORACLE /오라클 연습용,학습용 계정 : SCOTT (0) | 2023.05.05 |