您的位置:首页 > 其它

maven之构建jdbc简单实例

2014-09-20 17:46 471 查看
上一篇 里面的jdbc源码不是 最新的 还是自己手动 把ojdbc6.jar 又反编译了一遍

恩 还是 附一下吧

参考 jad 反编译 jar包 虽然反编译的不是很全 但好过没有啊 http://blog.sina.com.cn/s/blog_5178d9680100drze.html

编译过后的 ojdbc源码 我上传了 在这 http://download.csdn.net/detail/undergrowth/7948737
下面是回顾以前的jdbc的知识 用过 总是会忘记 在这 做个记录吧

主要是涉及到 Statement PreparedStatement CallableStatement 三个的用法

代码里面都有注释 就不废话了

package com.undergrowth.jdbc.learn;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.EnumSet;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import oracle.jdbc.OracleConnection;
import oracle.jdbc.pool.OracleDataSource;

/**
* 此类主要是用于测试基本的jdbc的连接
*
* @author Administrator
*
*         备注 :
*
*         CREATE TABLE STUDENT ( ID VARCHAR2(20) NOT NULL, NAME VARCHAR2(20),
*         birthday DATE, age INTEGER ) TABLESPACE UNDER PCTFREE 10 INITRANS 1
*         MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS
*         UNLIMITED ); ALTER TABLE STUDENT ADD PRIMARY KEY (ID) USING INDEX
*         TABLESPACE UNDER PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL
*         64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED );
*
*
*/
public class BasicConnectOracle {

private static final Logger LOGGER = LoggerFactory
.getLogger(BasicConnectOracle.class);

// 使用thin进行数据库的连接
private StringBuffer connectUrl = new StringBuffer(
"jdbc:oracle:thin:u1/u1@//localhost:1521/orcl");
// 连接的数据源
private OracleDataSource dataSource = null;

private Connection conn = null;
private PreparedStatement pstmt = null;
private Statement stmt = null;
private CallableStatement cs = null;
private ResultSet rset = null;

public BasicConnectOracle() {
try {
dataSource = new OracleDataSource();
dataSource.setURL(connectUrl.toString());
LOGGER.info("构建OracleDataSource成功!!");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOGGER.info(e.getMessage());
}
}

public OracleDataSource getDataSource() {
return dataSource;
}

public Connection getConn() {
return conn;
}

public PreparedStatement getPstmt() {
return pstmt;
}

public Statement getStmt() {
return stmt;
}

public CallableStatement getCs() {
return cs;
}

public ResultSet getRset() {
return rset;
}

/**
* 简单测试Statement的查询语句
*/
public void testStatement() {
try {
judgeConnNull();
if (getStmt() == null)
stmt = conn.createStatement();
rset = stmt
.executeQuery("SELECT ID, NAME, birthday, age FROM student st WHERE st.id BETWEEN 100 AND 120");
printRSet();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
LOGGER.error(e.getMessage());
} finally {
closeResources();
}
}

/**
* 打印结果集
*
* @throws SQLException
*/
private void printRSet() throws SQLException {
while (rset.next()) {
LOGGER.info("获取学生记录:\t" + rset.getInt(1) + "\t" + rset.getString(2)
+ "\t" + rset.getDate(3) + "\t" + rset.getInt(4));
}
}

/**
* 判断Connection是否为空
*
* @throws SQLException
*/
private void judgeConnNull() throws SQLException {
if (getConn() == null)
conn = dataSource.getConnection();
}

/**
* 测试PreparedStatement的绑定变量的update、query
*/
public void testPreparedStatement() {
try {
judgeConnNull();
String updateSql = "UPDATE STUDENT SET  NAME = ? WHERE ID = ?";
genPstmtBySql(updateSql);
// 绑定参数
getPstmt().setString(1, "hello kitty");
getPstmt().setInt(2, 100);
int result = getPstmt().executeUpdate();
LOGGER.info("成功更新" + result + "条记录");
// 查询更新够的结果
String querySql = "SELECT ID, NAME, birthday, age FROM student st WHERE st.id = ?";
pstmt = getConn().prepareStatement(querySql);
getPstmt().setInt(1, 100);
rset = getPstmt().executeQuery();
printRSet();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
LOGGER.error(e.getMessage());
} finally {
closeResources();
}
}

/**
* 测试数据定义操作 创建表
*/
public void testDDLCreate() {

try {
judgeConnNull();
genPstmtBySql("create table test_table(id int,name varchar2(20))");
getPstmt().executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
LOGGER.error(e.getMessage()+"\n"+e.getErrorCode()+"\n"+e.getSQLState());
} finally {
closeResources();
}

}

/**
* 测试插入测试记录
*/
public void testDMlInerst() {
try {
judgeConnNull();
genPstmtBySql("insert into TEST_TABLE select 1,'under' from dual");
int result = getPstmt().executeUpdate();
LOGGER.info("成功插入" + result + "条记录");
} catch (SQLException e) {
e.printStackTrace();
LOGGER.error(e.getMessage());
} finally {
closeResources();
}
}

/**
* 测试清除数据 truncate
*/
public void testDDlTrunc() {
try {
judgeConnNull();
genPstmtBySql("truncate table TEST_TABLE");
LOGGER.info("成功truncate记录");
getPstmt().executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
LOGGER.error(e.getMessage());
} finally {
closeResources();
}
}

/**
* 测试事务的手动提交
*/
public void testAutoCommit() {
try {
judgeConnNull();
// 设置自动提交为false 即手动提交
getConn().setAutoCommit(false);
// 插入记录
genPstmtBySql("insert into TEST_TABLE select 2,'qq' from dual");
int result = getPstmt().executeUpdate();
LOGGER.info("成功插入" + result + "条记录");
// 设置commit是否与lgwr有关 NOWAIT表示commit的操作与lgwr进行无关 无需等待lgwr写完
// lgwr WRITEBATCH 是否立即执行或者批量执行
((OracleConnection) getConn()).commit(EnumSet.of(
OracleConnection.CommitOption.NOWAIT,
OracleConnection.CommitOption.WRITEBATCH));
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
try {
getConn().rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
LOGGER.error(e.getMessage());
} finally {
closeResources();
}
}

/**
* 测试调用oracle存储过程与函数 // JDBC escape syntax CallableStatement cs1 =
* conn.prepareCall( "{call proc (?,?)}" ) ; // stored proc
* CallableStatement cs2 = conn.prepareCall( "{? = call func (?,?)}" ) ; //
* stored func // PL/SQL block syntax CallableStatement cs3 =
* conn.prepareCall( "begin proc (?,?); end;" ) ; // stored proc
* CallableStatement cs4 = conn.prepareCall( "begin ? := func(?,?); end;" )
* ; // stored func
*
*
* CREATE OR REPLACE FUNCTION FUNC_TEST(NAME VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN UPPER(NAME) || ',你访问的时间为:' || TO_CHAR(SYSDATE,
'yyyy-mm-dd hh24:mi:ss');
END FUNC_TEST;
*
*
*/
public void testCallProcedure() {
try {
judgeConnNull();
String name = "张三丰";
String callSql = " { ? = call FUNC_TEST(?) }  ";
getCsBySql(callSql);
//设置参数
getCs().registerOutParameter(1, Types.CHAR);
getCs().setString(2, name);
//执行函数
getCs().executeUpdate();
//获取结果集
String result = getCs().getString(1);
LOGGER.info("输入:" + name + "\t输出:" + result);
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
LOGGER.error(e.getMessage());
} finally {
closeResources();
}
}

/**
* 通过语句构建 CallableStatement
*
* @param callSql
* @throws SQLException
*/
private void getCsBySql(String callSql) throws SQLException {
// TODO Auto-generated method stub
if (getCs() == null)
cs = getConn().prepareCall(callSql);
}

/**
* 通过sql 构建PreparedStatement
*
* @param sql
* @throws SQLException
*/
private void genPstmtBySql(String sql) throws SQLException {
if (getPstmt() == null)
pstmt = getConn().prepareStatement(sql);
}

private void closeResources() {
// TODO Auto-generated method stub

try {
// 关闭rset和stmt 后 oracle中对应的游标才会关闭
if (getRset() != null)
getRset().close();
if (getStmt() != null)
getStmt().close();
if (getPstmt() != null)
getPstmt().close();
if (getCs() != null)
getCs().close();
if (getConn() != null)
getConn().close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}


测试代码

package com.undergrowth;

import java.util.Vector;

import junit.framework.TestCase;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.undergrowth.jdbc.learn.BasicConnectOracle;

public class BasicConnectOracleTest extends TestCase{

private static BasicConnectOracle basicCO=null;

static{
basicCO=new BasicConnectOracle();
}

@Test
public void testStatement(){
basicCO.testStatement();
}

@Test
public void testPreparedStatement(){
basicCO.testPreparedStatement();
}

@Test
public void testDDLCreate(){
basicCO.testDDLCreate();
}

@Test
public void testDDlTrunc(){
//先插入记录
//basicCO.testDMlInerst();
//然后再truncate
basicCO.testDDlTrunc();
}

@Test
public void testAutoCommit(){
basicCO.testAutoCommit();
//之前jdbc
// TTC7Protocol
//NSProtocol
//现在 ojdbc6  T4CDriverExtension
//T4CDriverExtension
}

@Test
public void testCallProcedure(){
basicCO.testCallProcedure();
System.out.println(new Vector(10, 10).size());;
}

}


附 pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

<groupId>com.undergrowth</groupId>
<artifactId>jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>jdbc</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<!-- 添加oracle jdbc的依赖 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>

</dependencies>
</project>


log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} [%t] %-5p:  %c - %m%n" />
</layout>
</appender>

<!-- Root Logger -->
<root>
<priority value="debug" />
<appender-ref ref="console" />
</root>

</log4j:configuration>


最后 附一个 迭代器例子 觉得写得不错

private Iterator toIterator(Object rawItems) throws JspTagException {
if (rawItems instanceof Collection) {
return ((Collection) rawItems).iterator();
} else if (rawItems.getClass().isArray()) {
return new ArrayIterator(rawItems);
} else if (rawItems instanceof Iterator) {
return (Iterator) rawItems;
} else if (rawItems instanceof Enumeration) {
return new EnumerationIterator((Enumeration) rawItems);
} else if (rawItems instanceof Map) {
return ((Map) rawItems).entrySet().iterator();
} else if (rawItems instanceof String) {
return new EnumerationIterator(new StringTokenizer((String) rawItems, ","));
} else {
throw new JspTagException(Resources.getMessage("FOREACH_BAD_ITEMS"));
}
}
/**
* Iterator over an array, including arrays of primitive types.
*/
private static class ArrayIterator extends ReadOnlyIterator {
private final Object array;
private final int length;
private int i = 0;

private ArrayIterator(Object array) {
this.array = array;
length = Array.getLength(array);
}

public boolean hasNext() {
return i < length;
}

public Object next() {
try {
return Array.get(array, i++);
} catch (ArrayIndexOutOfBoundsException e) {
throw new NoSuchElementException();
}
}
}


/**
* Iterator over an Enumeration.
*/
private static class EnumerationIterator extends ReadOnlyIterator {
private final Enumeration e;

private EnumerationIterator(Enumeration e) {
this.e = e;
}

public boolean hasNext() {
return e.hasMoreElements();
}

public Object next() {
return e.nextElement();
}
}


private abstract static class ReadOnlyIterator implements Iterator {
public void remove() {
throw new UnsupportedOperationException();
}
}


/*
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/

package java.util;

/**
* An iterator over a collection.  {@code Iterator} takes the place of
* {@link Enumeration} in the Java Collections Framework.  Iterators
* differ from enumerations in two ways:
*
* <ul>
*      <li> Iterators allow the caller to remove elements from the
*           underlying collection during the iteration with well-defined
*           semantics.
*      <li> Method names have been improved.
* </ul>
*
* <p>This interface is a member of the
* <a href="{@docRoot}/../technotes/guides/collections/index.html">
* Java Collections Framework</a>.
*
* @param <E> the type of elements returned by this iterator
*
* @author  Josh Bloch
* @see Collection
* @see ListIterator
* @see Iterable
* @since 1.2
*/
public interface Iterator<E> {
/**
* Returns {@code true} if the iteration has more elements.
* (In other words, returns {@code true} if {@link #next} would
* return an element rather than throwing an exception.)
*
* @return {@code true} if the iteration has more elements
*/
boolean hasNext();

/**
* Returns the next element in the iteration.
*
* @return the next element in the iteration
* @throws NoSuchElementException if the iteration has no more elements
*/
E next();

/**
* Removes from the underlying collection the last element returned
* by this iterator (optional operation).  This method can be called
* only once per call to {@link #next}.  The behavior of an iterator
* is unspecified if the underlying collection is modified while the
* iteration is in progress in any way other than by calling this
* method.
*
* @throws UnsupportedOperationException if the {@code remove}
*         operation is not supported by this iterator
*
* @throws IllegalStateException if the {@code next} method has not
*         yet been called, or the {@code remove} method has already
*         been called after the last call to the {@code next}
*         method
*/
void remove();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: