IT

'소프트웨어/Java'에 해당되는 글 32건

  1. 2016.06.23 Short-circuit ( && , || )
  2. 2015.06.19 Mybatis if 문자열 비교 (1)
  3. 2014.04.17 DB 별 JDBC Driver
  4. 2014.04.01 Apache Commons Configuration을 이용해 설정정보 저장하기
  5. 2014.03.18 java:comp/env

&& , || 연산자 사용시 short-circuit이 적용된다.


short-circuit 적용하지 않으려면 & , | 연산자를 사용하면 된다.

(또는 조건 순서를 바꾸거나)


public static void main(String [] args)
{
    System.out.println("&& operator");
    if(returnTrue() && returnFalse())
        System.out.println("1");
    System.out.println();

    System.out.println("& operator");
    if(returnTrue() & returnFalse())
        System.out.println("2");
    System.out.println();

    System.out.println("|| operator");
    if(returnTrue() || returnFalse())
        System.out.println("3");
    System.out.println();

    System.out.println("| operator");
    if(returnTrue() | returnFalse())
        System.out.println("4");
    System.out.println();
}

private static boolean returnTrue()
{
    System.out.println("return true");
    return true;
}

private static boolean returnFalse()
{
    System.out.println("return false");
    return false;

} 


 

결과~~
&& operator
return true
return false

& operator
return true
return false

|| operator
return true
3

| operator
return true
return false

4 



'소프트웨어 > Java' 카테고리의 다른 글

Short-circuit ( && , || )  (0) 2016.06.23
Mybatis if 문자열 비교  (1) 2015.06.19
DB 별 JDBC Driver  (0) 2014.04.17
Apache Commons Configuration을 이용해 설정정보 저장하기  (0) 2014.04.01
java:comp/env  (0) 2014.03.18
java 정규식 표현  (0) 2013.11.25
Posted by sinpk Trackback 0 Comment 0

댓글을 달아 주세요

1. isEmpty(str) 문자열이 널 또는 빈 문자열인지 검사

        방법 1.

             <if test="str != null and str != ''">

             

             비교문 중 &&는 and 또는 &amp;&amp; 로 변환해서 사용

             같다 라는 == 는 == 또는 eq로 변환해서 사용할 수 있음

             <if test="userId != null &amp;&amp; ''.equals(userId)">

        방법 2.

             자바로 함수를 만들어 Mybatis에서 호출하는 형식 (출처 첫번째 링크를 따라가면 자세히 알수 있다)

            

              - default package 일 때

              <if test="@Ognl@isNotEmpty(userId)">
                   and user_id = #{userId}
              </if>

            

              - 패키지가 있을 때

             <if test="@com.web.common.MybatisUtils@isNotEmpty(userId)">


2. isEquas(str) 문자열 비교

   

    <if test="userId == 'hong'"> 이렇게 써도 될것 같지만 에러가 난다.

    Mybatisl에서는 변수가 자바객체처럼 사용되므로 자바에서 사용되는 문자열 비교 메소드를 이용하면 된다.

    싱글쿼테이션과 더블쿼테이션을 잘 보자. ""는 문자열이고 ''는 문자이다.

    equals로 비교할 때에는 ''으로 처리할 경우 비교대상 문자가 한글자이면 비교되지 않지만 두글자 이상이면 싱글쿼테이션으로도

    비교가 가능하다. 문자열은 ""로 처리하는게 나을듯 싶다.

    참고로 equalsIgnoreCase는 대소문자 비교뿐만 아니라 ''만으로도 문자열 비교가 된다. 단 비교할 문자를 먼저 쓴 경우에 당연히 에러.


    <if test='userId.equals("hong")'>  (O)

    <if test='userId == "hong"'>  (O)

    <if test="userId == 'hong'">  (Error)

    <if tset='userId == "h"'>  (O)

    <if test="'hong'.equals(userId)">  (O)

    <if test="'h'.equals(userId)'>  (X)

    <if test="userId.equals('h')">  (X)

    <if test="userId == 'hong'.toString()>  (O)

    <if test="userId eq 'hong'.toString()>  (O)

    <if test="userId.equalsIgnoreCase('hong')">  (O)

    <if test="userId.equalsIgnoreCase('h')">  (O)

    <if test="'h'.equalsIgnoreCase(userId)">  (Error)


