📄 db_db2.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.db;
import java.math.*;
import java.sql.*;
import java.util.logging.*;
import javax.sql.*;
import org.compiere.util.*;
import com.ibm.db2.jcc.*;
/**
* DB2 Database Driver
*
* @author Jorg Janke
* @version $Id: DB_DB2.java,v 1.2 2006/02/12 02:19:04 jjanke Exp $
*/
public class DB_DB2
implements CompiereDatabase
{
/**
* Database DB2
*/
public DB_DB2()
{
} // DB_DB2
/** Static Driver */
private static DB2Driver s_driver = null;
/** Driver Class Name */
public static final String DRIVER = "com.ibm.db2.jcc.DB2Driver";
/* Type 2 Driver */
public static final String DRIVER2 = "COM.ibm.db2.jdbc.app.DB2Driver";
/** Default Port 446 */
public static final int DEFAULT_PORT = 446;
/** Default Port 50000 */
public static final int DEFAULT_PORT_0 = 50000;
/** Cached User Name */
private String m_userName = null;
/** Connection String */
private String m_connectionURL;
private DB2SimpleDataSource m_ds = null;
/** Logger */
private static CLogger log = CLogger.getCLogger (DB_DB2.class);
/**
* Get Database Name
* @return database short name
*/
public String getName()
{
return Database.DB_DB2;
} // getName
/**
* Get Database Description
* @return database long name and version
*/
public String getDescription()
{
try
{
if (s_driver == null)
getDriver();
}
catch (Exception e)
{
}
if (s_driver != null)
return s_driver.toString();
return "No Driver";
} // getDescription
/**
* Get Standard JDBC Port
* @return standard port
*/
public int getStandardPort()
{
return DEFAULT_PORT_0;
} // getStandardPort
/**
* Get and register Database Driver
* @return Driver
*/
public Driver getDriver() throws SQLException
{
if (s_driver == null)
{
s_driver = new DB2Driver();
DriverManager.registerDriver (s_driver);
DriverManager.setLoginTimeout (Database.CONNECTION_TIMEOUT);
}
return s_driver;
} // getDriver
/**
* Get Database Connection String.
* <pre>
* Timing:
* </pre>
* @param connection Connection Descriptor
* @return connection String
*/
public String getConnectionURL (CConnection connection)
{
StringBuffer sb = null;
// connection//server:port/database
sb = new StringBuffer ("jdbc:db2:");
// Cloudscape = jdbc:db2j:net:
sb.append("//")
.append(connection.getDbHost())
.append(":").append(connection.getDbPort())
.append("/").append(connection.getDbName());
m_connectionURL = sb.toString();
// log.config(m_connectionURL);
//
m_userName = connection.getDbUid();
return m_connectionURL;
} // getConnectionURL
/**
* Get Connection URL.
* @param dbHost db Host
* @param dbPort db Port
* @param dbName db Name
* @param userName user name
* @return connection
*/
public String getConnectionURL (String dbHost, int dbPort, String dbName,
String userName)
{
m_userName = userName;
return "jdbc:db2://"
+ dbHost + ":" + dbPort + "/" + dbName;
} // getConnectionURL
/**
* Get JDBC Catalog
* @return null - not used
*/
public String getCatalog()
{
return null;
} // getCatalog
/**
* Get JDBC Schema
* @return user name
*/
public String getSchema()
{
if (m_userName != null)
return m_userName.toUpperCase();
log.severe("User Name not set (yet) - call getConnectionURL first");
return null;
} // getSchema
/**
* Supports BLOB
* @return true if BLOB is supported
*/
public boolean supportsBLOB()
{
return true;
} // supportsBLOB
/**
* String Representation
* @return info
*/
public String toString()
{
StringBuffer sb = new StringBuffer("DB_DB2[");
sb.append(m_connectionURL);
sb.append("]");
return sb.toString();
} // toString
/**
* Get Status
* @return status info
*/
public String getStatus()
{
StringBuffer sb = new StringBuffer();
return sb.toString();
} // getStatus
/**************************************************************************
* Convert an individual Oracle Style statements to target database statement syntax.
* @param oraStatement oracle statement
* @return converted Statement oracle statement
*/
public String convertStatement (String oraStatement)
{
return oraStatement;
} // convertStatement
/**
* Get Name of System User
* @return system
*/
public String getSystemUser()
{
return "db2adm";
} // getSystemUser
/**
* Get Name of System Database
* @param databaseName database Name
* @return e.g. master or database Name
*/
public String getSystemDatabase(String databaseName)
{
return databaseName;
} // getSystemDatabase
/**
* Create SQL TO Date String from Timestamp
*
* @param time Date to be converted
* @param dayOnly true if time set to 00:00:00
*
* @return TO_DATE('1999-12-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS')
* or TIMESTAMP('2000-01-10-00.00.00.000000')
*/
public String TO_DATE (Timestamp time, boolean dayOnly)
{
if (time == null)
{
if (dayOnly)
return "trunc(CURRENT TIMESTAMP)";
return "CURRENT TIMESTAMP";
}
// TIMESTAMP('2000-01-10-00.00.00.000000')
StringBuffer dateString = new StringBuffer("TIMESTAMP('");
// YYYY-MM-DD HH24:MI:SS.mmmm JDBC Timestamp format
String myDate = time.toString();
if (dayOnly)
{
dateString.append(myDate.substring(0,10));
dateString.append("-00.00.00.000000')");
}
else
{
myDate = myDate.replace('-', ' ');
myDate = myDate.replace(':', '.');
dateString.append(myDate);
dateString.append("00')");
}
return dateString.toString();
} // TO_DATE
/**
* Create SQL for formatted Date, Number
*
* @param columnName the column name in the SQL
* @param displayType Display Type
* @param AD_Language 6 character language setting (from Env.LANG_*)
*
* @return TRIM(TO_CHAR(columnName,'9G999G990D00','NLS_NUMERIC_CHARACTERS='',.'''))
* or TRIM(TO_CHAR(columnName,'TM9')) depending on DisplayType and Language
* @see org.compiere.util.DisplayType
* @see org.compiere.util.Env
*
* */
public String TO_CHAR (String columnName, int displayType, String AD_Language)
{
return columnName;
/**
StringBuffer retValue = new StringBuffer("TRIM(TO_CHAR(");
retValue.append(columnName);
// Numbers
if (DisplayType.isNumeric(displayType))
{
if (displayType == DisplayType.Amount)
retValue.append(",'9G999G990D00'");
else
retValue.append(",'TM9'");
// TO_CHAR(GrandTotal,'9G999G990D00','NLS_NUMERIC_CHARACTERS='',.''')
if (!Language.isDecimalPoint(AD_Language)) // reversed
retValue.append(",'NLS_NUMERIC_CHARACTERS='',.'''");
}
else if (DisplayType.isDate(displayType))
{
retValue.append(",'")
.append(Language.getLanguage(AD_Language).getDBdatePattern())
.append("'");
}
retValue.append("))");
//
return retValue.toString();
**/
} // TO_CHAR
/**
* Return number as string for INSERT statements with correct precision
* @param number number
* @param displayType display Type
* @return number as string
*/
public String TO_NUMBER (BigDecimal number, int displayType)
{
if (number == null)
return "NULL";
return number.toString();
} // TO_NUMBER
/**
* Get SQL Commands.
* The following variables are resolved:
* @SystemPassword@, @CompiereUser@, @CompierePassword@
* @SystemPassword@, @DatabaseName@, @DatabaseDevice@
* @param cmdType CMD_*
* @return array of commands to be executed
*/
public String[] getCommands (int cmdType)
{
if (CMD_CREATE_USER == cmdType)
return new String[]
{
};
//
if (CMD_CREATE_DATABASE == cmdType)
return new String[]
{
};
//
if (CMD_DROP_DATABASE == cmdType)
return new String[]
{
};
//
return null;
} // getCommands
/**
* Create DataSource
* @param connection connection
* @return data dource
*/
public DataSource getDataSource(CConnection connection)
{
if (m_ds == null)
{
m_ds = new DB2SimpleDataSource();
m_ds.setServerName(connection.getDbHost());
m_ds.setPortNumber(connection.getDbPort());
m_ds.setDatabaseName(connection.getDbName());
m_ds.setDescription("Compiere DataSource");
m_ds.setUser(connection.getDbUid());
m_ds.setPassword(connection.getDbPwd());
m_ds.setLoginTimeout(5); // seconds
// m_ds.setUseCachedCursor(true);
}
return m_ds;
} // getDataSource
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -