[Error] Execution (1: 1): ORA-29275: 부분 다중 바이트 문자



[원인]

오라클 서버의 CHARACTERSET과 클라이언트의 CHARACTERSET이 서로 다르고 호환도 되지 않는 경우 발생하는 오류.


[해결법]


1. 서버의 characterset 확인.

select parameter, value
from nls_database_parameters
where parameter like '%CHARACTERSET%';


2. 클라이언트 characterset 확인.


실행 ( 윈도키+R ) > regedit 레지스터 편집기 실행 > LNS_LANG 검색 후 언어설정 확인.



경로는 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE ...






일반 개발자에게 서버에 CHARSET을 변경할 권한은 당연히 없을것이고 DBA라고 하더라도 너무 무모한 짓이다.  로컬 PC의 레지스트리의 NLS_LANG 값을 서버 charset과 동일하게 KOREAN_KOREA.AL32UTF8 (KOREAN_KOREA.AL16UTF17) 로 바꾸는 방법이 한 방법이다.






Tools -> Preferences -> PL/SQL Beautifier  항목에서

Rules fils에서 파일위치 지정

PLSQL_Beautifier.br



Error : executeQueryForObject returned too many results.


queryForObject 사용시


결과값이 하나 이상이 넘어갈때 발생

queryForList로 사용한다, 아니면 단일값이 나오는 결과에 맞게 재구성한다.




단건 조회면 selectByPk를 호출하시면 되는데.. 아마도 해당 query가 하나의 데이터(ResultSet)이 아닌 여러 건이 리턴된 경우입니다.

iBatis는 query xml 작성 시 단건 select와 다건 select를 구분하지 않고 API 호출 할 때에 단건이나 다건이냐를 구분합니다.

selectByPk는 queryForObject를 통해 단건으로 처리하고, list는 queryForList로 다건을 처리합니다.

결론... boardPageDAO.selectBoardPage_S id로 지정된 query의 결과가 하나 이상 나오기 때문에 query에 where 조건을 추가하는 등의 수정이 필요합니다.

참고 


http://open.egovframe.kr/cop/bbs/selectBoardArticle.do?bbsId=BBSMSTR_000000000013&nttId=14188



쿼리가 다건 리턴하므로 dao에 select메소드로 되어 있는거 list메소드로 수정함


이렇게

select("CommuteDao.selectCommuteTimeInfo", param); 

=> list("CommuteDao.selectCommuteTimeInfo", param);


  • Javascript 사용 선언하기

   - Javascript 는 HTML 문서 내 <script></script> 태그로 사용을 선언하고 태그 안에 코드를 작성합니다.

<script type="text/javascript">
/* Javascript 코드 작성 */
</script>

  - <script></script> 태그 선언 위치

  • 전통적인 방법으로는 <head></head> 안에 선언합니다.
  • 페이지의 렌더링 지연을 막기 위해 <body></body> 안에서 가장 하단에 선언 하기도 합니다.
  • <body> 안의 요소들을 조작하는 경우 <head> 선언 또는 조작하고자 하는 요소보다 먼저 선언 하는 경우 원하는 동작을 하지 않을 수도 있습니다.

  - 태그 선언 위치에 따른 동작 예시

<html>
<head>
  <script type="text/javascript">
      document.getElementById("txt1").value = "Did value change?";
  </script>
</head>
<body>
   <input type="text" id="txt1" value=""/>
</body>
</html>
<html>
<head>
</head>
<body>
   <input type="text" id="txt1" value=""/>
   <script type="text/javascript">
      document.getElementById("txt1").value = "Did value change?";
   </script>   
</body>
</html>


  • JS 파일 작성 및 로드 하기

  - JS 파일 작성하기

  • 확장자는 : .js
  • JS 파일에는 <script></script> 선언을 하지 않습니다.

  - JS 파일 로드하기

  • JS 파일을 사용하고자 하는 페이지에서 <script></script> 태그의 src 속성을 활용합니다.
  • JS 파일을 로드 한 <script></script> 태그의 내부 javascript는 무시됩니다.
/* test.js */
alert("test.js alert!");
<!-- test.html -->
<html>
<head>
   <script type="text/javascript" src="./test.js">
      alert("test.js alert!"); // 이 스크립트는 실행되지 않습니다.
   </script>   
</head>
<body>
</body>
</html>

 

  • JavaScript 키워드

  키워드는 변수 또는 함수의 이름으로 사용할 수 없습니다.

  - 알아두면 유용한 키워드

  • in : 객체에 속성이 존재하는지 확인 하는 키워드
  • instanceof : 특정 클래스의 인스턴스인지 확인하는 키워드
  • typeof : 자료형을 확인하는 키워드

  - 사용에 주의를 주어야 하는 키워드

  • with : 사용하지 않는 것을 권장


  • Javascript 변수와 자료형

  - 변수

  • var 키워드 사용하여 선언합니다.
  • 변수 선언 시 명시적인 자료형이 없습니다.
  • = 연산자로 변수에 값을 할당 합니다.

