블로그 이미지
신세계 SSG.COM / IT개발 1팀 / 상품, 제휴 / 김지영 FreeEnd

카테고리

전체 (82)
끄적끄적 (14)
News (1)
Movie (11)
Security (1)
Design Patterns (2)
Operating System (4)
Database (8)
Framework (4)
Solution (7)
Language (1)
Web (4)
Lib (3)
TEST_Tools (4)
ETC... (7)
Software Factory (0)
Total226,791
Today72
Yesterday108


달력

« » 2018.06
          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

공지사항

글 보관함

개최 : 2011년 10월 2일
기온 : 낮 최고기온 십파... 18도.
위치 : 서울 상암동 노을공원 캠핑장.
참가 : 나. 마누라님. 마누라님친구1, 마누라님친구2 총 4명.


준비물을 챙기자.

가서 고추장 찌개를 해쳐먹겠어. 물론 내생각은 아니야. 마누라님이 생각하시고 준비하셨지.



이상 준비끝. 출발.

노을공원 캠핑장은 월드컵 경기장 위 하늘공원 뒤에 있다.




노을공원 주차장에서 부터 노을 캠핑장 까지는 맹꽁인가 뭐시긴가 전기차가 운행한다.
그놈 은근 비싸. 2000원/인당/편도. 왕복하면 4천원. 4명이면 16000원.

브이 말고 16000원 내놓으라고.





 수고했어 김지영. 넌 행복한 남자야. 오늘은 즐거운 효도피크닉. 잊지마. 웃어.



하늘 완전 파랗고. 내 마음도 파랗게 멍들고. 즐거운 하루.

노을 공원에서 저 뒤로 보이는 산이 바로 북한산.
그 이외에 서울의 아파트, 빌딩은 하나도 안보인다. 마치 외국같아. 앗흥.

아이들도 좋아하고. 어른이도 좋아하긔.



 내가 주위를 둘러볼동안 요리를 해주어서 아주 고마워.
그래도 저거 먹는다고 내 뭉친 오른쪽 어께는 풀리지 않아. 그리고 그놈의 브이질....



 아. 피크닉은 이래서 않좋아. 술을 못마시잖아.
일단은 가져온 짐을 가져가기 위해. 다시 삼겹살로 충전 충전.

아. 원래 텐트치고 하루 자야하지만. 마누라님께서 김지영 쥬니어를 가지셨기때문에. 한대서 재울순 없지.
별로 한건 없지만. 여기서 오늘은 그만.



마지막 단체컷. 노을 생고기 삼겹살 구이집. 이만 안녕.


오른쪽 10년된 리복 오리털 잠바 입고 계신분이 내 마누라님.

좌측끝 아가씨 남친 구함.
현재 P대학 석박사 통합 과정중에 있는 수재. 나이 서른.
특징. 다리가 튼튼함.

이상. 지영옹.
Posted by 지영옹 FreeEnd
제 블로그에 싸이월드 공감 위젯을 적용하였습니다.

싸이월드의 공감 위젯은 페이스북의 "좋아요"나 믹시의 "믹시업"과 비슷한 기능을 합니다.
해당 공감을 클릭해 공감을 하게 되면 싸이월드 모아보기에 해당 내용이 올라가게되어 다른 사람과 해당 내용을 공유 할 수 있습니다.

다들 제 블로그의 공감을 마구 클릭해주세용. 지영옹.
Posted by 지영옹 FreeEnd
TAG 공감


문제발생!!

아직 학생인 후배의 다급한 요청!!
DAO 를 만드는 중인듯한데.. 쿼리를 execute 시키면 에러가 난다는..

완전 초보시란다.
뭐 여튼.

다짜고짜 소스 먼저 보내줘서 대충 살펴 보았다.

쿼리도 잘 만들었고..
바인드도 잘 해줬구...

코드상 문제가 없는듯 했는데...

일단 에러 트래백을 먼저 보내달라고했다.



원인탐색

java.sql.SQLException: ORA-01008: 일부 변수가 바인드되지 않았습니다.

insert into member(pass_subno,s_no,sub_no)values(?,?,?)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at racle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:966)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
at oracle.jdbc.driver.OracleStatement.executeInternal(OracleStatement.java:1696)
at oracle.jdbc.driver.OracleStatement.execute(OracleStatement.java:1662)
at StatusDao.getPsub(StatusDao.java:59)
at Status.pdbSelect(Status.java:199)
at Status.mouseClicked(Status.java:213)
... 중략...


뭐 여튼 이런 에러였다.

에러가 나는 부분을 다시 보니..

String sql = "insert into member(pass_subno,s_no,sub_no)"
+ "values(?,?,?)";
try {
ps = con.prepareStatement(sql);
ps.setString(1, ps_no);
ps.setInt(2, s_no);
ps.setString(3, sub_no);
ps.execute(sql);
}catch
... 중략 ..


아하!

 PreparedStatement에 쿼리도 잘 넣어주고 변수를 잘 세팅 해서 넣어줬으면서, 쿼리 실행시에는 ?에 바인드를 하지 않은 sql을 넣어 execute 시켜버렸다.

그래서 친절하게 일부 변수가 바인드 되지 않았다고 에러를 출력했던 것이다.


해결
 ps.execute(sql); ps.executeUpdate(); 로 바꾸어서 해결!!


참고
 뭐 간단한 문법 실수이다. 초급 개발자라면 당연히 이런 문제를 겪을수 있지만 중급 이상의 개발자라면 이러시면 곤란하시죠. 푸훗.
 근데 왜 포스팅 하냐구? 갑자기 executeQuery()executeUpdate()랑 차이가 궁금해졌거든.

 저 둘의 차이는 리턴 타입을 보면 잘 알 수 있다.
다음은 해당 메소드의 javadoc의 내용이다.

ResultSet executeQuery() throws SQLException;
Executes the SQL query in this PreparedStatement object and returns the ResultSet object generated by the query.
return a ResultSet object that contains the data produced by the query; never null

int executeUpdate() throws SQLException;
Executes the SQL statement in this PreparedStatement object, which must be an SQL INSERT, UPDATE or DELETE statement; or an SQL statement that returns nothing, such as a DDL statement.
either (1) the row count for INSERT, UPDATE, or DELETE statements
or (2) 0 for SQL statements that return nothing


내용에서도 알수 있듯이 ..
executeQuery() 는 Query의 결과 오브젝트를 만들어 리턴을 해주고
executeUpdate() 는 Insert, Update, Delete등의 Query를 실행시키고 해당 결과의 row count를 리턴한다.

 INSERT, UPDATE, DELETE는 자칫 그냥 executeQuery() 로도 시행 시킬 수 있다.  하지만 정확한 데이터 처리를 위해 해당 알맞은 메소드 사용과 결과 처리를 한다면 더 나은 세상을 만드는데 기여 할 수 있을 것으로 기대 된당. 우후훗. 지영옹.


Posted by 지영옹 FreeEnd