FR [ 2448461 ] Introduce DB.getSQLValue*Ex methods

http://sourceforge.net/tracker/index.php?func=detail&aid=2448461&group_id=176962&atid=879335
This commit is contained in:
teo_sarca 2008-12-23 11:46:50 +00:00
parent 5adac0eda8
commit 4b10b24702
2 changed files with 178 additions and 17 deletions

View File

@ -76,6 +76,7 @@ import org.compiere.process.SequenceCheck;
* <li>FR [ 1986583 ] Add DB.executeUpdateEx(String, Object[], String)
* <li>BF [ 2030233 ] Remove duplicate code from DB class
* <li>FR [ 2107062 ] Add more DB.getKeyNamePairs methods
* <li>FR [ 2448461 ] Introduce DB.getSQLValue*Ex methods
*/
public final class DB
{
@ -1161,6 +1162,19 @@ public final class DB
}
return retValue;
}
/**
* Get String Value from sql
* @param trxName trx
* @param sql sql
* @param params collection of parameters
* @return first value or -1
* @throws DBException if there is any SQLException
*/
public static int getSQLValueEx (String trxName, String sql, Collection<Object> params)
{
return getSQLValueEx(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
* Get int Value from sql
@ -1192,9 +1206,7 @@ public final class DB
*/
public static int getSQLValue (String trxName, String sql, Collection<Object> params)
{
Object[] arr = new Object[params.size()];
params.toArray(arr);
return getSQLValue(trxName, sql, arr);
return getSQLValue(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
@ -1203,8 +1215,9 @@ public final class DB
* @param sql sql
* @param params array of parameters
* @return first value or null
* @throws DBException if there is any SQLException
*/
public static String getSQLValueString (String trxName, String sql, Object... params)
public static String getSQLValueStringEx (String trxName, String sql, Object... params)
{
String retValue = null;
PreparedStatement pstmt = null;
@ -1219,9 +1232,9 @@ public final class DB
else
log.info("No Value " + sql);
}
catch (Exception e)
catch (SQLException e)
{
log.log(Level.SEVERE, sql, getSQLException(e));
throw new DBException(e, sql);
}
finally
{
@ -1231,6 +1244,40 @@ public final class DB
return retValue;
}
/**
* Get String Value from sql
* @param trxName trx
* @param sql sql
* @param params collection of parameters
* @return first value or null
* @throws DBException if there is any SQLException
*/
public static String getSQLValueStringEx (String trxName, String sql, Collection<Object> params)
{
return getSQLValueStringEx(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
* Get String Value from sql
* @param trxName trx
* @param sql sql
* @param params array of parameters
* @return first value or null
*/
public static String getSQLValueString (String trxName, String sql, Object... params)
{
String retValue = null;
try
{
retValue = getSQLValueStringEx(trxName, sql, params);
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, getSQLException(e));
}
return retValue;
}
/**
* Get String Value from sql
* @param trxName trx
@ -1240,9 +1287,7 @@ public final class DB
*/
public static String getSQLValueString (String trxName, String sql, Collection<Object> params)
{
Object[] arr = new Object[params.size()];
params.toArray(arr);
return getSQLValueString(trxName, sql, arr);
return getSQLValueString(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
@ -1281,6 +1326,20 @@ public final class DB
return retValue;
}
/**
* Get BigDecimal Value from sql
* @param trxName trx
* @param sql sql
* @param params collection of parameters
* @return first value or null if not found
* @throws DBException if there is any SQLException
*/
public static BigDecimal getSQLValueBDEx (String trxName, String sql, Collection<Object> params) throws DBException
{
return getSQLValueBDEx(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
* Get BigDecimal Value from sql
* @param trxName trx
@ -1311,9 +1370,7 @@ public final class DB
*/
public static BigDecimal getSQLValueBD (String trxName, String sql, Collection<Object> params)
{
Object[] arr = new Object[params.size()];
params.toArray(arr);
return getSQLValueBD(trxName, sql, arr);
return getSQLValueBD(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
@ -1322,8 +1379,9 @@ public final class DB
* @param sql sql
* @param params array of parameters
* @return first value or null
* @throws DBException if there is any SQLException
*/
public static Timestamp getSQLValueTS (String trxName, String sql, Object... params)
public static Timestamp getSQLValueTSEx (String trxName, String sql, Object... params)
{
Timestamp retValue = null;
PreparedStatement pstmt = null;
@ -1338,9 +1396,9 @@ public final class DB
else
log.info("No Value " + sql);
}
catch (Exception e)
catch (SQLException e)
{
log.log(Level.SEVERE, sql, getSQLException(e));
throw new DBException(e, sql);
}
finally
{
@ -1349,6 +1407,39 @@ public final class DB
}
return retValue;
}
/**
* Get BigDecimal Value from sql
* @param trxName trx
* @param sql sql
* @param params collection of parameters
* @return first value or null if not found
* @throws DBException if there is any SQLException
*/
public static Timestamp getSQLValueTSEx (String trxName, String sql, Collection<Object> params) throws DBException
{
return getSQLValueTSEx(trxName, sql, params.toArray(new Object[params.size()]));
}
/**
* Get Timestamp Value from sql
* @param trxName trx
* @param sql sql
* @param params array of parameters
* @return first value or null
*/
public static Timestamp getSQLValueTS (String trxName, String sql, Object... params)
{
try
{
return getSQLValueTSEx(trxName, sql, params);
}
catch (Exception e)
{
log.log(Level.SEVERE, sql, getSQLException(e));
}
return null;
}
/**
* Get Timestamp Value from sql

View File

@ -4,9 +4,11 @@
package test.functional;
import java.math.BigDecimal;
import java.sql.Timestamp;
import org.adempiere.exceptions.DBException;
import org.compiere.util.DB;
import org.compiere.util.TimeUtil;
import test.AdempiereTestCase;
@ -27,7 +29,7 @@ public class DBTest extends AdempiereTestCase
DBException ex = null;
try
{
DB.getSQLValueEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
result = DB.getSQLValueEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
}
catch (DBException e)
{
@ -59,7 +61,7 @@ public class DBTest extends AdempiereTestCase
DBException ex = null;
try
{
DB.getSQLValueBDEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
result = DB.getSQLValueBDEx(null, "SELECT 10 FROM INEXISTENT_TABLE");
}
catch (DBException e)
{
@ -79,4 +81,72 @@ public class DBTest extends AdempiereTestCase
result = DB.getSQLValueBD(null, "SELECT 10 FROM INEXISTENT_TABLE");
assertNull("Error should be signaled", result);
}
public void test_getSQLValueStringEx() throws Exception
{
String result = DB.getSQLValueStringEx(null, "SELECT 'string' FROM DUAL");
assertEquals("string", result);
//
result = DB.getSQLValueStringEx(null, "SELECT 10 FROM AD_SYSTEM WHERE 1=2");
assertNull("No value should be returned", result);
//
DBException ex = null;
try
{
result = DB.getSQLValueStringEx(null, "SELECT 'string' FROM INEXISTENT_TABLE");
}
catch (DBException e)
{
ex = e;
}
assertNotNull("No DBException Was Throwed", ex);
}
public void test_getSQLValueString() throws Exception
{
String result = DB.getSQLValueString(null, "SELECT 'string' FROM DUAL");
assertEquals("string", result);
//
result = DB.getSQLValueString(null, "SELECT 'string' FROM AD_SYSTEM WHERE 1=2");
assertNull("No value should be returned", result);
//
result = DB.getSQLValueString(null, "SELECT 'string' FROM INEXISTENT_TABLE");
assertNull("Error should be signaled", result);
}
public void test_getSQLValueTSEx() throws Exception
{
final Timestamp target = TimeUtil.getDay(2008, 01, 01);
//
Timestamp result = DB.getSQLValueTSEx(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM AD_SYSTEM");
assertEquals(target, result);
//
result = DB.getSQLValueTSEx(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM AD_SYSTEM WHERE 1=2");
assertNull("No value should be returned", result);
//
DBException ex = null;
try
{
result = DB.getSQLValueTSEx(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM INEXISTENT_TABLE");
}
catch (DBException e)
{
ex = e;
}
assertNotNull("No DBException Was Throwed", ex);
}
public void test_getSQLValueTS() throws Exception
{
final Timestamp target = TimeUtil.getDay(2008, 01, 01);
//
Timestamp result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM DUAL");
assertEquals(target, result);
//
result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM AD_SYSTEM WHERE 1=2");
assertNull("No value should be returned", result);
//
result = DB.getSQLValueTS(null, "SELECT TO_DATE('2008-01-01','YYYY-MM-DD') FROM INEXISTENT_TABLE");
assertNull("Error should be signaled", result);
}
}