Maven Repository for Oracle Library

Posted at 2012.12.18 20:43 | Posted in Java+

메이븐 pom.xml 에서 오라클 라이브러리를 사용하기 위한 설정입니다.


메이븐 구조의 프로젝트에서 오라클 라이브러를 쉽게 사용하기 위해서 이것저것 찾아보다가 현재 아래의 저장소 URL 이 제일 적당한 것 같습니다.


<project ...>

...


<repositories>

<repository>

<id>codelds</id>

<url>https://code.lds.org/nexus/content/groups/main-repo</url>

</repository>

</repositories>


<dependencies>

...

<!-- oracle -->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>11.2.0.3</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ucp</artifactId>

<version>11.2.0.3</version>

<scope>compile</scope>

</dependency>

</dependencies>


</project>



각 버전을 확인 하는 방법은 브라우저에서 위 저장소 URL 을 입력하면 [groupId / artifactId / version] 순으로 디렉토리 구조로 되어 있습니다.


목록을 보면 오라클 이외에도 많은 라이브러리가 있는 것을 볼 수 있습니다.


자기가 필요로하는 라이브러리를 찾아봅시다 -_-;;


ojdbc6.jar 를 찾아보면 아래와 같은 구조로 되어 있습니다.



딱 보면 감이 오시겠지면


1 = groupId

2 = artifactId

3 = version


'Java+' 카테고리의 다른 글

Find class in jar files  (0) 2018.02.19
web.xml 서블릿 버전별 DTD  (1) 2013.03.03
Maven Repository for Oracle Library  (0) 2012.12.18
<jsp:forward page="url" /><jsp:include /> <%@ include %>  (0) 2010.04.25
TortoiseSVN 사용하기  (2) 2009.11.16
썸네일(Thumbnail) 만들기  (1) 2009.08.09
Java2Html  (0) 2009.07.19
Jad + JadClipse  (6) 2009.07.11
Java with SQLite  (1) 2009.06.29
Java Database Connectivity  (0) 2009.02.25

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Using AUTO_INCREMENT keys

Posted at 2011.03.01 16:02 | Posted in Java+/Example

http://dev.mysql.com/tech-resources/articles/autoincrement-with-connectorj.html

http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/jdbc.html

MySQL 에는 AUTO_INCREMENT(이하 AI)라는 것이 있습니다. 오라클 디비의 시퀀스와 같이 자동으로 값이 증가하게 됩니다.

AI를 적용하려는 칼럼은 기본키K(Primary Key)여야 합니다.



Before JDBC API 3.0

JDBC API 3.0 이전에서는 INSERT 이후에 "select last_insert_id()" 쿼리를 날려서 추가된 AI 값을 가져와야 합니다.

Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; // auto increment value int generatedKey = -1; try { conn = dataSource.getConnection(); // query String sql = "insert into sample_user (name, age) values (?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, user.getName()); pstmt.setInt(2, user.getAge()); // execute query pstmt.executeUpdate(); // query sql = "select last_insert_id()"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); if(rs.next()) { // auto increment value generatedKey = rs.getInt(1); } return generatedKey; } catch (Exception e) { throw e; } finally { // release rs, pstmt, conn }



After JDBC API 3.0

