- 浏览: 584423 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
liuzeyuss:
好文章,顶顶
java 线程死锁的检测 -
ysite:
hugh.wang 写道请问你这个能还原吗?短网址用的是HAS ...
Java版短网址(ShortUrl)的算法 -
lv双:
没有注释,看的费劲
java 线程死锁的检测 -
dgj:
好帖子竟然没人顶...
java 线程死锁的检测 -
天空趋虚:
不好,你这只是记录式的博客,不是分享式的博客,对浏览着不友好. ...
一些技术牛人的博客
JAVA下的OracleHelper包
在.NET平台下有个被使用的很广泛的SqlHelper工具类,是微软专门针对SQL Server数据库所编写的数据访问层中间件,很好的对ADO.NET进行了封装。在实际应用中,由于项目需求,当时我曾对SqlHelper进行了若干改造,变成了能够针对Oracle数据库进行访问的OracleHelper工具类,这些都是在.NET平台下使用C#实现的。
近期,项目存在向java平台下移植的可能,为了屏蔽JDBC底层API,使平移更加容易,FuWaer花了点时间对C#下OracleHelper进行了改造,改造的目的就是要基本保持原有函数接口形式和类型不变,为此,OracleHelper包由如下类组成:
共10个文件,其中,ey.db.oracle包中的OracleHelper.java实现了对JDBC的封装;ey.db.type包中的9个类是为了保持OracleHelper类函数能够和C#下的OracleHelper类函数的形式和参数类型一致而编写的。
全部内容可以通过以下链接下载:(写此文章时blog无法上传文件,稍后上传,如有需要也可留下您的email或自行编译文末源代码)
源文件:Java_OracleHelper_1_0_20071027_src.zip
JAR包:Java_OracleHelper_1_0_20071027_jar.jar
本工具包的使用实例可以参见《java下OracleHelper包使用实例》
接下来,FuWaer分别对每个类的功能进行简短的介绍,全部源码在文章末尾贴出了,如无法下载源代码,也可分别拷贝源码自行编译。
DataColumn、DataRow、DataTable
这三个类是仿照C#中的对应类实现的,实现了二维表格数据的对象化存储,目的在于对JDBC的ResultSet实现封装,后面将会介绍,OracleHelper.java中的ConvertResultSetToDataTable函数及实现了从ResultSet构造DataTable的过程。
DataSet
这也是仿照C#中的DataSet实现的,它由一个或多个DataTable实例构成,该类用于OracleHelper.java中的ExecuteDataSet函数的返回值类型。它将方便已经熟悉了C#下DataSet操作的程序人员,对数据库查询的结果集将不再以底层的ResultSet存在,应用了DataSet,开发人员可以完全不用知道ResultSet的存在。
OracleConnection
该类是仿照C#中OracleClient命名空间下的OracleConnection实现的。OracleConnection类是对 java.sql.Connection的封装,经过封装,开发人员将不用了解java.sql.Connection的相关内容。该类具有如下主要结构:
构造函数 public OracleConnection(String connectionString)
其中,connectionString是用来构造java.sql.Connection实例所必需的信息,规定connectionString应该具有如下格式:url;user;password,例如:jdbc:oracle:thin:@localhost:1521:db;system;manager
关闭数据库连接函数 public void Close()
启动事务函数 public OracleTransaction BeginTransaction()
OracleTransaction
该类是仿照C#中OracleClient命名空间下的OracleTransaction实现的。OracleTransaction用于事务控制,通常,该类的实例是通过OracleConnection.BeginTransaction()获得的。该类具有如下主要结构:
构造函数 public OracleTransaction(OracleConnection connection)
事务提交函数 public void Commit()
事务回滚函数 public void Rollback()
CommandType
这是个枚举类,用于指示访问数据库的是文本型sql语句还是存储过程,该枚举类定义如下:
public enum CommandType {
Text,
StoreProcedure
}
ParameterDirection
这是个枚举类,用于指示传递给存储过程的参数的方向性,该枚举类定义如下:
public enum ParameterDirection {
IN,
OUT
}
Parameter
这个类用于存储向oracle存储过程所传递的参数。
OracleHelper
该类是访问oracle数据库的核心类,该类以静态函数的形式提供了对数据库访问的功能函数,仿照C#下OracleHelper,提供了12个公有静态函数和1个私有静态函数,针对开发人员来说,主要是应用其中的12个公有静态函数,关于这些函数,这里就不再多说了,如果您对于C#下的 SqlHelper或OracleHelper比较熟悉的话,您一定能很快地知道这些函数该如何使用,这里FuWaer给个函数结构图:
好了,下面给出这10个文件的源代码
文件1:OracleHelper.java
package ey.db.oracle;
import ey.db.type.*;
import java.sql.*;
/**
*
* @author FuWaer
* @version 1.0
*
*/
public class OracleHelper {
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(String connectionString,
CommandType commandType, String commandText) throws Exception {
return ExecuteDataSet(new OracleConnection(connectionString),
commandType, commandText);
}
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @param parameters
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(String connectionString,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
return ExecuteDataSet(new OracleConnection(connectionString),
commandType, commandText, parameters);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleConnection connection,
CommandType commandType, String commandText) throws Exception {
return ExecuteDataSet(connection, commandType, commandText,
new Parameter[0]);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @param parameters
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleConnection connection,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
DataSet ds = new DataSet();
if (commandType.equals(CommandType.Text)) {
Statement s = connection.GetConnection().createStatement();
ResultSet rs = s.executeQuery(commandText);
ds.AddTable(ConvertResultSetToDataTable(rs));
} else if (commandType.equals(CommandType.StoreProcedure)) {
Parameter[] paras = parameters;
String sql = "";
for (int i = 0; i < paras.length; i++) {
sql = sql + "?,";
}
if (sql.length() > 0) {
sql = "(" + sql.substring(0, sql.length() - 1) + ")";
}
sql = "{ call " + commandText + sql + " }";
CallableStatement proc = null;
proc = connection.GetConnection().prepareCall(sql);
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.IN) {
proc.setObject(i + 1, p.Value, p.parameterType);
} else if (p.parameterDirection == ParameterDirection.OUT) {
proc.registerOutParameter(i + 1, p.parameterType);
}
}
try {
proc.execute();
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.OUT) {
p.Value = proc.getObject(i + 1);
if (p.parameterType == oracle.jdbc.OracleTypes.CURSOR) {
ResultSet rs = (ResultSet) p.Value;
DataTable dt = ConvertResultSetToDataTable(rs);
DataSet _lds = new DataSet();
_lds.AddTable(dt);
p.Value = _lds;
ds.AddTable(dt);
}
}
}
} catch (Exception e) {
throw e;
} finally {
connection.Close();
}
} else {
throw new Exception("commandType is invalid");
}
return ds;
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleTransaction transaction,
CommandType commandType, String commandText) throws Exception {
return ExecuteDataSet(transaction.Connection, commandType, commandText);
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @param parameters
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleTransaction transaction,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
return ExecuteDataSet(transaction.Connection, commandType, commandText,
parameters);
}
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @throws Exception
*/
public static void ExecuteNonQuery(String connectionString,
CommandType commandType, String commandText) throws Exception {
ExecuteNonQuery(new OracleConnection(connectionString), commandType,
commandText);
}
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @param parameters
* @throws Exception
*/
public static void ExecuteNonQuery(String connectionString,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
ExecuteNonQuery(new OracleConnection(connectionString), commandType,
commandText, parameters);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @throws Exception
*/
public static void ExecuteNonQuery(OracleConnection connection,
CommandType commandType, String commandText) throws Exception {
ExecuteNonQuery(connection, commandType, commandText, new Parameter[0]);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @param parameters
* @throws Exception
*/
public static void ExecuteNonQuery(OracleConnection connection,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
if (commandType.equals(CommandType.Text)) {
Statement s = connection.GetConnection().createStatement();
s.execute(commandText);
} else if (commandType.equals(CommandType.StoreProcedure)) {
Parameter[] paras = parameters;
String sql = "";
for (int i = 0; i < paras.length; i++) {
sql = sql + "?,";
}
if (sql.length() > 0) {
sql = "(" + sql.substring(0, sql.length() - 1) + ")";
}
sql = "{ call " + commandText + sql + " }";
CallableStatement proc = null;
proc = connection.GetConnection().prepareCall(sql);
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.IN) {
proc.setObject(i + 1, p.Value, p.parameterType);
} else if (p.parameterDirection == ParameterDirection.OUT) {
proc.registerOutParameter(i + 1, p.parameterType);
}
}
try {
proc.execute();
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.OUT) {
p.Value = proc.getObject(i + 1);
if (p.parameterType == oracle.jdbc.OracleTypes.CURSOR) {
ResultSet rs = (ResultSet) p.Value;
DataTable dt = ConvertResultSetToDataTable(rs);
DataSet _lds = new DataSet();
_lds.AddTable(dt);
p.Value = _lds;
}
}
}
} catch (Exception e) {
throw e;
} finally {
connection.Close();
}
} else {
throw new Exception("commandType is invalid");
}
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @throws Exception
*/
public static void ExecuteNonQuery(OracleTransaction transaction,
CommandType commandType, String commandText) throws Exception {
ExecuteNonQuery(transaction.Connection, commandType, commandText);
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @param parameters
* @throws Exception
*/
public static void ExecuteNonQuery(OracleTransaction transaction,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
ExecuteNonQuery(transaction.Connection, commandType, commandText,
parameters);
}
/**
* 将ResultSet装换为DataTable的函数
*
* @param rs
* @return
* @throws Exception
*/
private static DataTable ConvertResultSetToDataTable(ResultSet rs)
throws Exception {
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
DataTable dt = new DataTable();
while (rs.next()) {
DataRow dr = new DataRow();
for (int i = 1; i <= columnCount; i++) {
DataColumn dc = new DataColumn(rsmd.getColumnName(i), rs
.getObject(i));
dr.AddColumn(dc);
}
dt.AddRow(dr);
}
return dt;
}
}
文件2:DataColumn.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class DataColumn extends Object {
public DataColumn()
{
}
public DataColumn(String n,Object v)
{
colName = n;
colValue = v;
}
public Object colValue = null;
public String colName = null;
}
文件3:DataRow.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*
*/
public class DataRow extends Object {
public DataRow(DataColumn[] cols)
{
Columns = cols.clone();
}
public DataRow()
{
}
public void AddColumn(DataColumn col)
{
DataColumn[] _cols = Columns.clone();
Columns = null;
Columns = new DataColumn[_cols.length+1];
for(int i=0;i<_cols.length;i++)
{
Columns[i] = _cols[i];
}
Columns[Columns.length-1] = col;
_cols = null;
}
public DataColumn [] Columns = new DataColumn[0];
}
文件4:DataTable.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class DataTable {
public DataTable(DataRow[] rows)
{
Rows = rows.clone();
}
public DataTable()
{
}
public void AddRow(DataRow row)
{
DataRow[] _rows = Rows.clone();
this.Rows = null;
this.Rows = new DataRow[_rows.length+1];
for(int i=0;i<_rows.length;i++)
{
this.Rows[i] = _rows[i];
}
this.Rows[this.Rows.length-1] = row;
_rows = null;
}
public DataRow[] Rows = new DataRow[0];
}
文件5:DataSet.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class DataSet {
public DataSet(DataTable[] tables)
{
this.Tables = tables.clone();
}
public DataSet()
{
}
public void AddTable(DataTable table)
{
DataTable[] _tables = this.Tables.clone();
this.Tables = null;
this.Tables = new DataTable[_tables.length+1];
for(int i=0;i<_tables.length;i++)
{
this.Tables[i] = _tables[i];
}
this.Tables[this.Tables.length-1] = table;
_tables = null;
}
public DataTable[] Tables = new DataTable[0];
}
文件6:OracleConnection.java
package ey.db.type;
import java.sql.*;
/**
*
* @author FuWaer
* @version 1.0
*/
public class OracleConnection {
/**
* OracleConnection构造函数
* @param String connectionString :
* 数据库连接参数,格式:url;user;passworld.
* 例如:jdbc:oracle:thin:@localhost:1521:db;system;manager
* @throws Exception
*/
public OracleConnection(String connectionString) throws Exception
{
Class.forName(this._driver);
String[] _sa = connectionString.split(";");
this.connection = DriverManager.getConnection(_sa[0], _sa[1], _sa[2]);
}
/**
* 关闭数据库连接
* @throws Exception
*/
public void Close() throws Exception
{
if(!connection.isClosed()&&connection.getAutoCommit())
{
this.connection.close();
}
}
/**
* 从OracleConnection类创建事务处理的OracleTransaction类实例
* @return
* @throws Exception
*/
public OracleTransaction BeginTransaction() throws Exception
{
OracleTransaction tran = new OracleTransaction(this);
return tran;
}
/**
* 获取java.sql.Connection对象
* @return java.sql.Connection对象
*/
public Connection GetConnection()
{
return this.connection;
}
private String _driver = "oracle.jdbc.driver.OracleDriver";
private Connection connection = null;
}
文件7:OracleTransaction.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class OracleTransaction {
public OracleTransaction(OracleConnection connection) throws Exception
{
this.Connection = connection;
this.Connection.GetConnection().setAutoCommit(false);
}
/**
* 事务提交
* @throws Exception
*/
public void Commit() throws Exception
{
try
{
this.Connection.GetConnection().commit();
}
catch(Exception e)
{
throw e;
}
finally
{
this.Connection.GetConnection().setAutoCommit(true);
this.Connection.Close();
}
}
/**
* 事务回滚
* @throws Exception
*/
public void Rollback() throws Exception
{
try
{
this.Connection.GetConnection().rollback();
}
catch(Exception e)
{
throw e;
}
finally
{
this.Connection.GetConnection().setAutoCommit(true);
this.Connection.Close();
}
}
public OracleConnection Connection = null;
}
文件8:CommandType.java
package ey.db.type;
/**
* 命令类型枚举类
* @author FuWaer
* @version 1.0
*/
public enum CommandType {
Text,
StoreProcedure
}
文件9:ParameterDirection.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public enum ParameterDirection {
IN,
OUT
}
文件10:Parameter.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class Parameter {
public Parameter(
String paraName,
int paraType,
Object paraValue,
ParameterDirection paraDirection
)
{
this.parameterName = paraName;
this.parameterType = paraType;
this.Value = paraValue;
this.parameterDirection = paraDirection;
}
public Parameter(
String paraName,
int paraType,
Object paraValue
)
{
this.parameterName = paraName;
this.parameterType = paraType;
this.Value = paraValue;
this.parameterDirection = ParameterDirection.IN;
}
public String parameterName = "";
public Object Value = null;
public ParameterDirection parameterDirection = null;
public int parameterType = 0;
}
在.NET平台下有个被使用的很广泛的SqlHelper工具类,是微软专门针对SQL Server数据库所编写的数据访问层中间件,很好的对ADO.NET进行了封装。在实际应用中,由于项目需求,当时我曾对SqlHelper进行了若干改造,变成了能够针对Oracle数据库进行访问的OracleHelper工具类,这些都是在.NET平台下使用C#实现的。
近期,项目存在向java平台下移植的可能,为了屏蔽JDBC底层API,使平移更加容易,FuWaer花了点时间对C#下OracleHelper进行了改造,改造的目的就是要基本保持原有函数接口形式和类型不变,为此,OracleHelper包由如下类组成:
共10个文件,其中,ey.db.oracle包中的OracleHelper.java实现了对JDBC的封装;ey.db.type包中的9个类是为了保持OracleHelper类函数能够和C#下的OracleHelper类函数的形式和参数类型一致而编写的。
全部内容可以通过以下链接下载:(写此文章时blog无法上传文件,稍后上传,如有需要也可留下您的email或自行编译文末源代码)
源文件:Java_OracleHelper_1_0_20071027_src.zip
JAR包:Java_OracleHelper_1_0_20071027_jar.jar
本工具包的使用实例可以参见《java下OracleHelper包使用实例》
接下来,FuWaer分别对每个类的功能进行简短的介绍,全部源码在文章末尾贴出了,如无法下载源代码,也可分别拷贝源码自行编译。
DataColumn、DataRow、DataTable
这三个类是仿照C#中的对应类实现的,实现了二维表格数据的对象化存储,目的在于对JDBC的ResultSet实现封装,后面将会介绍,OracleHelper.java中的ConvertResultSetToDataTable函数及实现了从ResultSet构造DataTable的过程。
DataSet
这也是仿照C#中的DataSet实现的,它由一个或多个DataTable实例构成,该类用于OracleHelper.java中的ExecuteDataSet函数的返回值类型。它将方便已经熟悉了C#下DataSet操作的程序人员,对数据库查询的结果集将不再以底层的ResultSet存在,应用了DataSet,开发人员可以完全不用知道ResultSet的存在。
OracleConnection
该类是仿照C#中OracleClient命名空间下的OracleConnection实现的。OracleConnection类是对 java.sql.Connection的封装,经过封装,开发人员将不用了解java.sql.Connection的相关内容。该类具有如下主要结构:
构造函数 public OracleConnection(String connectionString)
其中,connectionString是用来构造java.sql.Connection实例所必需的信息,规定connectionString应该具有如下格式:url;user;password,例如:jdbc:oracle:thin:@localhost:1521:db;system;manager
关闭数据库连接函数 public void Close()
启动事务函数 public OracleTransaction BeginTransaction()
OracleTransaction
该类是仿照C#中OracleClient命名空间下的OracleTransaction实现的。OracleTransaction用于事务控制,通常,该类的实例是通过OracleConnection.BeginTransaction()获得的。该类具有如下主要结构:
构造函数 public OracleTransaction(OracleConnection connection)
事务提交函数 public void Commit()
事务回滚函数 public void Rollback()
CommandType
这是个枚举类,用于指示访问数据库的是文本型sql语句还是存储过程,该枚举类定义如下:
public enum CommandType {
Text,
StoreProcedure
}
ParameterDirection
这是个枚举类,用于指示传递给存储过程的参数的方向性,该枚举类定义如下:
public enum ParameterDirection {
IN,
OUT
}
Parameter
这个类用于存储向oracle存储过程所传递的参数。
OracleHelper
该类是访问oracle数据库的核心类,该类以静态函数的形式提供了对数据库访问的功能函数,仿照C#下OracleHelper,提供了12个公有静态函数和1个私有静态函数,针对开发人员来说,主要是应用其中的12个公有静态函数,关于这些函数,这里就不再多说了,如果您对于C#下的 SqlHelper或OracleHelper比较熟悉的话,您一定能很快地知道这些函数该如何使用,这里FuWaer给个函数结构图:
好了,下面给出这10个文件的源代码
文件1:OracleHelper.java
package ey.db.oracle;
import ey.db.type.*;
import java.sql.*;
/**
*
* @author FuWaer
* @version 1.0
*
*/
public class OracleHelper {
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(String connectionString,
CommandType commandType, String commandText) throws Exception {
return ExecuteDataSet(new OracleConnection(connectionString),
commandType, commandText);
}
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @param parameters
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(String connectionString,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
return ExecuteDataSet(new OracleConnection(connectionString),
commandType, commandText, parameters);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleConnection connection,
CommandType commandType, String commandText) throws Exception {
return ExecuteDataSet(connection, commandType, commandText,
new Parameter[0]);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @param parameters
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleConnection connection,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
DataSet ds = new DataSet();
if (commandType.equals(CommandType.Text)) {
Statement s = connection.GetConnection().createStatement();
ResultSet rs = s.executeQuery(commandText);
ds.AddTable(ConvertResultSetToDataTable(rs));
} else if (commandType.equals(CommandType.StoreProcedure)) {
Parameter[] paras = parameters;
String sql = "";
for (int i = 0; i < paras.length; i++) {
sql = sql + "?,";
}
if (sql.length() > 0) {
sql = "(" + sql.substring(0, sql.length() - 1) + ")";
}
sql = "{ call " + commandText + sql + " }";
CallableStatement proc = null;
proc = connection.GetConnection().prepareCall(sql);
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.IN) {
proc.setObject(i + 1, p.Value, p.parameterType);
} else if (p.parameterDirection == ParameterDirection.OUT) {
proc.registerOutParameter(i + 1, p.parameterType);
}
}
try {
proc.execute();
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.OUT) {
p.Value = proc.getObject(i + 1);
if (p.parameterType == oracle.jdbc.OracleTypes.CURSOR) {
ResultSet rs = (ResultSet) p.Value;
DataTable dt = ConvertResultSetToDataTable(rs);
DataSet _lds = new DataSet();
_lds.AddTable(dt);
p.Value = _lds;
ds.AddTable(dt);
}
}
}
} catch (Exception e) {
throw e;
} finally {
connection.Close();
}
} else {
throw new Exception("commandType is invalid");
}
return ds;
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleTransaction transaction,
CommandType commandType, String commandText) throws Exception {
return ExecuteDataSet(transaction.Connection, commandType, commandText);
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @param parameters
* @return
* @throws Exception
*/
public static DataSet ExecuteDataSet(OracleTransaction transaction,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
return ExecuteDataSet(transaction.Connection, commandType, commandText,
parameters);
}
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @throws Exception
*/
public static void ExecuteNonQuery(String connectionString,
CommandType commandType, String commandText) throws Exception {
ExecuteNonQuery(new OracleConnection(connectionString), commandType,
commandText);
}
/**
*
* @param connectionString
* @param commandType
* @param commandText
* @param parameters
* @throws Exception
*/
public static void ExecuteNonQuery(String connectionString,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
ExecuteNonQuery(new OracleConnection(connectionString), commandType,
commandText, parameters);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @throws Exception
*/
public static void ExecuteNonQuery(OracleConnection connection,
CommandType commandType, String commandText) throws Exception {
ExecuteNonQuery(connection, commandType, commandText, new Parameter[0]);
}
/**
*
* @param connection
* @param commandType
* @param commandText
* @param parameters
* @throws Exception
*/
public static void ExecuteNonQuery(OracleConnection connection,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
if (commandType.equals(CommandType.Text)) {
Statement s = connection.GetConnection().createStatement();
s.execute(commandText);
} else if (commandType.equals(CommandType.StoreProcedure)) {
Parameter[] paras = parameters;
String sql = "";
for (int i = 0; i < paras.length; i++) {
sql = sql + "?,";
}
if (sql.length() > 0) {
sql = "(" + sql.substring(0, sql.length() - 1) + ")";
}
sql = "{ call " + commandText + sql + " }";
CallableStatement proc = null;
proc = connection.GetConnection().prepareCall(sql);
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.IN) {
proc.setObject(i + 1, p.Value, p.parameterType);
} else if (p.parameterDirection == ParameterDirection.OUT) {
proc.registerOutParameter(i + 1, p.parameterType);
}
}
try {
proc.execute();
for (int i = 0; i < paras.length; i++) {
Parameter p = paras[i];
if (p.parameterDirection == ParameterDirection.OUT) {
p.Value = proc.getObject(i + 1);
if (p.parameterType == oracle.jdbc.OracleTypes.CURSOR) {
ResultSet rs = (ResultSet) p.Value;
DataTable dt = ConvertResultSetToDataTable(rs);
DataSet _lds = new DataSet();
_lds.AddTable(dt);
p.Value = _lds;
}
}
}
} catch (Exception e) {
throw e;
} finally {
connection.Close();
}
} else {
throw new Exception("commandType is invalid");
}
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @throws Exception
*/
public static void ExecuteNonQuery(OracleTransaction transaction,
CommandType commandType, String commandText) throws Exception {
ExecuteNonQuery(transaction.Connection, commandType, commandText);
}
/**
*
* @param transaction
* @param commandType
* @param commandText
* @param parameters
* @throws Exception
*/
public static void ExecuteNonQuery(OracleTransaction transaction,
CommandType commandType, String commandText,
Parameter... parameters) throws Exception {
ExecuteNonQuery(transaction.Connection, commandType, commandText,
parameters);
}
/**
* 将ResultSet装换为DataTable的函数
*
* @param rs
* @return
* @throws Exception
*/
private static DataTable ConvertResultSetToDataTable(ResultSet rs)
throws Exception {
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
DataTable dt = new DataTable();
while (rs.next()) {
DataRow dr = new DataRow();
for (int i = 1; i <= columnCount; i++) {
DataColumn dc = new DataColumn(rsmd.getColumnName(i), rs
.getObject(i));
dr.AddColumn(dc);
}
dt.AddRow(dr);
}
return dt;
}
}
文件2:DataColumn.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class DataColumn extends Object {
public DataColumn()
{
}
public DataColumn(String n,Object v)
{
colName = n;
colValue = v;
}
public Object colValue = null;
public String colName = null;
}
文件3:DataRow.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*
*/
public class DataRow extends Object {
public DataRow(DataColumn[] cols)
{
Columns = cols.clone();
}
public DataRow()
{
}
public void AddColumn(DataColumn col)
{
DataColumn[] _cols = Columns.clone();
Columns = null;
Columns = new DataColumn[_cols.length+1];
for(int i=0;i<_cols.length;i++)
{
Columns[i] = _cols[i];
}
Columns[Columns.length-1] = col;
_cols = null;
}
public DataColumn [] Columns = new DataColumn[0];
}
文件4:DataTable.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class DataTable {
public DataTable(DataRow[] rows)
{
Rows = rows.clone();
}
public DataTable()
{
}
public void AddRow(DataRow row)
{
DataRow[] _rows = Rows.clone();
this.Rows = null;
this.Rows = new DataRow[_rows.length+1];
for(int i=0;i<_rows.length;i++)
{
this.Rows[i] = _rows[i];
}
this.Rows[this.Rows.length-1] = row;
_rows = null;
}
public DataRow[] Rows = new DataRow[0];
}
文件5:DataSet.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class DataSet {
public DataSet(DataTable[] tables)
{
this.Tables = tables.clone();
}
public DataSet()
{
}
public void AddTable(DataTable table)
{
DataTable[] _tables = this.Tables.clone();
this.Tables = null;
this.Tables = new DataTable[_tables.length+1];
for(int i=0;i<_tables.length;i++)
{
this.Tables[i] = _tables[i];
}
this.Tables[this.Tables.length-1] = table;
_tables = null;
}
public DataTable[] Tables = new DataTable[0];
}
文件6:OracleConnection.java
package ey.db.type;
import java.sql.*;
/**
*
* @author FuWaer
* @version 1.0
*/
public class OracleConnection {
/**
* OracleConnection构造函数
* @param String connectionString :
* 数据库连接参数,格式:url;user;passworld.
* 例如:jdbc:oracle:thin:@localhost:1521:db;system;manager
* @throws Exception
*/
public OracleConnection(String connectionString) throws Exception
{
Class.forName(this._driver);
String[] _sa = connectionString.split(";");
this.connection = DriverManager.getConnection(_sa[0], _sa[1], _sa[2]);
}
/**
* 关闭数据库连接
* @throws Exception
*/
public void Close() throws Exception
{
if(!connection.isClosed()&&connection.getAutoCommit())
{
this.connection.close();
}
}
/**
* 从OracleConnection类创建事务处理的OracleTransaction类实例
* @return
* @throws Exception
*/
public OracleTransaction BeginTransaction() throws Exception
{
OracleTransaction tran = new OracleTransaction(this);
return tran;
}
/**
* 获取java.sql.Connection对象
* @return java.sql.Connection对象
*/
public Connection GetConnection()
{
return this.connection;
}
private String _driver = "oracle.jdbc.driver.OracleDriver";
private Connection connection = null;
}
文件7:OracleTransaction.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class OracleTransaction {
public OracleTransaction(OracleConnection connection) throws Exception
{
this.Connection = connection;
this.Connection.GetConnection().setAutoCommit(false);
}
/**
* 事务提交
* @throws Exception
*/
public void Commit() throws Exception
{
try
{
this.Connection.GetConnection().commit();
}
catch(Exception e)
{
throw e;
}
finally
{
this.Connection.GetConnection().setAutoCommit(true);
this.Connection.Close();
}
}
/**
* 事务回滚
* @throws Exception
*/
public void Rollback() throws Exception
{
try
{
this.Connection.GetConnection().rollback();
}
catch(Exception e)
{
throw e;
}
finally
{
this.Connection.GetConnection().setAutoCommit(true);
this.Connection.Close();
}
}
public OracleConnection Connection = null;
}
文件8:CommandType.java
package ey.db.type;
/**
* 命令类型枚举类
* @author FuWaer
* @version 1.0
*/
public enum CommandType {
Text,
StoreProcedure
}
文件9:ParameterDirection.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public enum ParameterDirection {
IN,
OUT
}
文件10:Parameter.java
package ey.db.type;
/**
*
* @author FuWaer
* @version 1.0
*/
public class Parameter {
public Parameter(
String paraName,
int paraType,
Object paraValue,
ParameterDirection paraDirection
)
{
this.parameterName = paraName;
this.parameterType = paraType;
this.Value = paraValue;
this.parameterDirection = paraDirection;
}
public Parameter(
String paraName,
int paraType,
Object paraValue
)
{
this.parameterName = paraName;
this.parameterType = paraType;
this.Value = paraValue;
this.parameterDirection = ParameterDirection.IN;
}
public String parameterName = "";
public Object Value = null;
public ParameterDirection parameterDirection = null;
public int parameterType = 0;
}
发表评论
-
卧槽,我为netty贡献过代码,牛比不?
2014-02-14 10:15 1048发现netty有一段代码怎么跟我写的似的呢?一看github才 ... -
约瑟夫出圈问题
2012-02-21 15:48 1742import java.util.Scanner; ... -
书单,觉得比较好的书单 。
2012-01-28 11:29 2025学习软件开发应该看 ... -
去掉小箭头
2011-12-31 11:25 1057http://jingyan.baidu.com/articl ... -
Eclipse下使用Xfire创建WebService入门示例(转)
2011-12-19 16:21 1922什么是Web Service Web Se ... -
转的JAVA实现AES加密
2011-12-07 14:54 2254JAVA实现AES加密 1. 因子 ... -
JAVA String.format 方法使用介绍
2011-10-25 18:25 9351.对整数进行格式化:%[index$][标识][最小宽度]转 ... -
处理系统全变成lnk图标的方法
2011-10-23 16:57 1558相信有些用户曾试过错误地把LNK文件的打开方式更改其他文件,导 ... -
如何读写json文件
2011-10-09 15:43 18637代码如下: import java.io.Buffered ... -
log4J的学习
2011-10-09 13:28 960http://blog.csdn.net/eako/artic ... -
linux下安装jsk
2011-10-08 18:55 12111. 去http://java.sun.com ... -
一些技术牛人的博客
2011-08-30 13:23 2438High Scalability - Building big ... -
把一个xml节点信息递归的存到map中的方法
2011-05-27 16:52 3727jar包自己加!! import java.util.Ha ... -
关于java中的static{}块
2011-04-29 15:38 4657一直以来对static块不是很熟系,今天特意写了两个程序来搞清 ... -
大数相加的java实现
2011-04-06 17:43 1750import java.io.BufferedReader ... -
java中的逻辑移位与算数移位
2011-03-22 14:12 1837java中是支持逻辑移位和算数移位的,简单说,逻辑移位就是不带 ... -
关于短路与和非短路与 (&& 和&)
2011-03-22 11:55 2650这两个操作符都是与的意思 && 和 ... -
java基础类型
2011-03-22 11:16 1006java含有四类八种基本的数据类型。 首先是整型, 1,byt ... -
java命令参数
2011-03-20 22:07 1243Java命令参数说明大全 ... -
线程之间通信的三种方法
2011-03-17 15:50 3261线程间通信的三种方法 ...
相关推荐
压缩包包含如下内容:Java_OracleHelper_1_0_20071027_src.zip,Java_OracleHelper_1_0_20071027_jar.jar。更多信息可以参见文章:http://blog.csdn.net/FuWaer/archive/2007/10/27/1847475.aspx
Java_OracleHelper源码是一个专为Java开发者设计的工具类库,主要目的是简化与Oracle数据库的交互过程。这个源码库包含了一系列的辅助方法,帮助开发者执行SQL查询、更新、插入和删除操作,以及处理Oracle特有的特性...
在Java编程中,连接Oracle数据库是一项常见的任务,用于执行SQL查询、更新和其他数据库操作。`sqlHelper`类是一个自定义的工具类,旨在简化这个过程,提供一个方便、高效的接口来处理数据库交互。本篇文章将深入探讨...
- `OracleHelper.java` 类可能包含了类似`MysqlHelper`的逻辑,但使用Oracle JDBC驱动(如`oracle.jdbc.driver.OracleDriver`)和对应的数据库URL格式。 - Oracle数据库支持更复杂的SQL特性,如PL/SQL存储过程,这...
#orale com.hotent.cgm.db.impl.OracleHelper #mysql com.hotent.cgm.db.impl.MySqlHelper #h2 com.hotent.cgm.db.impl.H2Helper #sql2005 com.hotent.cgm.db.impl.Sql2005Helper #db2 ...
"OracleHelper"标签暗示了这是一个助手类,可能是为了方便开发者调用Oracle相关的操作。它可能包含了一系列静态方法,如执行SQL查询、插入、更新和删除操作,以及调用存储过程。通过这样的助手类,开发者可以避免...
- 在“URL”中输入连接数据库的字符串,并在“数据存储器 helper 类名”中选择“Oracle 10g 数据存储器 helper”。 - 完成配置后点击“完成”,然后“保存”。 ##### 3.2 测试连接 - 在页面中选中新建的数据源,...
Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems公司(现已被Oracle收购)于1995年发布。它的设计目标是“一次编写,到处运行”,这意味着编写的Java程序可以在任何支持Java的平台上运行,无需重新编译...
2. **Oracle JDBC驱动**:为了在Websphere中使用Oracle数据库,需要将Oracle的JDBC驱动jar包路径设置到环境变量`ORACLE_JDBC_DRIVER_PATH`中,这样Websphere才能识别并加载驱动。 3. **JDBC提供程序**:在Websphere...
**JPublisher:Oracle Object Type与Java的桥梁** 在Oracle数据库中,Object Type是一种高级数据类型,它允许我们创建自定义的复杂数据结构,类似于面向对象编程中的类。JPublisher是Oracle提供的一种工具,用于将...
- **中间层**:利用无状态会话Bean (SLSB) + DAO + Helper类实现,部署在3台WebLogic服务器上,并通过F5实现负载均衡。 - **数据库层**:包含两台Oracle数据库服务器(分别用于存储用户信息和业务数据),以及一台...
1. **项目结构**:在Java项目中,Helper类通常放在src/main/java目录下的相应包结构中,根据其功能归属。 2. **Maven/Gradle**:如果使用构建工具,Helper类会被编译成JAR或WAR包中的class文件,放在`WEB-INF/...
随着Java技能的深入,你可能会接触到更多高级主题,比如Linux环境下的Java Web服务部署。 总结来说,Java Servlet结合MySQL的开发环境搭建涉及到Eclipse的配置、Web服务器的安装、项目的创建、依赖库的添加以及...
通过JDBC连接Oracle数据库的十大技巧,为Java开发者提供了深入理解和优化数据库连接的关键知识点。以下是对这十大技巧的详细解析: ### 技巧一:在客户端软件开发中使用Thin驱动程序 Oracle为JDBC提供了多种驱动...
7. **Integration**:CommonJ SDO可以与许多Java EE服务器(如IBM WebSphere, Oracle WebLogic等)集成,使得在这些平台上构建数据驱动的应用变得更加容易。 8. **Error Handling and Debugging**:了解库中的错误...
总的来说,Ibatis3生成器是Ibatis3框架下的一个强大工具,它极大地减轻了开发人员的工作负担,提高了开发速度和代码质量。通过合理使用并结合Ibatis3Helper等扩展工具,开发者可以更加高效地进行项目开发。
例如,如果`MainClass`依赖一个名为`HelperClass.java`的辅助类,那么`HelperClass.java`也应该放在当前工作目录中。 运行Java程序时,通常需要先进行编译,然后执行。编译命令是`javac MainClass.java`,这会生成...
org.xml.sax.helper包提供了辅助类,比如DefaultHandler实现了所有的处理器接口,为开发人员提供了方便。XMLReaderFactory类用于创建XMLReader实例。此外,SAX还提供了一些异常类,如SAXException、...
- 在数据源界面,点击“新建”,设定JNDI名称(如`jdbc/mmp`),选择合适的Helper类,输入数据库URL(例如:`jdbc:oracle:thin:@133.64.39.208:1521:sxnew97`),保存并确认。 7. **设置认证条目**: - 在数据源...
- 支持多种数据库,包括MySQL、Oracle、SQL Server等。 - 提供了丰富的API,方便对分页信息进行操作。 - 可以配合MyBatis的动态SQL,使代码更加简洁。 总的来说,PageHelper简化了Spring Boot项目中的分页实现,...