var id = 10; // number 타입의 변수 값 10 선언
alert(id); // 10 출력
id = "ten"; //string 타입의 값 ten 으로 변수 값 변경
alert(id); // ten 출력


  - 자료형

  • undefined : 변수 선언만 하고 아무런 값을 할당 하지 않은 경우

  • null : 변수에 값이 없음을 명시적으로 할당한 경우

  • boolean

  • number :NaN 객체도 Number 타입

  • string

  • object   

var variable1; // undefined
variable1 = null;
variable1 = false; // boolean
variable1 = 1; // number
variable1 = "one"; // string
variable1 = function(){}; // object


  • Javascript 연산자

  - 기본적으로 다른 언어 (C, Java 등)와 동일한 연산자를 사용하므로 따로 기능을 설명하지 않겠습니다.

  - ==, != 의 특수한 경우

null == undefined // true
"NaN" == NaN // false
10 == NaN // false
NaN == NaN // false
NaN !=NaN // true
false == 0 // true
true == 1 // true
true == "1" // true
true == 2 // false
undefined == 0 // false
null == 0 // false
"1" == 1 // true

  - ==, != 비교와 ===, !== 비교의 차이 

  • ==, != : 두값의 값만을 비교하여 true 또는 false 를 반환합니다.

  • ===, !== : 두 값과 데이터 타입을 모두 비교하여 true 또는 false 를 반환합니다.

null === undefined // false
true === 1 // false
"1" === 1 //false

  - ! 연산자를 활용한 undefined, null, empty 체크

  • if 문의 조건으로 변수를 지정할 경우 null, undefined, NaN, "", 0, false 의 경우 false 나머지 값에 대해 true를 반환합니다.

var id = "";
if( !id ) {
   alert("id is empty.")
}


select 검색할때 파라미터를 리스트로 보내서 리스트에 있는 값을 하나하나씩 매핑시켜서 결과를 받을 때 유용한 쿼리죠. 

예를 들면 어떠한 리스트에 있는 값을 통해 쿼리문을 생성한다던지 하는 경우 iBatis에서는 iterate 태그로 for문과 같은 역할을 하여 동적 쿼리를 생성 할 수 있습니다.

<select id="getData" parameterclass="java.util.List" resultclass="int">
    SELECT  count(0)
    FROM    data_tb
    <iterate prepend="WHERE id IN" open="(" close=")" conjunction=",">
            #[]#
     </iterate>
</select>

위와 같이 parameterClass를 java의 List 형태로 전달해 주면 동적쿼리를 생성할수 있습니다. 만약 list에 1,2,3,4 의 데이터가 들어가 있으면 결과적으로 다음과 같은 쿼리가 실행되는 것과 같습니다.


<select id="getData" parameterclass="java.util.List" resultclass="int">
    SELECT  count(0)
    FROM    data_tb
    WHERE  id IN (1,2,3,4)
</select>

이렇게 iterate 를 사용하여 동적 쿼리문을 생성할 수 있습니다. 또한 parameterClass가 list형태가 아닌 Map이 List를 가지고 있는 형태도 iterate의 property 속성을 통해 접근할 수 있습니다.

만약 HashMap에 paramList라는 이름으로 list형이 들어가 있다고 가정하면

예)

 HashMap<String, Object> paramMap = new HashMap<String, Object>();

 List<Integer> paramList = new ArrayList<Integer>();

 paramMap.put("paramList", paramList);


<select id="getData" parameterclass="HashMap" resultclass="result">
    SELECT  *
    FROM    data_tb
    <iterate property="paramList" prepend="WHERE id IN" open="(" close=")" conjunction=",">
            #paramList[]#
    </iterate>
</select>

위와 같이 HashMap에 들어있는 list는 iterate의 property 속성을 통해 List를 가져 옵니다. ##사이는 HashMap에 put했던 list이름을 넣어주셔야 작동합니다.




http://www.dailyrazor.com/blog/best-java-web-frameworks/

2018년 java 웹 프레임워크 베스트 10 


https://github.com/devJang/developer-roadmap


참고하면 좋을듯!

웹 프로젝트를 진행할 때 알아두면 좋은 공개 SW를 다음과 같이 정리하였다.


  • 실행환경
  • 개발환경
  • 데이터베이스
  • 클라이언ㅌ트
  • 도구
  • SCM
  • 서버


opensw

+ Recent posts