blob: 5d41776a9c34378db08ce328677cc772321faf95 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more contributor
// license agreements. See the NOTICE.txt file distributed with this work for
// additional information regarding copyright ownership. The ASF licenses this
// file to you under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
package org.apache.oodt.commons.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Properties;
/**
This class is a wrapper for JDBC.
@author D. Crichton
@version $Revision: 1.3 $
*/
public class JDBC_DB
{
Properties serverProps;
Connection connect;
String sql_command;
Statement stmt;
ResultSet rs;
ResultSetMetaData rs_meta;
int affected;
boolean more_rows;
boolean keep_connect_open;
private boolean autoCommitMode = false;
public final String TO_DATE_FORMAT = "DD-MM-YYYY HH24:MI:SS";
/******************************************************************
**
** JDBC_DB
**
** Constructor method will create class instance and load the
** Oracle DB driver
**
*******************************************************************/
public JDBC_DB(
java.util.Properties sys_props) throws SQLException
{
String classname;
serverProps = sys_props;
keep_connect_open = true;
}
public JDBC_DB(
java.util.Properties sys_props,
Connection srv_connect) throws SQLException
{
String classname;
serverProps = sys_props;
connect = srv_connect;
if (srv_connect == null) {
keep_connect_open = false;
} else {
keep_connect_open = true;
}
}
public void setAutoCommitMode(boolean autoCommitMode) {
this.autoCommitMode = autoCommitMode;
}
/******************************************************************
**
** openConnection
**
** Open a connection to the database.
**
*******************************************************************/
public void openConnection() throws SQLException
{
openConnection(serverProps.getProperty("org.apache.oodt.commons.util.JDBC_DB.user", "unknown"),
serverProps.getProperty("org.apache.oodt.commons.util.JDBC_DB.password"),
serverProps.getProperty("org.apache.oodt.commons.util.JDBC_DB.database"));
}
public void openConnection(
String username,
String password,
String database) throws SQLException
{
String url, classname;
if (stmt != null)
stmt.close();
if (rs != null)
rs.close();
if (keep_connect_open)
return;
if (connect != null)
connect.close();
rs_meta = null;
connect = null;
stmt = null;
rs = null;
Properties props = new Properties();
props.put("user", username);
if (password != null)
props.put("password", password);
classname = serverProps.getProperty("org.apache.oodt.commons.util.JDBC_DB.driver", "oracle.jdbc.driver.OracleDriver");
try {
System.err.println("Attempting to load class " + classname);
Class.forName(classname);
System.err.println("Loaded " + classname);
} catch (ClassNotFoundException e) {
System.err.println("Can't load JDBC driver \"" + classname + "\": " + e.getMessage());
e.printStackTrace();
}
url = serverProps.getProperty("org.apache.oodt.commons.util.JDBC_DB.url", "jdbc:oracle:@");
try {
if (database != null) {
System.err.println("Connecting to url+database combo: " + url + database);
connect = DriverManager.getConnection(url+database, props);
} else {
System.err.println("Connecting to full url: " + url);
connect = DriverManager.getConnection(url, props);
}
} catch (SQLException e) {
System.err.println("SQL Exception during connection creation: " + e.getMessage());
e.printStackTrace();
while (e != null) {
System.err.println(e.getMessage());
e = e.getNextException();
}
}
connect.setAutoCommit(autoCommitMode);
}
/******************************************************************
**
** closeConnection
**
** Close a connection to the database.
**
*******************************************************************/
public void closeConnection() {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (keep_connect_open) {
return;
}
if (connect != null) {
connect.close();
}
connect = null;
rs = null;
stmt = null;
} catch (SQLException e) {
System.err.println("Ignoring database close connection exception");
//System.err.println("Ignoring exception " + e.getClass().getName() + ": " + e.getMessage());
//e.printStackTrace();
}
}
/******************************************************************
**
** executeSQLCommand
**
** Send an SQL command to the DBMS to be executed.
**
*******************************************************************/
public void executeSQLCommand(String cmd) throws SQLException
{
/*
** Get the string, and create the statement
*/
sql_command = cmd;
if (stmt!=null)
stmt.close();
if (connect == null) openConnection();
if (connect == null) {
keep_connect_open = false;
openConnection();
}
if (connect == null)
throw new IllegalStateException("Connection is null!!!");
if (connect.isClosed()) {
connect = null;
keep_connect_open = false;
openConnection();
}
if (connect == null)
throw new IllegalStateException("Connection is still null!!!");
if (connect.isClosed())
throw new IllegalStateException("Connection got closed!");
stmt = connect.createStatement();
affected = stmt.executeUpdate(sql_command);
}
/******************************************************************
**
** executeQuery
**
** Send an SQL query to the DBMS to be executed.
**
*******************************************************************/
public ResultSet executeQuery(String cmd) throws SQLException
{
sql_command = cmd;
if (stmt!=null)
stmt.close();
if (connect == null) openConnection();
if (connect == null) {
keep_connect_open = false;
openConnection();
}
if (connect == null)
throw new IllegalStateException("Connection is null!!!");
if (connect.isClosed()) {
connect = null;
keep_connect_open = false;
openConnection();
}
if (connect == null)
throw new IllegalStateException("Connection is still null!!!");
if (connect.isClosed())
throw new IllegalStateException("Connection got closed!");
//long time0 = System.currentTimeMillis();
stmt = connect.createStatement();
//long time = System.currentTimeMillis();
//System.err.println("###### Creating a new statement: " + (time - time0));
//time0 = time;
if (rs!=null)
rs.close();
rs = stmt.executeQuery(sql_command);
//time = System.currentTimeMillis();
//System.err.println("###### Executing the query: " + (time - time0));
if (rs == null)
{
return(null);
}
return(rs);
}
/******************************************************************
**
** getCount
**
** Will return a count when user passes sting select count(*) from ...
**
*******************************************************************/
public int getCount(String cmd) throws SQLException
{
sql_command = cmd;
int count;
if (stmt!=null)
stmt.close();
stmt = connect.createStatement();
if (rs!=null)
rs.close();
rs = stmt.executeQuery(sql_command);
if (rs == null)
{
return(0);
}
count = 0;
while (rs.next())
{
count = rs.getInt(1);
}
stmt.close();
rs.close();
return(count);
}
/******************************************************************
**
** commit
**
**
**
*******************************************************************/
public void commit() throws SQLException
{
connect.commit();
}
/******************************************************************
**
** rollback
**
**
**
*******************************************************************/
public void rollback()
{
try
{
if (connect != null)
connect.rollback();
}
catch (SQLException e)
{
}
}
protected void finalize() throws Throwable
{
try
{
if ((connect != null) && (!keep_connect_open))
{
connect.close();
}
if (rs != null)
{
rs.close();
}
if (stmt != null)
{
stmt.close();
}
}
catch (SQLException e)
{
}
}
/******************************************************************
**
** Convert Date to string in format for
** Oracle TO_DATE processing - DD-MM-YY HH24:MI:SS
**
**
*******************************************************************/
public String toDateStr(java.util.Date inDate)
{
String outDate;
/*
outDate = Integer.toString(inDate.getDate()) + "-" +
Integer.toString(inDate.getMonth() + 1) + "-" +
Integer.toString(inDate.getYear()) + " " +
Integer.toString(inDate.getHours()) + ":" +
Integer.toString(inDate.getMinutes()) + ":" +
Integer.toString(inDate.getSeconds());
return(outDate);
*/
SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String dateStr = fmt.format(inDate);
return dateStr;
}
public Connection getConnection() throws SQLException
{
if (connect == null) openConnection();
if (connect == null) {
keep_connect_open = false;
openConnection();
}
if (connect == null)
throw new IllegalStateException("getConnection can't get a connection pointer");
return(connect);
}
}