3.0 부터서는 "getGeneratedKeys()" 메소드를 이용하면 됩니다.

Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; int generatedKey = -1; try { conn = dataSource.getConnection(); // query String sql = "insert into sample_user (name, age) values (?, ?)"; pstmt = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS); pstmt.setString(1, user.getName()); pstmt.setInt(2, user.getAge()); // execute query pstmt.executeUpdate(); rs = pstmt.getGeneratedKeys(); if (rs.next()) { generatedKey = rs.getInt(1); } return generatedKey; } catch (Exception e) { throw e; } finally { // release rs, pstmt, conn; }



Spring + JdbcDaoSupport

스프링과 연동하여 사용할 때에는 KeyHolder 인터페이스를 이용하면 됩니다.

@Override
public int create(User user) throws Exception {
	// query
	String sql = "insert into sample_user (name, age) values (:name, :age)";
	// parameter
	SqlParameterSource paramSource = new BeanPropertySqlParameterSource(user);
	// key holder
	KeyHolder generatedKeyHolder = new GeneratedKeyHolder();
	// execute query
	getNamedParameterJdbcTemplate().update(sql, paramSource, generatedKeyHolder);
	// auto increment
	return generatedKeyHolder.getKey().intValue();
}
※ KeyHolder 기능을 사용하려면 JDBC 드라이버가 JDBC 3.0을 지원해야 합니다.



샘플 소스입니다. (이클립스 Java Project 폴더 통째로 압축했씁니다. Buil Path 설정 해줘야 할지도...)

Spring 3.0 으로 되어있습니다. 간단한 DI만 이용...

kr/nerv/antop/config/spring.xml 파일에서 디비 설정 해줘야합니다.

테스트 클래스는 app.TestUserDao 입니다.

sample_mysql_ai.zip


'Java+ > Example' 카테고리의 다른 글

LOGBack Configurator with JMX  (0) 2014.07.20
현지어로 언어명 보여주기  (0) 2014.02.09
2014년 도로명 주소 사용에 따른 우편번호 준비  (2) 2013.12.22
JSTL Custom Tag using Spring Beans  (0) 2013.12.01
Spring Message Source from Database  (1) 2013.03.03
Infinite Routing DataSource  (1) 2013.01.13
Mybatis Type Handler  (1) 2012.09.30
Using AUTO_INCREMENT keys  (0) 2011.03.01

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Spring + JDBC[각주:1]를 이용하여 개발 시에 queryForObject(...) 메소드를 사용하여 하나의 객체만 가져올 경우 해당 데이터가 없으면 org.springframework.dao.EmptyResultDataAccessException 예외가 발생하게 된다.

package kr.nerv.dao.impl;
 
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
 
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
 
import kr.nerv.dao.UserInfoDao;
import kr.nerv.vo.UserInfoVo;
 
public class UserInfoDaoJdbc extends NamedParameterJdbcDaoSupport implements UserInfoDao {
    // row mapper
    private UserInfoRowMapper rowMapper = new UserInfoRowMapper();
    // find by id query
    private String findById = "select * from sample_user_info where id = :id";
 
    @Override
    public UserInfoVo findById(Integer id) throws Exception {
        Map param = new HashMap();
        param.put("id", id);
 
        // select 데이터가 없으면 EmptyResultDataAccessException 예외 발생!!
        return (UserInfoVo) getNamedParameterJdbcTemplate().queryForObject(findById, param,
                rowMapper);
    }
 
    private class UserInfoRowMapper implements RowMapper {
        @Override
        public UserInfoVo mapRow(ResultSet rs, int rowNum) throws SQLException {
            UserInfoVo userInfo = new UserInfoVo();
            userInfo.setId(rs.getInt("id"));
            userInfo.setName(rs.getString("name"));
            userInfo.setTel(rs.getString("tel"));
 
            return userInfo;
        }
    }
}

아래 소스를 보면 findById(Integer id) 메소드에서 PK로 하나의 데이터를 셀렉트 하게 되어 있다. 만약 데이터가 없으면 null이나 빈 VO[각주:2]를 리턴해주겠거니 하겠지만 예외를 발생하게 된다.이럴 때에는 예외 처리를 해주면 된다.

    @Override
    public UserInfoVo findById(Integer id) throws Exception {
        Map param = new HashMap();
        param.put("id", id);
 
        try {
            return (UserInfoVo) getNamedParameterJdbcTemplate().queryForObject(findById, param,
                    rowMapper);
        } catch (EmptyResultDataAccessException e) {
            // EmptyResultDataAccessException 예외 발생시 null 리턴
            return null;
        }
    }

예제 파일입니다.

EmptyResultDataAccessException.war



  1. 자바 프로그래밍 언어로 만들어진 클래스와 인터페이스로 이루어진 API로 SQL문을 실행 할 수 있는 함수 호출 인터페이스 이다. [본문으로]
  2. Value Object는 Presentation, Data 각 Layer 간의 데이터 전달을 위해 사용된다. 맴버변수와 맴버변수의 값을 설정하고 가져오기 위한 setter, getter 메소드만 존재한다. [본문으로]
  1. 좋은 정보 감사합니다.'ㅂ')/
    >ㅁ< 실례가 안 되면 담아갈께요>ㅁ<;)/
  2. sky
    와 이것떔에 엄청고생했는데 감사합니다

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

