- Non-breaking space
- ASCII character 160
- char code 160
- &#160
- \u00A0
- %A0
-  

볼때는 일반적인 공백으로 보이지만 따로 처리해줘야 할 경우가 생겼다.
 

RegExp = /\u00A0/  or  / /

value = value.replace(/\u00A0/g, ' ');
or
value = value.replace(/ /g, ' ');
 
 
참고 :
http://stackoverflow.com/questions/3794919/replace-all-spaces-in-a-string-with
http://www.adamkoch.com/2009/07/25/white-space-and-character-160/








http://hangaebal.blogspot.kr/2014/11/regexp-non-breaking-space-char-code-160.html


- 해당 필드에 숫자만 있는 경우


ORDER BY TO_NUMBER(FIELD);


- 해당 필드에 숫자 이외의 값도 있는 경우


ORDER BY LPAD(FIELD, 10);
// 10 == FIELD.length


 
 출처 :
http://www.techonthenet.com/oracle/questions/sort1.php






http://hangaebal.blogspot.kr/2014/11/sql-varchar-sort-varchar2-field-as.html

======================================
스프링 3.1 이하
======================================
- 리턴을 ResponseEntity 타입으로 함
- 헤더에 캐릭터셋을 설정해서 보냄

@RequestMapping("/ajax")
@ResponseBody
public ResponseEntity handleAJAX() {
   
    ....로직....

    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.add("Content-Type", "text/html; charset=utf-8");
    return new ResponseEntity("한글", responseHeaders, HttpStatus.CREATED);
}



======================================
스프링 3.2 이상
======================================
- @RequestMapping의 produces 옵션이 생겨 좀 더 쉽게 적용 가능함


@RequestMapping(value = "/ajax", produces = "application/json; charset=utf8")
public String handleAJAX() {
   
    ....로직....
  
    return "한글"
}




참고 :
http://softline21c.blogspot.kr/2012/06/springmvc-responsebody.html
http://novafactory.net/archives/3126







http://hangaebal.blogspot.kr/2014/11/spring-spring-responsebody_12.html

비밀번호 규칙에 사용


