2014년 12월 3일 수요일

insert 시 &처리

INSERT INTO test VALUES ('김&동훈', '2004-10-08');
위의 쿼리를 입력 하려고 합니다.
"&" 로 인해 입력이 안됩니다. & 무시하고 입력 방법이 없나여?

INSERT INTO test VALUES ('김\&동훈', '2004-10-08'); => toad 에서는 입력이 됩니다만, sqlplus 이용시 안됩니다.

위와 같은 쿼리를 ss.sql 파일에 저장한후

INSERT INTO test VALUES ('김\&동훈', '2004-10-08');
INSERT INTO test VALUES ('김\&동호', '2004-10-08');
INSERT INTO test VALUES ('나&난나', '2004-09-24');
commit;
exit;


sqlplus aaa/bbb @ss.sql



이 글에 대한 댓글이 총 7건 있습니다.
'&'가 바인딩변수로 사용되기 때문입니다만....

굳이 '&' 문자를 넣으셔야 한다면 '&'를 단문자로 처리하시면 입력은 되더군요.(저도 직접 해보고서야 알았습니다만...)

INSERT INTO TEST VALUES ('김' || '&' || '동훈','2004-10-18');


지나가며님이 2004-12-29 14:32:04에 작성한 댓글입니다. Edit 
답변 감사 합니다.
data 를 이전 하는 과정에서
& 로 인해 data가 이전이 안돼어서 그렇습니다.

김동훈님이 2004-12-29 14:44:16에 작성한 댓글입니다. Edit 

자료이전때문에 그러신다면 SQL Loader를 사용하시면 될텐데요.
SQL Plus를 언급하시는 것으로 뵈서는 다른 툴이 없으신 것 같습니다만, ORACLE에서 제공되는 SQLLDR 명령을 사용하실 수 있습니다.
(사용법은 좀 복잡하긴 합니다만... 필요하시면 메일을 남겨주시면 갈무리해서 날려드리겠습니다)
계속 사용하실 계획이시라면 토드 또는 오렌지 등의 툴을 확보하심이 좋을 듯 하네요.
지나가며님이 2004-12-29 15:04:30에 작성한 댓글입니다. Edit 
메일주소는

토드에서의 기능을 같이 알려 주시면 감사하겠습니다.
김동훈님이 2004-12-29 15:10:01에 작성한 댓글입니다. Edit 
이전은 postgresql -> oracle 로 의 이전입니다.
김동훈님이 2004-12-29 15:12:32에 작성한 댓글입니다. Edit 
혹시 이런것 내용인가여...
Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법

-- 테스트 테이블 생성
SQL>CREATE TABLE test_str(
        val varchar2(10));

 
-- 테이블에 아래와 같이 특수문자를 인서트 할경우
SQL> INSERT INTO test_str VALUES('Q&A');
a의 값을 입력하십시오:
-- 
이런 문장이 나옵니다.. 
-- 
특수문자를 갖는 데이터를 인서트 하기 위해서는 다음과 같은 세 가지 해결 방법이 있습니다.

 
▒ 첫번째 방법

   SQL*Plus에서 
SET DEFINE OFF나 SET SCAN OFF를 실행하여
   
Substitution Variable(&)을 Turn Off시킨다.


   SQL> 
SET DEFINE OFF
   SQL> 
INSERT INTO test_str VALUES('Q&A');
   1 개의 행이 만들어졌습니다.
  
   SQL>SELECT * FROM test_str;
        VAL
        ------
        Q&A


 
▒ 두번째 방법

   SET 
DEFINE ON 상태로 유지 시키면서 Substitution Variable을
   다른 
Non-Alphanumeric 문자나 Non-White Space 문자(*, % 등등)로 대체시킨다.


   SQL> 
SET DEFINE %
   SQL> 
INSERT INTO test_str VALUES('Q&A');
   1 개의 행이 만들어졌습니다.


 
▒ 세번째 방법

   SET ESCAPE ON 상태에서(DEFINE은 &로, SCAN은 ON 상태로 유지)
   
특수 문자 앞에 ESCAPE 문자인 BACKSLASH('\')를 붙인다.


   SQL> 
SET ESCAPE ON
   SQL> 
SHOW ESCAPE
        ESCAPE "\" (hex 5c)
   SQL> 
INSERT INTO test_str VALUES ('Q\&A');
   1 개의 행이 만들어졌습니다.

테이블 스페이스 수정하기

--테이블 스페이스
alter table KRS_FXDEALTRAN_IT move tablespace KRS_IDX_TS02

--index
alter index KRS_FXDEALTRAN_IT_PRIMARY_KEY rebuild tablespace KRS_IDX_TS02

[jdbc] oracle 연결시 Error 모음입니다.

classes12.zip 이 연결이 안된 경우입니다.
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at getEmp.main(getEmp.java:18)
해결1: classes12.zip을 classes12.jar 로 이름을 바꾼 뒤에 <CATALINA_HOME>/common/lib 에 놓고 재시동


host 주소가 맞지 않은 경우입니다.
또는 listener가 떠있지 않은 상태입니다.
java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)

