728x90
반응형
java.sql.SQLSyntaxErrorException: ORA-00936: 누락된 표현식

selete 절에 컬럼명이 틀렸을때 나타날수있다.

728x90
반응형
728x90
반응형

iBatis를 사용해서 쿼리작업을 하면 아래와같은 장점이 있다.

      1. xml로 sql을 관리하므로 가독성이 높아진다.

      2. db연결 정보도 conf로 관리하므로 수정하기 쉬워지며

      3. 그래서 코드내에서 여러개의 db에 선택적으로 접근하기도 수월하다.(테스트/실장비 자유롭게 왔다갔다~)

      4.ORMap을 해주기때문에 결과를 가져올때도 사용하기가 쉽다.

 

xml의 statement 내에서 변수들을 받을때 '#' 를 사용해서 변수를 접근한다.

그러나 테이블명/필드명들을 접근할때는 '$' 를 사용한다.

      select * from $tablename$

이런식으로..

 

 

그런데, 여기서 테이블명이 바뀌면 읽어오는 필드명도 보통은 달라지게마련..

iBatis는 내부적으로 읽어온 결과의 metadata를 저장해두는데

읽어온 필드명이 달라지면 이전의 metadata와 mapping이 되지않아 에러를 발생시킨다.

 

이럴때 statement의 attribute로 "remapResults=true"를 추가해줘야 한다.

이렇게 되면 매번 metadata를 세팅하므로 사실은 오버헤드가 있지만 에러는 발생하지 않는다.

 

문서들을 찾아보면 이 오버헤드 때문에 꼭 필요한 경우가 아니면 이 attribute를 활성화하지 말라고 되어있는데

실제로 아래 두가지 경우를 테스트 했을때 속도차는 별로 없었다.

1. remapResults=true로 하고 두개의 테이블에 번갈아가면서 접근한것

2. 각각의 테이블로 가는 sql을 따로 두개 작성한후에 remapResults=false로 해놓고 번갈아가면서 접근한것

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

project.build.sourceencoding  (0) 2013.09.16
ibatis <dynamic>,<prepend>  (0) 2013.09.13
Ibatis 동적쿼리  (0) 2013.09.12
HashMap<k,v>  (0) 2013.09.12
리눅스 명령어  (0) 2013.09.11
728x90
반응형

<!-- 모든 리스트 불러오기, 페이징구현-->
 <select id="getAllBoard" resultClass="Board_Content" parameterClass="HashMap">
  SELECT
   CONTENT_NO,
   CONTENT_TITLE,
   CONTENT_DATE,
   CONTENT_WRITER,
   CONTENT_PW,
   CONTENT_CONTENT
  FROM(
   SELECT
    ROWNUM AS RNUM,
    CONTENT_NO,
    CONTENT_TITLE,
    CONTENT_DATE,
    CONTENT_WRITER,
    CONTENT_PW,
    CONTENT_CONTENT
   FROM(
    SELECT
     CONTENT_NO,
     CONTENT_TITLE,
     CONTENT_DATE,
     CONTENT_WRITER,
     CONTENT_PW,
     CONTENT_CONTENT
    FROM
     BOARD_CONTENT
    <!--paramMap.put("endRow", endRow);
     paramMap.put("startRow", startRow);
     paramMap.put("board_search", board_search);
     paramMap.put("word", word);
     *board_search : title,writer,content
     
     *ibatis 동적쿼리*
     <dynamic> prepend에 조건절sql
     null이 아니면,,<isNotNull> property에 들어갈 내용..
     like..<isEqual> property에 조건 걸 인자로 들어온 객체 compareValue에 조건걸 인자의 조건걸 변수
     LIKE '%' + #들어갈내용# + '%' -->
    <dynamic prepend="WHERE">
     <isNotNull property="word">
      <isEqual property="board_search" compareValue="title">
       CONTENT_TITLE LIKE '%' + #word# + '%'
      </isEqual>
      <isEqual property="board_search" compareValue="writer">
       CONTENT_WRITER LIKE '%' + #word# + '%'
      </isEqual>
      <isEqual property="board_search" compareValue="content">
       CONTENT_CONTENT LIKE '%' + #word# + '%'
      </isEqual>
     </isNotNull>
    </dynamic>
    ORDER BY
     CONTENT_NO DESC))
  WHERE
   RNUM &gt;= #startRow# AND RNUM &lt;= #endRow#
  <!-- rnum >= startRow(1,11,21,,) and rnum <= endRow(10,20,30,,) --> 
  <!-- xml에서 "< >"를 사용하려면 <![CDATA[<]]>"이나  "&lt;", "&gt" 로 사용해야 한다. -->
 </select>

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