var check = /^(?=.*[a-zA-Z])(?=.*[!@#$%^*+=-])(?=.*[0-9]).{8,16}$/;

if (!check.test(pw)) {   
    // fail
} else {
    // success

}






http://hangaebal.blogspot.kr/2014/11/javascript_5.html

public class TestVo {

 //자기 자신을 참조하여 리스트를 리턴하도록 한다.
 private List<TestVo> testList;
 private String key;
 private String name;
 private String phone;
 private Date birth;
 private int age;
 private boolean married;

 
 public List<TestVo> getTestList() {
  return testList;
 }
 public void setTestList(List<TestVo> testList) {
  this.testList = testList;
 }
 public String getKey() {
  return key;
 }
 public void setKey(String key) {
  this.key = key;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPhone() {
  return phone;
 }
 public void setPhone(String phone) {
  this.phone = phone;
 }
 public Date getBirth() {
  return birth;
 }
 public void setBirth(Date birth) {
  this.birth = birth;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 public boolean isMarried() {
  return married;
 }
 public void setMarried(boolean married) {
  this.married = married;
 }
}
 
JSP :
<input name="testList[0].name" />
...
<input name="testList[1].name" />
...


참고 :
http://reikop.tistory.com/16
http://viralpatel.net/blogs/spring-mvc-multi-row-submit-java-list/







http://hangaebal.blogspot.kr/2014/11/spring-modelattribute-arraylist.html

테이블 정보 상세보기
F4 : Table, View, Proc, Funct, Package DESC(테이블명 위에 커서를 두고 F4)
 
자동완성
Ctrl+. : Table Completion (매칭되는 테이블목록 출력)
Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)
 
SQL문 실행
F5 : SQL Editor내의 모든 SQL문 실행
Ctrl+Enter : 현재 커서의 SQL문 실행
F9 : SQL문 실행 후 Grid에 출력
 
히스토리(과거 수행SQL문 조회)
F8 : 과거에 실행한SQL HISTORY 목록
Alt+Up : History UP
Alt+Down : History DOWN
 
텍스트 대/소문자 변환
CTRL+L : 텍스트를 소문자로
CTRL+U : 텍스트를 대문자로
 
주석처리
Ctrl+B : 주석처리
Ctrl+Shift+B : 주석해제
 
편집 창 전환(이동)
F6 : SQL Editor와 결과창간의 이동
F2 : SQL Editor창 전체화면 전환
Shift+F2 : Grid Output창 전체화면 전환
 
기타 단축키
F7 : 화면을 모두 CLEAR
Ctrl+Shift+F : 쿼리문을 보기좋게 정렬
Ctrl+F9 : SQL Validate (SQL문을 수행하지 않음)

F1
Toad 도움말 파일의 SQL Editor 부분이 표시됩니다.
F2
전체 화면 Editor Editor/Results 패널 표시 장치 사이를 전환합니다.
<SHIFT>F2
전체 화면 그리드를 전환합니다.
F3
다음으로 일치하는 것을 찾습니다.
<SHIFT>F3
이전에 일치하는 것을 찾습니다.
F4
팝업 창의 테이블, , 프로시저, 함수, 또는 패키지를 설명합니다.
F5
스크립트로 실행합니다.
F6
커서를 Editor Results 패널 사이로 전환합니다.
F7
모든 텍스트를 지웁니다.
F8
이전 SQL 문을 재호출합니다(SQL Statement Recall 창을 불러옵니다).
F9
실행문을 실행합니다.
<CTRL>F9
실행(구문 분석) 없이 실행문을 검사합니다.
<SHIFT>F9
커서 위치에서 현재 실행문을 실행합니다.
F10
오른쪽 클릭 메뉴를 표시합니다.
F11
Script 같은  실행(=F5)
F12
편집기 내용을 지정된 외부 편집기로 전달합니다.
<CTRL>A
모든 텍스트를 선택합니다.
<CTRL>C
복사
<CTRL>D
프로시저 인수를 표시합니다.
<CTRL>E
현재 실행문에서 Explain Plan 실행합니다.
<CTRL>F
텍스트를 찾습니다(Find Text 창을 불러옵니다).
<CTRL>G
라인으로 이동합니다(Goto Line 창을 불러옵니다).
<CTRL>L
텍스트를 소문자로 변환합니다.
<CTRL>M
Make Code Statement
<CTRL>N
이름이 지정된 SQL 문을 재호출합니다(SQL Statement Recall 창을 불러옵니다).
<CTRL>O
텍스트 파일을 엽니다.
<CTRL>P
Strip Code Statement(쓸데없는 태그들을 정리해 줍니다. 유용함)
<CTRL>R
검색  바꾸기(Find and Replace Text 창을 불러옵니다)
<CTRL>S
파일을 저장합니다.
<SHIFT><CTRL>S
파일을 다른 이름으로 저장합니다.
<CTRL>T
 드롭다운을 표시합니다.
<CTRL>U
텍스트를 대문자로 변환합니다.
<CTRL>V
붙여넣기
<CTRL>X
잘라내기
<SHIFT><CTRL>Z
마지막으로 취소한 작업을 재실행합니다.
<ALT><UP>
이전 실행문을 표시합니다.
<ALT><DOWN>
다음 실행문을 표시합니다(<ALT><UP> 사용한  사용)
<ALT><PgUp>
이전 탭으로 이동
<ALT><PgDn>
다음 탭으로 이동
<CTRL><ALT><PgUp>
이전 결과 패널 탭으로 이동
<CTRL><ALT><PgDn>
다음 결과 패널 탭으로 이동
<CTRL><HOME>
데이터 그리드에서는  위의 레코드셋으로 이동하며, 결과 그리드에서는 커서가 위치한행의  번째 열로 이동하고, 편집기에서는 텍스트의  번째 열과  번째 행으로 이동합니다.
<CTRL><END>
데이터 그리드에서는 레코드셋의  끝으로 이동하며, 편집기에서는 텍스트의 마지막 열과 마지막 행으로 이동합니다.  단원의 "주의" 참조하십시오.
<CTRL><SPACE>
코드 완성 템플릿을 활성화합니다.
<CTRL><TAB>
MDI Child 창의 콜렉션을 순환합니다.
<CTRL><ENTER>
커서 이치에서 현재 SQL 문을 실행합니다.
<CTRL>. (마침표)
테이블 이름을 자동으로 완성합니다.




출처 :
http://unions5.tistory.com/39






http://hangaebal.blogspot.kr/2014/11/toad.html





<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>로그인</title>
<link rel="stylesheet" type="text/css" href="/conf/style.css">
<S-ript Language="JavaS-ript">// 로그인 입력 확인
function checkLogin(){
var frm = document.loginForm;
 if(frm.id.value == "") {
  alert("아이디를 입력하세요.");
  frm.id.focus();
  return false;
 }
 if(frm.pass.value == "") {
  alert("비밀번호를 입력하세요.");
  frm.pass.focus();
  return false;
 }
 // 로그인 정보 저장 체크 확인하여 진행
 if(frm.saveid.checked) saveLogin(frm.id.value);
 else  saveLogin("");
 frm.action = "/member.do?method=login";
 frm.submit();
}
// 로그인 정보 저장
function confirmSave(checkbox){
  var isRemember;
  // 로그인 정보 저장한다고 선택할 경우
  if(checkbox.checked)  {
    isRemember = confirm("이 PC에 로그인 정보를 저장하시겠습니까? \n\nPC방등의 공공장소에서는 개인정보가 유출될 수 있으니 주의해주십시오.");
    if(!isRemember)
      checkbox.checked = false;
  }
}
// 쿠키값 가져오기
function getCookie(key){
  var cook = document.cookie + ";";
  var idx =  cook.indexOf(key, 0);
  var val = "";
  if(idx != -1)  {
    cook = cook.substring(idx, cook.length);
    begin = cook.indexOf("=", 0) + 1;
    end = cook.indexOf(";", begin);
    val = unescape( cook.substring(begin, end) );
  }
  return val;
}
// 쿠키값 설정
function setCookie(name, value, expiredays){
  var today = new Date();
  today.setDate( today.getDate() + expiredays );
  document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";";
}
// 쿠키에서 로그인 정보 가져오기
function getLogin(){
 var frm = document.loginForm;
 // userid 쿠키에서 id 값을 가져온다.
 var id = getCookie("userid");
 // 가져온 쿠키값이 있으면
 if(id != "") {
  frm.id.value = id;
  frm.saveid.checked = true;
 }
}
// 쿠키에 로그인 정보 저장
function saveLogin(id){
 if(id != "") {
  // userid 쿠키에 id 값을 7일간 저장
  setCookie("userid", id, 7);
 }else{
  // userid 쿠키 삭제
  setCookie("userid", id, -1);
 }
}
</Script>
<body onLoad="getLogin()">
<img src="/item/images/11300514_user_153922.jpg" alt="" width="900px" height="120px"
      onclick="location.href='/main.do'" style="cursor:hand; margin-bottom:10px; display:block;"/>
<div class="left">
<jsp:include page="/conf/left_column.jsp"></jsp:include>
</div>
<div class="main">
<form name="loginForm" method="post" action="">
아이디 : <input name="id">
 <input name="saveid" id="saveid"        type="checkbox" onClick="confirmSave(this)">
 <label for="saveid">저장</label>
<br> 비밀번호 : <input name="pass" type="password"> <br> <br>
<input type=submit value="로그인" onclick="checkLogin();">
</form>
<c:if test="${ result ne null }">
<c:if test="${result==0}">비밀번호가 틀립니다.</c:if>
<c:if test="${result==-1}">아이디가 없습니다.</c:if>
</c:if>
</div>
</body>
</html>
 
 
출처 :
http://seonju.egloos.com/viewer/85761





http://hangaebal.blogspot.kr/2014/11/javascript.html


.blackout {
    background-color:#000;
    opacity:.7;
    filter:alpha(opacity=70);
    height:100%;
    width:100%;
    position:fixed;
    top:0;
    left:0;
    z-index:100;
    display:none;
    cursor:pointer;
}



http://hangaebal.blogspot.kr/2014/10/css-popup-window-with-dimmed-background.html

1. 샘플 프로젝트 생성
STS 에서 [File] - [New] - [Spring Template Project] 메뉴를 클릭한 후 Spring MVC Project를 이용해 샘플 프로젝트를 생성한다.
 
2. pom.xml 파일 수정
quartz 관련 모듈을 이용하기 위해서 pom.xml 파일에 관련 라이브러리들 넣는다.
spring-tx, quartz, commons-collections, javax.transaction 4개 넣어줘야한다.

?
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
<!-- Quartz framework and dependencies -->
<dependency>
    <groupId>opensymphony</groupId>
    <artifactId>quartz</artifactId>
    <version>1.6.3</version>
    <scope>compile</scope>
</dependency>
<!-- Quartz 1.6.0 depends on commons collections -->
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.1</version>
    <scope>runtime</scope>
</dependency>
<!-- Quartz 1.6.0 requires JTA in non J2EE environments -->
<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>jta</artifactId>
    <version>1.1</version>
    <scope>runtime</scope>
</dependency>

 
3. 주기적으로 실행 될 Bean 생성
2개의 Bean을 만든다.
CronQuartz1.java

?
package com.mungchung.sample;
 
import java.text.SimpleDateFormat;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
 
public class CronQuartz1 extends QuartzJobBean{
    @Override
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {
        long time = System.currentTimeMillis();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
        System.out.println("Cron trigger 1 (5 second): current time = " + sdf.format(time));
    }
 
}

CronQuartz2.java

?
package com.mungchung.sample;
 
import java.text.SimpleDateFormat;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
 
public class CronQuartz2 extends QuartzJobBean{
    @Override
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {
        long time = System.currentTimeMillis();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
        System.out.println("Cron trigger 2 (1 minute): current time = " + sdf.format(time));
    }
}

 
4. quartz Bean과 위에서 생성한 Bean 연동
2개의 Bean이 각각 다른 시간차이로 실행되도록 설정해줄것이다.
CronQuartz1.java - 5초마다 실행
CronQuartz2.java - 1분마다 실행
 
/src/main/webapp/WEB-INF/spring/root-context.xml

?
<!-- 1. Cron 대상이 되는 클래스 정의 -->
<bean id="cronQuartz1" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.mungchung.sample.CronQuartz1"/>
</bean>
<bean id="cronQuartz2" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.mungchung.sample.CronQuartz2"/>
</bean>
 
<!-- 2. Cron 시간 설정 -->
<bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="cronQuartz1"/>
    <property name="cronExpression" value="0/5 * * * * ?"/>
</bean>
<bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="cronQuartz2"/>
    <property name="cronExpression" value="0 0/1 * * * ?"/>
</bean>
 
<!-- 3. Cron 실행 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger1"/>
            <ref bean="cronTrigger2"/>
        </list>
    </property>
    <property name="quartzProperties">
        <props>
            <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
            <prop key="org.quartz.threadPool.threadCount">3</prop>
            <prop key="org.quartz.threadPool.threadPriority">4</prop>
            <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
            <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
        </props>
    </property>
</bean>

 
 
Cron Expression
총 7개의 필드 있고 마지막 필드(년도)는 생략 가능하다

 필드이름허용 값 
초(Seconds)0 ~ 59 
분(Minutes)0 ~ 59 
시간(Hours)0 ~ 23
달의 날짜(Day-of-month)1 ~ 31
달(Month) 1 ~ 12 or JAN ~ DEC
주의 날짜(Day-of-week)1 ~ 7 or SUN-SAT
년도(Year) (선택가능) 빈값, 1970 ~ 2099

Cron Expression의 특수문자
Expression설명 예시 
    * 모든 수를 나타냄  
     -값의 사이를 의미* 10-13 * * * *     10,11,12,13분에 동작함 
     ,특정값 지칭* 10,11,13 * * * *      10,11,13분에 동작함
     /값의 증가를 표현* 0/5 * * * *       0분부터 시작해서 5분마다 동작 
     ?특별한 값이 없음을 나타냄(day-of-month, day-of-week 필드만 사용) 
     L마지막 날을 나타냄(day-of-month, day-of-week 필드만 사용) 



6. 실행결과
실행결과를 보면 하나는 5초마다, 다른 하나는 1분마다 Bean이 실행되고 있음을 알수 있다.
 
 
 
출처 :
http://www.mungchung.com/xe/spring/21303


사용자 계정 및 테이블 스페이스 만들기
1. 테이블 스페이스 만들기

1) SYSTEM USER 로 로그인
사용자 계정과 테이블을 만들 수 있는 공간으로서 테이블 스페이스를 만들기 위해서 SYSTEM 계정으로 접속합니다.

Tip >> 2. 기존에 가동 중인 서버에 추가로 데이터를 기동 하기 위해서는

setenv ORACLE_SID ora_sid 로 해 주신 다음에 기존 가동 데이터를 작성 하시던 방법 그대로 하심 됩니다.
물론 init.ora 파일 데이터 파일등등 모두 새로 다 만들어 주셔야 합니다.
새로 다시 하나 만든다고 보시면 될거 같습니다.
물론 오라클 SID명은 달리 하셔야 되구요.
가동중의 데이터를 기동 하게 되면 오라클 에러가 납니다.
즉 두개의 데이터 베이스가 가동 하게 되는 것입니다만...
무슨 이유에서 그렇게 하시는지는 모르겠지만...
한 서버에 한개의 데이터베이스가 이상적입니다.

==> 한 서버에 사용자를 바꾸면서 몇개의 데이트 베이스를 구축하는 방법이 유용할 듯 하군요.
더 이상 고민할것 없이 바로 Tablespace 를 추가합시다.

2) Schema Browser를 통해서 Tablespace 생성

Toad의 Schema Browser 에서 Tablespace Tab 선택

다음의 내용들을 추가합니다.

. Tablespace 이름 지정
. Block Size 지정 (Default : 8 kb)
. Datafile Name 지정 : /usr/local/oracle/u01/app/oracle/oradata/ORADEV/...
. Database Size 지정
. AutoExtend 여부 지정
. Contents : Permanent
. Logging, Online Option 체크


2. 사용자 만들기

Toad의 Schema Browser 에서 User Tab 선택

새로운 사용자 추가

> UserInfo Tab
. User Name 과 Password 입력
. Authentication 은 "Use Database Authentication" 을 사용합시다.

> Tablespace Tab
. Default Tablespace Name 을 지정
. Temporary tablespace 를 지정

> Role Tab
사용자 롤을 지정합니다.
일반적으로 CONNECT 와 RESOURCE 권한을 지정하고
EXP_FULL_DATABASE
IMP_FULL_DATABASE 권한도 같이 주자.

admin option 을 추가하면 자기가 받은 권한을 다른 user에게도 줄수 있다.(필요 없다)
default option 을 추가한다. default option 을 주면 로그인시 자동으로 부여받은 권한이 Enable 된다.

오라클에 기본적으로 미리 생성된 roles
CONNECT
RESOURCE
DBA : WITH ADMIN OPTION을 포함한 모든 system 권한을 주낟.
EXP_FULL_DATABASE : DB export 권한을 준다.
IMP_FULL_DATABASE : DB import 권한을 준다.
DELETE_CATALOG_ROLE : data dictionary table의 delete 권한을 준다.
EXECUTE_CATALOG_ROLE : data dictionary package의 execute 권한을 준다.
SELECT_CATALOG_ROLE : data dictionary table의 select 권한을 준다.

> System Privileges Tab




출처 :
http://sjunious.egloos.com/viewer/824415





http://hangaebal.blogspot.kr/2014/10/toad-table-space.html

+ Recent posts