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
<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
//

Using AUTO_INCREMENT keys

Posted at 2011. 3. 1. 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


반응형
//
반응형
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 메소드만 존재한다. [본문으로]
반응형
//

WebLogic 10.3 JDBC 설정(DataSource)

Posted at 2009. 4. 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>



- 실행 결과





반응형
//

Java Database Connectivity

Posted at 2009. 2. 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
//