ibatis <dynamic>,<prepend>  (0) 2013.09.13
remapResults="true"  (0) 2013.09.12
HashMap<k,v>  (0) 2013.09.12
리눅스 명령어  (0) 2013.09.11
UNIX vi명령어  (0) 2013.09.11
728x90
반응형

HashMap이란

Map인터페이스의 한종류로써 Key와 Value 값으로 데이터를 저장하는 형태를 하고 있다.

여기서 Map인터페이스라는 것은 Key와 Value 값으로 저장하는 List 형태의 조상!

HashMap또한 Map인터페이스를 구현한 클래스이기 때문에 Map의 속성을 모두 가지고 있고, 저장 방식 또한 동일 하다. 그리고 해싱(hashing)이란 검색 방법을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보여준다.

 

HashMap 주요 메서드

HashMap() - HashMap객체를 생성

EX) HashMap map = new HashMap();

 

HashMap(int initialCapacity) - 지정된 값을 초기용량으로 하는 HashMap객체를 생성

EX) HashMap map = new HashMap(10);

 

Object put(Object key, Object value) - 지정된 키와 값을 HashMap에 저장

EX) HashMap map = new HashMap();

      map.put("토끼", "100");

 

Object get(Object key) - 지정된 키(key)의 값(객체)을 반환

EX) HashMap map = new HashMap();

      map.put("토끼", "100");

      map.get("토끼");    --->  100 반환

 

HashMap(Map m) - 주어진 Map에 저장된 모든 요소를 포함하는 HashMap객체를 생성

EX) HashMap map = new HashMap();

      map.put("토끼", "100");

      map.put("거북이", "20");

      HashMap map2 = new HashMap(map)

      map2.get("토끼");    --->  100 반환

 

void clear() - HashMap에 저장된 모든 객체를 제거한다.

EX) HashMap map = new HashMap();

      map.put("토끼", "100");

      map.put("거북이", "20");

      map.clear();

      map.get("토끼");    --->  NULL 반환

 

Set keySet() - HashMap에 저장된 모든 키가 저장된 Set을 반환한다.

EX) HashMap map = new HashMap();

      map.put("토끼", "100");

      map.put("거북이", "20");

      Set allkey = map.keySet();    --->  allkey = {"토끼", "거북이"}

 

 

 

아래와 같이 Key중복이 일어 날 경우...

EX) map.put("호랑이" , "힘90")
      map.put("여우" , "힘90")
      map.put("호랑이" , "힘80")    --->  "호랑이" 라는 키가 중복되었다.
      (최종 호랑이 key에 저장된 value는 "힘80"으로 나중에 입력된 key의 value로 덮어 씌어 집니다. value 값은 중복가능)

        호랑이      여우

        힘80        힘90

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

remapResults="true"  (0) 2013.09.12
Ibatis 동적쿼리  (0) 2013.09.12
리눅스 명령어  (0) 2013.09.11
UNIX vi명령어  (0) 2013.09.11
스프링에서 로그 찍기 slf4j  (0) 2013.09.11
728x90
반응형
java.sql.SQLSyntaxErrorException: ORA-01722: 수치가 부적합합니다

이거 정신놓고 코딩하다 보면 가끔 뜸..

 

테이블의 컬럼타입과 입력타입이 달라서 뜨는 오류

 

서로 타입일치 시켜야함!

728x90
반응형

+ Recent posts