db명이 틀릴경우입니다. 호스트스트링이라고도 합니다.
java.sql.SQLException: IO 예외 상황: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=135290880)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)

아이디와 패스워드가 틀릴경우입니다.
java.sql.SQLException: 널 사용자나 암호가 THIN 드라이버에서 지원되지 않습니다
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:803)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:179)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:198)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)

유용한 JQuery플러그인

jQuery 플러그인(http://plugins.jquery.com/)은 등록된것만 4,500개에 이른다.
다 어디에 쓰이는 플러그인인지 써보지 않고서는 알 방법이 없지 않나. 나도 뭐가 있는지 모르는 상태에서 list 플러그인 찾다가 누군가 올려 놓은 유용한 jQuery 플러그(http://marcgrabanski.com/article/list-of-useful-jquery-plugins)리스트라는 글을 발견하고 옮겨 놨다.

자바메일 ..참조, 숨은참조, 중요도 설정하기

1. 받는 사람 참조 하는 방법
msg.setRecipients(Message.RecipientType.CC, address);
이렇게 추가 시켜주고 처리하면 됩니다.
2. 받는 사람 숨은 참조 하는 방법
msg.setRecipients(Message.RecipientType.BCC, address);
이렇게 추가 시켜주고 처리하면 됩니다.
3. 메일에 중요도 높음으로 보내는 방법
msg.setHeader("Importance", "High"); 추가 해주시면 됩니다. msg.setHeader 안에 Importance 값은 변경되지 않고
High 값은 아래와 같이 설정을 해주시면 됩니다.
- 중요도 높음 : High
- 보통 : Normal
- 중요도 낮음 : Low

JAVA.UTIL.SCANNER로 텍스트 스캔하기

2SE 5.0에는 일상적 태스크를 좀 더 쉽게 구현할 수 있도록 하는 클래스와 메소드들이 추가되었다. 이번 팁에서는 새로 추가된java.util.Scanner클래스를 이용함으로써 일반 표현문을 사용하는 스트링과 프리미티브 타입을 읽고 파싱(parsing)하는 것이 어떻게 좀 더 쉬워졌는지 알아보도록 하자.
J2SE 5.0의 출시 이전에는 파일에서 텍스트를 읽으려면 다음의 TextReader 클래스 같은 코드를 작성해야했다.
   import java.io.BufferedReader;
   import java.io.FileReader;
   import java.io.IOException;
   import java.io.File;

   public class TextReader {
     private static void readFile(String fileName) {
       try {
         File file = new File(fileName);
         FileReader reader = new FileReader(file);
         BufferedReader in = new BufferedReader(reader);
         String string;
         while ((string = in.readLine()) != null) {
           System.out.println(string);
         }
         in.close();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }

     public static void main(String[] args) {
       if (args.length != 1) {
         System.err.println("usage: java TextReader "
           + "file location");
         System.exit(0);
       }
       readFile(args[0]);
     }
   }
이와 같은 클래스에서의 기본적인 접근법은 하드 드라이브의 실제 파일과 일치하는 File 오브젝트를 생성하는 것이다. 그리고 나서 그 파일과 관련된 FileReader와 그 FileReader의 BufferedReader를 생성하고, 그 후 BufferedFile 리더를 사용하여 한번에 한 줄씩 읽는다.
실행되는 TextReader클래스를 보기위해서는 클래스에 대한 문서를 생성하여 읽고 파싱해야한다. 문서를 생성하기 위해서는 TextReader와 같은 디렉토리 안에 있는 TextSample.txt라는 파일에 다음과 같은 두 줄의 텍스트를 저장해야 한다.
   Here is a small text file that you will
   use to test java.util.scanner.
TextReader를 컴파일하고 다음을 입력하여 구동시켜보자.
   java TextReader TextSample.txt
표준 출력으로 되돌아온 원본 파일을 보게 될 것이다.
프리미티브 타입과 스트링을 파싱하는 클래스인 java.util.Scanner를 이용하여 TextReader의 코드를 간단하게 할 수 있다.
   import java.io.File;
   import java.io.FileNotFoundException;
   import java.util.Scanner;

   public class TextScanner {

     private static void readFile(String fileName) {
       try {
         File file = new File(fileName);
         Scanner scanner = new Scanner(file);
         while (scanner.hasNext()) {
           System.out.println(scanner.next());
         }
         scanner.close();
       } catch (FileNotFoundException e) {
         e.printStackTrace();
       }
     }

     public static void main(String[] args) {
       if (args.length != 1) {
         System.err.println("usage: java TextScanner1"
           + "file location");
         System.exit(0);
       }
       readFile(args[0]);
     }
   }
TextScanner를 컴파일하고 다음과 같이 구동하자.
   java TextScanner TextSample.txt
다음과 같은 결과가 나타난다.
   Here
   is
   a
   small
   text
   file
   that
   you
   will
   use
   to
   test
   java.util.scanner.
TextScanner 는 파일로부터 Scanner 오브젝트를 생성한다. Scanner는 파일의 컨텐츠를 구획자 패턴을 이용하여 분해한다. 구획자 패턴의 디폴트 값은 흰 여백이다. 그 후 TextScanner는 Scanner의 hasNext() 메소드를 호출한다. 이 메소드는 Scanner 입력값에 파일의 마지막 부분에 이를 때까지 다른 token이 있으면 'true'를 리턴한다. next() 메소드는 다음 token을 나타내는 스트링을 리턴한다. 따라서TextScanner는 파일의 마지막부분에 이를 때까지 각 라인에서 next()에 의해 리턴되는 스트링을 프린트한다.
Scanner의 useDelimiter 를 이용해 입력물을 토큰화하는 데 이용하는 구획자를 변경시킬 수도 있다. 메소드에 스트링 또는java.util.regex.Pattern에 전달해주면 된다. 어떤 패턴들이 적절한 지에 대해서는 JavaDocs page for Pattern를 참조하기 바란다. 예를 들어 newline(\n)을 구획자로 이용하여 한번에 한 줄의 입력물을 읽을 수 있다. 다음은 새줄 문자를 구획자로 이용하는 수정된 readFile()메소드이다.
   private static void readFile(String fileName) {
     try {
       Scanner scanner = new Scanner(new File(fileName));
       scanner.useDelimiter
         (System.getProperty("line.separator")); 
       while (scanner.hasNext()) {
         System.out.println(scanner.next());
       scanner.close();
     } catch (FileNotFoundException e) {
       e.printStackTrace();
     }
   } 
마지막 줄을 찾는 다른 옵션들도 있다. 예를 들어 새줄 문자로 끝나는 라인이나 캐리지 리턴(enter키)과 newline으로 끝나는 라인들을 조사할 수 있다. "\r\n|\n" 일반 표현문을 이용하여 이를 실행할 수 있다. java.util.regex.Pattern의 JavaDocs는 또다른 라인 종결기들을 보여주므로 좀 더 복잡한 분석은 "\r\n|[\r\n\u2028\u2029\u0085]"표현문을 이용한다. 또한 Scanner 클래스의 hasNextLine()nextLine() 메소드를 이용할 수 있다. 어느 경우이던 수정된 TextScanner를 사용하면 결과물은 TextSample.txt의 컨텐츠와 레이아웃에 부합될 것이다. 다음을 참고하기 바란다.
   Here is a small text file that you will
   use to test java.util.scanner.
Scanner에 의해 사용된 구획자의 패턴을 간단하게 변경하여 큰 효과와 유연성을 얻을 수 있다. 예를 들어 다음의 구획자를 지정하면,
   scanner.useDelimiter("\\z");
한번에 전체 파일을 읽는다. 이는 Pat Niemeyer가 java.net blog에서 제안하고 있는 요령과도 비슷하다. 몇 개의 중간 오브젝트를 생성하지 않고도 웹페이지의 모든 컨텐츠를 읽을 수 있는 것이다. 다음 WebPageScanner클래스의 코드는 java.net homepage의 현재 컨텐츠를 읽고 있다.
   import java.net.URL;
   import java.net.URLConnection;
   import java.io.IOException;
   import java.util.Scanner;

   public class WebPageScanner {
     public static void main(String[] args) {
       try {
         URLConnection connection =
           new URL("http://java.net").openConnection();
         String text = new Scanner(
           connection.getInputStream()).
           useDelimiter("\\Z").next();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
Scanner 클래스로 스트링 이외의 것들도 다룰 수 있다. 프리미티브 타입으로 이루어진 데이터를 파싱하는 데에도 사용할 수 있다. 이에 대한 예제로, 다음의 세 라인을 Employee.data라는 이름의 파일(TextSample와 같은 디렉토리 안)에 저장하자.
   Joe, 38, true
   Kay, 27, true
   Lou, 33, false
이를 하나의 큰 스트링으로 취급하여 이 스트링을 파싱한 후에 대화문을 실행할 수도 있지만, 대신에 이 파일을 두가지 단계로 파싱해보자. 이는 다음의 클래스 DataScanner에 설명되어 있다.
   import java.util.Scanner;
   import java.io.File;
   import java.io.FileNotFoundException;

   public class DataScanner {

     private static void readFile(String fileName) {
       try {
         Scanner scanner =
           new Scanner(new File(fileName));
         scanner.useDelimiter
           (System.getProperty("line.separator")); 
         while (scanner.hasNext()) {
           parseLine(scanner.next());
         }
         scanner.close();
       } catch (FileNotFoundException e) {
         e.printStackTrace();
       }
     }

     private static void parseLine(String line) {
       Scanner lineScanner = new Scanner(line);
      lineScanner.useDelimiter("\\s*,\\s*");
       String name = lineScanner.next();
       int age = lineScanner.nextInt();
       boolean isCertified = lineScanner.nextBoolean();
       System.out.println("It is " + isCertified +
         " that " + name + ", age "
         + age + ", is certified.");
     }

     public static void main(String[] args) {
       if (args.length != 1) {
         System.err.println("usage: java TextScanner2"
           + "file location");
         System.exit(0);
       }
       readFile(args[0]);
     }
   }
DataScanner의 바깥쪽 Scanner 오브젝트는 한번에 한 라인씩 파일을 읽는다. readFile() 메소드는 각 라인을 두번째 스캐너에 전달하고, 이 두번째 스캐너는 콤마로 ,구획된 데이터를 파싱하고 콤마 양쪽의 흰 여백을 삭제한다. 다음 token이 특정타입의 token인지 아닌지 분석하여 다음 token을 그 타입의 인스턴스로 취급하도록 하는 hasNext()나 next()메소드들도 있다. 예를 들어nextBoolean()은 다음 token을 boolean으로 취급하여 "true" 또는 "false" 스트링과 매치시킨다. 매칭이 이뤄지지 않으면java.util.InputMismatchException이 던져진다. DataScanner의 parseLine() 메소드는 각 라인이 어떻게 String, int, boolean으로 파싱되는지 보여준다.
Compile DataScanner. Then run it as follows:
DataScanner를 컴파일하고 다음과 같이 구동시키자.
   java DataScanner Employee.data
다음과 같은 결과가 나타난다.
   It is true that Joe, age 38, is certified.
   It is true that Kay, age 27, is certified.
   It is false that Lou, age 33, is certified.
콤마를 구획문자로 사용하고 싶을 것이다. 다시 말해 다음과 같이 시도해보려고 할 것이다.
   lineScanner.useDelimiter(",");

이는 결국 InputMismatchException로 끝날 것이다. 이는 boolean으로 변경하려는 token에 여분의 공간이 포함되며 이 공간은 "true"나 "false" 에 매치되지 않기 때문이다. 일반적인 표현문의 모든 애플리케이션에 해당되는 케이스이므로 패턴을 구축하는 데 있어서 특히 세심한 주의가 필요할 것이다.

method run() of type Runnable(){} must override a superclass method

I use Eclipse to compile the Java part of the project and create tha
apk file... before, when we were not using shared library, I was able
to create the apk file fine, but now, after updating my androind-
lighthouse, and compile it again, when I try to generate the apk file
for the example QtAnimatedTiles (included), I am getting a new error
message:
method run() of type Runnable(){} must override a superclass method 
it happens 10 times in many places like: 
QtApplication.java /qtExample/src/com/nokia/qt line 95
QtApplication.java /qtExample/src/com/nokia/qt line 115
QtApplication.java /qtExample/src/com/nokia/qt line 134
QtApplication.java /qtExample/src/com/nokia/qt line 153
QtApplication.java /qtExample/src/com/nokia/qt line 171
and other places... 
I don´t want to mess with the .java files provided by the android-
lighthouse - so I wonder... what is going on? anyone else having the
same problem?
 
<script language="javascript1.3"></script>
<input id="hdn_reply_to_subj" value="method run() of type Runnable(){} must override a superclass method" type="hidden" /> <input id="hdn_date" value="2010년6월28일, 오후5시59분" type="hidden" /> <input id="hdn_author" value="Anonymous Name " type="hidden" /> <input id="hdn_group_name" value="android-qt" type="hidden" />
Anonymous Name
프로필 보기 한국어로 번역 번역됨(원문 보기)
 
보낸사람: Anonymous Name <anonymous.inbox.acco...@gmail.com>
날짜: Mon, 28 Jun 2010 14:59:49 -0700 (PDT)
현지시간: 2010년6월28일(월) 오후5시59분
제목: Re: method run() of type Runnable(){} must override a superclass method
I had the same errors. In Eclipse I made the following change to get
rid of the errors.
Windows->Preferences->Java->Compiler “configure project specific
settings”, Change from java 1.5 to 1.6 and then “yes” rebuild pr