3. NumberFormatException 발생시

   <if test=" 파라미터 != null and 파라미터 == ' Y '  ">

      and 필드명 = #{파라미터}

   </if>

   위와 같은 쿼리 실행시 NumberFormatException이 발생한다.

    

아래의 조건으로 해결할 수있다 하지만 싱글쿼터와 더블 쿼터에 주의해야한다.

자바단에서 set( ' Y ' )  저장하는경우 ->  

  <if test=" 파라미터 != null and 파라미터.equals( ' Y ' ) " >


자바단에서 set( " Y " )  저장하는경우 ->     

   <if test=' 파라미터 != null and 파라미터.equals( " Y " )' >          


자바에서 문자로 저장할때와 문자열로 저장할때 싱글쿼터/더블쿼터로 구분해서 사용해야한다.


    




'소프트웨어 > Java' 카테고리의 다른 글

Short-circuit ( && , || )  (0) 2016.06.23
Mybatis if 문자열 비교  (1) 2015.06.19
DB 별 JDBC Driver  (0) 2014.04.17
Apache Commons Configuration을 이용해 설정정보 저장하기  (0) 2014.04.01
java:comp/env  (0) 2014.03.18
java 정규식 표현  (0) 2013.11.25
Posted by sinpk Trackback 0 Comment 1

댓글을 달아 주세요

  1.  댓글주소 수정/삭제 댓글쓰기 맛있는감귤 2017.09.01 10:03 신고

    왜 에러가 발생하는지 몰랐는데 잘해결하고갑니다

1. Oracle

   Ddriver [oracle.jdbc.driver.OracleDriver]

   URL     [jdbc:oracle:thin:@localhost:1521:DBNAME]

 

2. Sybase

   Ddriver [com.sybase.jdbc2.jdbc.SybDriver]

   URL     [jdbc:sybase:Tds:localhost:5001/DBNAME]

   * JDBC드라이버 : jTDS2.jar

 

3. MS-SQL

   Driver [com.microsoft.sqlserver.jdbc.SQLServerDriver]

   URL   [jdbc:sqlserver://localhost:1433;DatabaseName=DBNAME]

   * JDBC드라이버 : sqljdbc.jar 혹은 sqljdbc4.jar (MS-SQL 2008까지 지원)

 

   Driver [com.microsoft.jdbc.sqlserver.SQLServerDriver]

   URL   [jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DBNAME]

   * JDBC드라이버 : msbase.jar, mssqlserver.jar, msutil.jar

 

   Driver [core.log.jdbc.driver.Mssql2005Driver]

   URL   [jdbc:sqlserver://localhost:1433;database=DBNAME]

   * JDBC드라이버 : log4sql.jar

 

   Driver [net.sourceforge.jtds.jdbc.Driver]

   Driver [net.sourceforge.jtds.jdbcx.JtdsDataSource]

   URL   [jdbc:jtds:sqlserver://localhost:1433/DBNAME;tds=8.0;lastupdatecount=true]

   * JDBC드라이버 : jtds-1.2.jar

 

4. DB2

   Driver [COM.ibm.db2.jdbc.net.DB2Driver]  // Type 3 (v9.x 이상부터 지원안함)

   Driver [com.ibm.db2.jcc.DB2Driver]  // Type 4

   URL   [jdbc:db2://localhost:50000/DBNAME]

   * JDBC드라이버 : db2jcc.jar, db2jcc_javax.jar, db2jcc_license_cu.jar

 

5. UniSQL

   Driver [unisql.jdbc.driver.UniSQLDriver]

   URL   [jdbc:unisql:localhost:43300:DBNAME:::]

 

6. MySQL

   Driver [com.mysql.jdbc.Driver]

   Driver [org.gjt.mm.mysql.Driver]

   URL   [jdbc:mysql://localhost:3306/DBNAME]

   * JDBC드라이버 : mysql-connector-java-5.1.6-bin.jar 

6-1. MariaDB

Driver [org.mariadb.jdbc.Driver]

URL [jdbc:mariadb://localhost:3306/DBNAME]

* JDBC드라이버 : mariadb-java-client-1.1.3.jar

* MariaDB와 MySQL은 같은 핏줄이기 때문에 6번을 사용해도 무관

 

7. Altibase

   Driver [Altibase.jdbc.driver.AltibaseDriver]

   URL   [jdbc:Altibase://localhost:20300/DBNAME]

   * JDBC 드라이버 : Altibase.jar

 

8. hsqldb

   Driver [org.hsqldb.jdbcDriver]

   URL   [jdbc:hsqldb:hsql://localhost:9001/DBNAME]

'소프트웨어 > Java' 카테고리의 다른 글

Short-circuit ( && , || )  (0) 2016.06.23
Mybatis if 문자열 비교  (1) 2015.06.19
DB 별 JDBC Driver  (0) 2014.04.17
Apache Commons Configuration을 이용해 설정정보 저장하기  (0) 2014.04.01
java:comp/env  (0) 2014.03.18
java 정규식 표현  (0) 2013.11.25
Posted by sinpk Trackback 0 Comment 0

댓글을 달아 주세요

애플리케이션을 개발하다 보면 설정정보를 저장해야 하는 경우가 꼭 있습니다. 이런 경우 정보가 간단하면 *.properties 파일을 주로 사용하지만 복잡하다면 .xml 파일을 써야 하죠.
이런때 쓰면 딱 좋은 오픈소스가 아파치 프로젝트의 Commons Configuration 입니다.

Conmmons Configuration이 지원하는 파일 포맷이 다양하기 때문에 상황에 맞춰 사용가능하며 동시에 같이 사용하는것도 가능합니다.
  • Properties files
  • XML documents
  • Windows INI files
  • Property list files (plist)
  • JNDI
  • JDBC Datasource
  • System properties
  • Applet parameters
  • Servlet parameters
그럼 *.properties 파일을 이용해서 설정정보를 읽어들이고 저장할때 간단히 사용할 수 있는 유틸 클래스 ConfigUtil을 한번 만들어 보겠습니다.

1.ConfigUtil 클래스
싱글턴으로 만들어야 사용하기 편하니 static 변수 instance를 선언하고 Configuration 프레임웍에서 properties파일을 나타내는 PropertiesConfiguration 변수를 선언합니다.

    private static ConfigUtil instance = new ConfigUtil();
    private static PropertiesConfiguration propertyConfig;

파일을 읽어들이는 load 메소드를 정의합니다.

    public void load(String fileName)
            throws ConfigurationException {
        propertyConfig = null;
        propertyConfig = new PropertiesConfiguration();
        propertyConfig.load(new File(fileName));
    }

특정 키를 주고 키에 해당하는 값를 읽어들이는 getProperty 메소드를 정의합니다.

    public String getProperty(String key) {
        String value = propertyConfig.getProperty(key) == null ? ""
                : propertyConfig.getProperty(key).toString();
        return value;
    }

특정 키에 해당하는 값을 변경하기 위한 setProperty 메소드를 정의합니다.

    public void setProperty(String key, Object value) {
        propertyConfig.setProperty(key, value);
    }

프로퍼티 파일을 다시 저장할 save 메소드를 정의합니다.

    public void save(String fileName) throws ConfigurationException {
        propertyConfig.save(new File(fileName));
    }

2.ConfigKey 인터페이스
이번에는 프로퍼티의 키들을 저장해놓고 상수로 사용하기 위한 인터페이스 ConfigKey를 정의합니다.

public interface ConfigKey {
    String KEY1 = "key1";
    String KEY2 = "key2";

}

3.ConfigUtil 테스트
이제 테스트를 할 때가 되었습니다. ConfigUtilSample 클래스를 만들어서 간단히 테스트 해 보겠습니다.

    public static void main(String[] args) throws Exception{
        String fileName = "sample.properties";
        // #1
        ConfigUtil.getInstance().load(fileName);
       
        System.out.println("Key1 Value=" +  
                                ConfigUtil.getInstance().getProperty(ConfigKey.KEY1));

        System.out.println("Key2 Value=" + ConfigUtil.getInstance().getProperty(ConfigKey.KEY2));
       
        ConfigUtil.getInstance().setProperty(ConfigKey.KEY1, "zzz");
        System.out.println("Key1 Value=" + ConfigUtil.getInstance().getProperty(ConfigKey.KEY1));
        ConfigUtil.getInstance().save(fileName);
       
        // #2
        ConfigUtil.getInstance().load("sample2.properties");
        System.out.println("Key1 Value=" + ConfigUtil.getInstance().getProperty(ConfigKey.KEY1));
    }

sample.properties파일과 sample2.properties 파일의 내용은 다음과 같습니다.
sample.properties
key1 = aaa
key2 = bbb

sample2.properties
key1 = ccc
key2 = ddd

위 샘플의 실행결과를 먼저 보면 다음과 같습니다.
Key1 Value=aaa
Key2 Value=bbb
Key1 Value=zzz
Key1 Value=ccc
간단히 설명을 해보겠습니다. 먼저 sample.properties파일을 읽어들이고 나서 Key1, Key2에 해당하는 값을 읽어 들여서 출력합니다. 그리고 Key1에 해당하는 값을 변경하고 이를 저장합니다.
(폴더를 새로고침하면 파일이 실제로 변경되었음을 확인할 수 있습니다.)

두번째로 sample2.properties 파일을 읽어들이고 다시 Key1에 맞는 값을 읽어 들입니다. properties 파일이 다르기 때문에 값이 다름을 확인할 수 있습니다.

properties 파일에 대한 처리는 간단하지만 꼭 필요한 기능입니다. 위 프레임워크를 이용하게 되면 아래처럼 프로퍼티에 주석을 단다거나 변수를 사용하는것도 간단하게 구현할 수 있습니다.
# properties can reference other properties

base.prop = /base

first.prop = ${base.prop}/first

 

'소프트웨어 > Java' 카테고리의 다른 글

Mybatis if 문자열 비교  (1) 2015.06.19
DB 별 JDBC Driver  (0) 2014.04.17
Apache Commons Configuration을 이용해 설정정보 저장하기  (0) 2014.04.01
java:comp/env  (0) 2014.03.18
java 정규식 표현  (0) 2013.11.25
커스텀 Annotation  (0) 2013.10.22
Posted by sinpk Trackback 0 Comment 0

댓글을 달아 주세요

java:comp/env

2014. 3. 18. 14:13 : 소프트웨어/Java

JNDI를 이용해서 웹어플의 ConnectionPool 구현중 모르는것이 나타났다.


java:comp/env


-전형적인 DataSource 구현 방법


//Obtain our environment naming context

Context initCtx = new InitialContext();

Context envCtx = (Context)initCtx.lookup("java:comp:env");


//DataSource 를 검색

//"jdbc/mysql은 web.xml과 context.xml에 설정되어 있는 name값

DataSource ds = (DataSource)encCtx.lookup("jdbc/mysql"); 


//커센션 풀로부터 커넥션 얻기

Connection c = da.getConnection();


위의 코드에서 "java:comp:env" 가 도대체 뭘까?!?!

톰캣 홈페이지의 유저가이드를 확인해봤다.

http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html


The InitialContext is configured as a web application is initially deployed, and is made available to web application components (for read-only access). All configured entries and resources are placed in the java:comp/env portion of the JNDI namespace


java:comp/env는 웹어플의 구성된 엔트리와 리소스들이 배치되어있는 부분.

그래서 이것에 접근을 하여 web.xml의 <resource-env-ref>에 설정한 jdbc/mysql과 매핑되는 리소스를 가져온다. 


톰캣의 리소스 팩토리를 구성하기 위해 <Context>엘리먼트를 추가해야한다. 일종의 추가 정보를 추가한다고 이해하면 된다.

[출처] java:comp/env|작성자 GemStone


'소프트웨어 > Java' 카테고리의 다른 글

DB 별 JDBC Driver  (0) 2014.04.17
Apache Commons Configuration을 이용해 설정정보 저장하기  (0) 2014.04.01
java:comp/env  (0) 2014.03.18
java 정규식 표현  (0) 2013.11.25
커스텀 Annotation  (0) 2013.10.22
마이바티스 익셉션 처리  (0) 2013.09.26
Posted by sinpk Trackback 0 Comment 0

댓글을 달아 주세요