WebLogic 10.3 JDBC 설정(DataSource)

Posted at 2009.04.18 05:48 | Posted in Server/WebLogic

- console 접속


- 왼쪽 트리메뉴에서 도메인이름 → Serviews → JDBC → Data Sources 선택





- 현재 등록되어있는 DataSource 목록이 나옵니다. New 클릭



- 기본 속성 입력
Name : 그냥 표시되는 이름
JDI Name : 중요!! DataSource 를 찾을 때 쓰는 이름입니다.
Database Type : 디비 종류
Database Driver : 드라이버





- 트랜잭션 설정 : 잘 모르겠습니다 -_- Next





- SID, 아이디, 비번, 주소 등등 입력합니다. Next





- 접속 테스트 합니다. Test Configuration 클릭





- Connection test succeeded. 가 나와야 성공. Next





- 타겟 서버를 선택합니다. Finish





- 추가된 것 확인




- 등록 완료



테스트

- 간단하게 테스트하기 위해 Server Runtime 을 Orcle WebLogic Server v10.3으로 선택





- 간단한 테스트 페이지 작성

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<%@ page import="javax.naming.*, javax.sql.*, java.sql.*" %>
<%@ page import="java.util.Properties"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>WebLogic 10.3 JDBC 테스트</title>
</head>
<body>

<%
Context ctx = null;
DataSource ds = null;
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try
{
   ctx = new InitialContext();
   ds = (DataSource)ctx.lookup("AntopTest");

   conn = ds.getConnection();
   stmt = conn.createStatement();

   rs = stmt.executeQuery("select * from tab");

   while(rs.next()) {
      out.print(rs.getString(1) + " - " + rs.getString(2) + "<br>");
   }
}
catch(Exception e)
{
   out.print("error : " + e.getMessage());
}
finally
{
   try { if(rs != null) rs.close(); } catch (SQLException ignore) { }
   try { if(stmt != null) stmt.close(); } catch (SQLException ignore) { }
   try { if(conn != null) conn.close(); } catch (SQLException ignore) { }

   ds = null;
   try { if(ctx != null) ctx.close(); } catch (NamingException ignore) { }
}
%>

</body>
</html>



- 실행 결과





