DB 컬럼을 자바에서 호출 시 대소문자 상관없이 호출하는 방법을 알고 싶습니다. 0 2 7,560

by NExT맨 [Oracle 기초] Colum 변수 Uppercase Lowercase 대문자 소문자 [2013.02.27 11:22:44]


안녕하세요. 

현재 오라클 11g(11.2.0.2.0)에서 테스트를 하고 있는데 
자바 메서드에 DB 컬럼명을 호출 시 스트링 또는 변수를 소문자로 지정하면 
null이 호출되고 대문자로 지정하면 정상적으로 데이터를 호출하고 있습니다. 

제가 알기로 컬럼명 호출 시에는 대소문자를 구분하지 않고 불러오는걸로 알고 있지만 이게 따로 설정이 필요한건지 고수님들의 답변 부탁드려요. 

환경은 스프링3.0 + mybatis에서 테스트했으며 
DB 스크립트는 아래와 같습니다. 

ALTER TABLE ADMIN.SPRINGTABLE 
DROP PRIMARY KEY CASCADE; 

DROP TABLE ADMIN.SPRINGTABLE CASCADE CONSTRAINTS; 

CREATE TABLE ADMIN.SPRINGTABLE 

SEQ NUMBER(11) NOT NULL, 
NAMES VARCHAR2(20 BYTE), 
AGE NUMBER(3), 
SEX VARCHAR2(5 BYTE), 
ADDR VARCHAR2(30 BYTE), 
PHONE VARCHAR2(20 BYTE) 

TABLESPACE SYSTEM 
RESULT_CACHE (MODE DEFAULT) 
PCTUSED 40 
PCTFREE 10 
INITRANS 1 
MAXTRANS 255 
STORAGE ( 
INITIAL 64K 
NEXT 1M 
MINEXTENTS 1 
MAXEXTENTS UNLIMITED 
PCTINCREASE 0 
FREELISTS 1 
FREELIST GROUPS 1 
BUFFER_POOL DEFAULT 
FLASH_CACHE DEFAULT 
CELL_FLASH_CACHE DEFAULT 

LOGGING 
NOCOMPRESS 
NOCACHE 
NOPARALLEL 
MONITORING; 


-- There is no statement for index ADMIN.SYS_C007187. 
-- The object is created when the parent object is created. 

ALTER TABLE ADMIN.SPRINGTABLE ADD ( 
PRIMARY KEY 
(SEQ) 
USING INDEX 
TABLESPACE SYSTEM 
PCTFREE 10 
INITRANS 2 
MAXTRANS 255 
STORAGE ( 
INITIAL 64K 
NEXT 1M 
MINEXTENTS 1 
MAXEXTENTS UNLIMITED 
PCTINCREASE 0 
FREELISTS 1 
FREELIST GROUPS 1 
BUFFER_POOL DEFAULT 
FLASH_CACHE DEFAULT 
CELL_FLASH_CACHE DEFAULT 

ENABLE VALIDATE); 


========================== 아래는 자바 DAO 소스 ============================

package com.madnix.test1.global; 

import java.util.HashMap; 
import java.util.List; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mybatis.spring.SqlSessionTemplate; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("dao-context.xml") 
// @TransactionConfiguration(transactionManager="transactionManager") 
// @Transactional 
public class DaoContextTest { 

@Autowired 
private SqlSessionTemplate sqlSessionTemplate; 

@Test 
public void testApplicationContext() throws Exception { 



@Test 
public void testQuery1() throws Exception { 
System.out.println(sqlSessionTemplate); 
List list = sqlSessionTemplate.selectList("selectSample"); 
if (list != null) { 
for (int i = 0; i < list.size(); i++) { 
HashMap map = (HashMap)list.get(i); 
System.out.println(">>" + map.get("NAMES"));   <<== 테이블 컬럼명



}
by 아발란체 [2013.02.27 11:34:51]
위 단서로는 파악 할 수 없습니다.

HASHMAP 자료 구조에 키 값을 대문자로 값을 넣었으니 키 값도 대문자로 빼야 하는 것이고요,
키 값을 박는 부분을 찾아 소문자 키 값으로 박으면 소문자로 빼야 합니다.

즉 굳이 대소문자 구분 없이 빼려면 위 구조로 봤을 때
테이블 항목을 모두 대문자 키 값으로 넣었다고 한다면
아래처럼 변경해주시면 됩니다.
System.out.println(">>" + map.get("names".toUpperCase()));

DAO 단에서 부터 대문자로 날라 온다면
myBatis resultType 정의를 보시거나,
VO 패턴을 따로 정의하셨다면 이 부분을 보시길 바랍니다.

by 손님 [2013.02.27 15:10:15]
쉬운게 아니였군요. 아발란체님 답변대로 소스 구조 좀 더 찾아봐야겠네요...
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입