tag: JDBC, Weblogic
  1. seo
    맙소사 weblogic 10.3 install 구글에서 검색했는데 안탑께 나왓어....-__-;;;;
  2. hjbeauty
    -,.- 흘려가며 눈 뻘개져가며 찾아 헤몄는데 구글 영문탄도 보고요 , 이렇게 속시원하게 만들어 늫으신것을 이제야 찾아서 얼마나 감사한지요. 계속 구독하고 싶어요
    그리고 감사 꾸벅
  3. 복덩이
    기존 8버전대에선 커넥션풀도 잡고 데이터소스도 잡아줬는데
    버전 10으로 가면서 커넥션풀은 안 잡고 데이터소스만 잡으라고 가이드 하던데요..

    그렇게 되면 8버전대에서 쓰던 프로그램을 수정해야 하는 일들이 발생하더군요..

    공통파일...JDBC관련 자바파일에서요..

    다른 분들도 그런 일 있었나요??
    • 2009.08.27 15:07 신고 [Edit/Del]
      음.. 웹로직 8.1sp6 깔고 커넥션풀은 대충 잡고 DataSource JNDI 이름 맞춰서 하고 위에 소스 그대로 테스트 했는데 잘 되었습니다.

      음.. 공통파일이라는게 이럴때(서버환경바꼇을때?) 한번만 바꾸라고 만든거니.. 공통 파일을 바꾸는 것도...
  4. Seeker
    테스트 페이지를 퍼갔으니 저도 뭔가 알려드려야겠죠....;;

    트랜잭션에는 일반적으로 다음의 세가지가 관계되어 있습니다.
    1. 애플리케이션: 트랜잭션 요청 착수
    2. data store(데이터베이스 등):트랜잭션 구동
    3. API(드라이버 등):애플리케이션과 데이터 창고 간의 통신. J2EE 플랫폼에서는 J2EE- compliant 애플리케이션 서버에 의해 API(또는 드라이버)가 제공된다. 이 애플리케이션 프로그램은 애플리케이션 서버를 호출하여 트랙잭션을 수행.

    어찌되었건...non-XA 드라이버를 사용하는 경우 트랜젝션 처리 방법에대해서 WebLogic에서는 세가지 방법을 제시합니다.

    one phase는 말그대로 한번에...검사하지 않고 넘어가는 방식이고
    emulate two phase는 첫번째로, 트랜잭션이 오류 없이 구동 되었는지를 확인하는 검사가 실행한 후, 오류가 없다면 두번째로 넘어가며, 에러가 있다면 트랜잭션은 초기화합니다.
    LLR은 위 방법보다는 더 안정적이라고 하는데(실행된 것에대하여 다시 읽어옵니다.) 뭐...

    어쨋든...트랜젝션 안쓰면 빼는것을 추천합니다.(가끔 안빼서 Error나는 경우가 있더군요)
  5. 복덩이
    웹로직 10 설치하고서



    혹,,이런 에러 본적 있나요..
    DataSource로 커넥션 맺고 insert하는 과정에서


    setAutoCommit(false);
    ...
    execute();
    ...
    con.commit(); => 에러 발생!!!



    ejb_jar.xml에서는 Required(Container)로 설정..



    무엇이 문제일까요? 웹로직 8에서는 commit있어도 에러 없었음.



    DataSource를 사용하면서 문제가 되는거 같기도 하구요..

    이런식으로 코딩해놓은 소스가 너무 많아서 다 고치기도 어렵구요..(테스트하기 어려움)



    참..에러메시지는

    java.sql.SQLException: Cannot call Connection.commit in distributed transaction.
    Transaction Manager will commit the resource manager when the distributed tran
    saction is committed.
    at weblogic.jdbc.wrapper.JTSConnection.commit(JTSConnection.java:611)
    ......

    이런식입니다.

    윗분이 트랜잭션 관련 설명해주셨는데요..
    저희쪽 데이터소스 설정 시 OnePhaseCommit으로 설정되어 있네요..(이게 디폴트 같기도 하구요)
  6. tacchinardi
    웹로직과 OracleDB 연동 부분을 검색하다가 들르게 되었습니다.
    DB DataSource를 등록하는 과정에 마지막 타켓 서버 지정해주는 부분을 빼먹는 바람에
    몇 시간 삽질했는데...-_-;;;
    덕분에 해결되었습니다.
    이 페이지를 제 싸이 게시판에 링크 걸어두고 싶은데 괜찮으신지 모르겠습니다
  7. 저도 위에분과 같이 타겟서버 지정하는거 때문에 한시간을 허비했군요... 좋은정보입니다!!!

    티스토리가 의외로 깔끔하군요..
  8. 히야!
    정말 굿입니다..
    일주일간 검색을 헛했네요 ㅋㅋㅋ

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Java Database Connectivity

Posted at 2009.02.25 00:54 | Posted in Java+
Oracle - http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/index.html
Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "id", "*****");


MySQL - http://dev.mysql.com/downloads/connector/j/
Class.forName("com.mysql.jdbc.Driver");

Connection conn = DriverManager.getConnection("jdbc:mysql//localhost:3306/mydb", "id", "*****");


MSSQL - http://msdn.microsoft.com/ko-kr/library/bb418503.aspx
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=mydb;user=id;password=****;");


AS400 -

jdbc:as400:10.240.200.181;prompt=false

'Java+' 카테고리의 다른 글

Find class in jar files  (0) 2018.02.19
web.xml 서블릿 버전별 DTD  (1) 2013.03.03
Maven Repository for Oracle Library  (0) 2012.12.18
<jsp:forward page="url" /><jsp:include /> <%@ include %>  (0) 2010.04.25
TortoiseSVN 사용하기  (2) 2009.11.16
썸네일(Thumbnail) 만들기  (1) 2009.08.09
Java2Html  (0) 2009.07.19
Jad + JadClipse  (6) 2009.07.11
Java with SQLite  (1) 2009.06.29
Java Database Connectivity  (0) 2009.02.25
tag: Java, JDBC

댓글 (Comment)

Name*

Password*

Link (Your Website)

Comment

SECRET | 비밀글로 남기기