/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestDbPreparedStatement.java 3920 2008-04-14 19:58:18Z gbevin $
*/
package com.uwyn.rife.database;
import com.uwyn.rife.database.exceptions.*;
import com.uwyn.rife.database.queries.*;
import com.uwyn.rife.tools.ExceptionUtils;
import com.uwyn.rife.tools.exceptions.BeanUtilsException;
import junit.framework.TestCase;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.*;
import java.util.Calendar;
public class TestDbPreparedStatement extends TestCase
{
private Datasource mDatasource = null;
public TestDbPreparedStatement(Datasource datasource, String datasourceName, String name)
{
super(name);
mDatasource = datasource;
}
public void setUp()
{
// create the temporary table
CreateTable query_create = new CreateTable(mDatasource);
query_create.table("parametersbean")
.columns(BeanImpl.class)
.column("notbeanInt", int.class)
.precision("propertyString", 255)
.precision("propertyStringbuffer", 255)
.precision("propertyChar", 1)
.precision("propertyDouble", 7, 2)
.precision("propertyFloat", 8, 3)
.precision("propertyBigDecimal", 16, 6);
DbStatement statement = mDatasource.getConnection().createStatement();
try
{
try
{
statement.executeUpdate(query_create);
}
catch (DatabaseException e)
{
e.printStackTrace();
}
}
finally
{
try
{
statement.close();
}
catch (DatabaseException e)
{
// do nothing
}
}
}
public void tearDown()
{
try
{
DbConnection connection = mDatasource.getConnection();
// drop temporary table
DropTable query_drop = new DropTable(mDatasource);
query_drop.table("parametersbean");
connection.createStatement().executeUpdate(query_drop);
connection.close();
}
catch (DatabaseException e)
{
fail(ExceptionUtils.getExceptionStackTrace(e));
}
}
public void testInstationSql()
{
try
{
String sql = "DELETE FROM parametersbean";
DbPreparedStatement statement_delete = mDatasource.getConnection().getPreparedStatement(sql);
assertEquals(sql, statement_delete.getSql());
assertNull(statement_delete.getQuery());
statement_delete.executeUpdate();
statement_delete.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testInstationQuery()
{
try
{
Delete query_delete = new Delete(mDatasource);
query_delete
.from("parametersbean");
DbPreparedStatement statement_delete = mDatasource.getConnection().getPreparedStatement(query_delete);
assertEquals(query_delete.getSql(), statement_delete.getSql());
assertEquals(query_delete, statement_delete.getQuery());
statement_delete.executeUpdate();
statement_delete.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testExecuteQuery()
{
try
{
Select query_select = new Select(mDatasource);
query_select
.from("parametersbean");
DbPreparedStatement statement_select = mDatasource.getConnection().getPreparedStatement(query_select);
statement_select.executeQuery();
assertNotNull(statement_select.getResultSet());
statement_select.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testExecuteQueryException()
{
try
{
Select query_select = new Select(mDatasource);
query_select
.from("inexistenttable");
DbPreparedStatement statement_select = null;
try
{
statement_select = mDatasource.getConnection().getPreparedStatement(query_select);
try
{
statement_select.executeQuery();
fail();
}
catch (ExecutionErrorException e)
{
assertSame(mDatasource, e.getDatasource());
assertEquals(query_select.getSql(), e.getSql());
}
assertNull(statement_select.getResultSet());
}
catch (PreparedStatementCreationErrorException e)
{
assertSame(mDatasource, e.getDatasource());
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testExecuteUpdate()
{
try
{
Delete query_delete = new Delete(mDatasource);
query_delete
.from("parametersbean");
DbPreparedStatement statement_select = mDatasource.getConnection().getPreparedStatement(query_delete);
statement_select.executeUpdate();
statement_select.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testExecuteUpdateException()
{
try
{
Delete query_delete = new Delete(mDatasource);
query_delete
.from("inexistenttable");
DbPreparedStatement statement_update = null;
try
{
statement_update = mDatasource.getConnection().getPreparedStatement(query_delete);
try
{
statement_update.executeUpdate();
fail();
}
catch (ExecutionErrorException e)
{
assertSame(mDatasource, e.getDatasource());
assertEquals(query_delete.getSql(), e.getSql());
}
}
catch (PreparedStatementCreationErrorException e)
{
assertSame(mDatasource, e.getDatasource());
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testNotParametrized()
{
try
{
String sql = "SELECT * FROM parametersbean WHERE propertyString = ?";
DbPreparedStatement statement_select = mDatasource.getConnection().getPreparedStatement(sql);
try
{
statement_select.setString("propertyString", "ok");
fail();
}
catch (DatabaseException e)
{
assertTrue(e instanceof NoParametrizedQueryException);
assertSame(statement_select, ((NoParametrizedQueryException)e).getPreparedStatement());
}
statement_select.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testNoParameters()
{
try
{
Select query_select = new Select(mDatasource);
query_select.from("parametersbean");
DbPreparedStatement statement_select = mDatasource.getConnection().getPreparedStatement(query_select);
try
{
statement_select.setString("propertyString", "ok");
fail();
}
catch (DatabaseException e)
{
assertTrue(e instanceof NoParametersException);
assertSame(statement_select, ((NoParametersException)e).getPreparedStatement());
}
statement_select.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testAddBatch()
{
CreateTable query_create = new CreateTable(mDatasource);
query_create
.table("batchtest")
.column("intcol", int.class);
try
{
DbPreparedStatement statement_create = mDatasource.getConnection().getPreparedStatement(query_create);
statement_create.executeUpdate();
statement_create.close();
Insert query_insert = new Insert(mDatasource);
query_insert
.into(query_create.getTable())
.fieldParameter("intcol");
DbPreparedStatement statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
int first = 1;
int second = 5;
int third = 9;
int fourth = 12;
statement_insert.setInt("intcol", first);
statement_insert.addBatch();
statement_insert.setInt("intcol", second);
statement_insert.addBatch();
statement_insert.setInt("intcol", third);
statement_insert.addBatch();
statement_insert.setInt("intcol", fourth);
statement_insert.addBatch();
statement_insert.executeBatch();
statement_insert.close();
Select query_select = new Select(mDatasource);
query_select
.from(query_create.getTable());
DbStatement statement_select = mDatasource.getConnection().createStatement();
statement_select.executeQuery(query_select);
boolean got_first = false;
boolean got_second = false;
boolean got_third = false;
boolean got_fourth = false;
ResultSet resultset = statement_select.getResultSet();
int result = -1;
while (resultset.next())
{
result = resultset.getInt("intcol");
if (first == result)
{
if (got_first)
{
assertTrue("Got "+first+" more than once", false);
}
got_first = true;
}
else if (second == result)
{
if (got_second)
{
assertTrue("Got "+second+" more than once", false);
}
got_second = true;
}
else if (third == result)
{
if (got_third)
{
assertTrue("Got "+third+" more than once", false);
}
got_third = true;
}
else if (fourth == result)
{
if (got_fourth)
{
assertTrue("Got "+fourth+" more than once", false);
}
got_fourth = true;
}
else
{
assertTrue("Unknown value : "+result, false);
}
}
statement_select.close();
assertTrue(got_first);
assertTrue(got_second);
assertTrue(got_third);
assertTrue(got_fourth);
}
catch (SQLException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
DropTable query_drop = new DropTable(mDatasource);
query_drop
.table(query_create.getTable());
DbPreparedStatement statement_drop = mDatasource.getConnection().getPreparedStatement(query_drop);
statement_drop.executeUpdate();
statement_drop.close();
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testGetMetaData()
{
try
{
Select query_select = new Select(mDatasource);
query_select
.from("parametersbean")
.whereParameter("propertyString", "=");
DbPreparedStatement statement_select = mDatasource.getConnection().getPreparedStatement(query_select);
statement_select.setString("propertyString", "ok");
ResultSetMetaData metadata = null;
metadata = statement_select.getMetaData();
assertNotNull(metadata);
statement_select.close();
}
catch (DatabaseException e)
{
if (e.getCause() != null)
{
// mysql
if (e.getCause().getClass().getName().equals("com.mysql.jdbc.NotImplemented"))
{
return;
}
// oracle
if (e.getCause().getClass().getName().equals("java.sql.SQLException") &&
e.getCause().getMessage().indexOf("statement handle not executed: getMetaData") != -1)
{
return;
}
// mckoi
if (e.getCause().getClass().getName().equals("com.mckoi.database.jdbc.MSQLException") &&
e.getCause().getMessage().startsWith("Not Supported"))
{
return;
}
}
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testGetParameterMetaData()
{
try
{
Select query_select = new Select(mDatasource);
query_select
.from("parametersbean")
.whereParameter("propertyString", "=");
DbPreparedStatement statement_select = mDatasource.getConnection().getPreparedStatement(query_select);
statement_select.setString("propertyString", "ok");
ParameterMetaData metadata = null;
try
{
metadata = statement_select.getParameterMetaData();
assertNotNull(metadata);
}
catch (AbstractMethodError e)
{
assertTrue(mDatasource.getDriver().equals("oracle.jdbc.driver.OracleDriver") ||
mDatasource.getDriver().equals("org.apache.derby.jdbc.EmbeddedDriver"));
}
statement_select.close();
}
catch (DatabaseException e)
{
if (e.getCause() != null)
{
if (e.getCause().getClass().getName().equals("com.mysql.jdbc.NotImplemented"))
{
return;
}
if (e.getCause().getClass().getName().equals("org.postgresql.util.PSQLException") &&
e.getCause().getMessage().equals("This method is not yet implemented."))
{
return;
}
if (e.getCause().getClass().getName().equals("com.mckoi.database.jdbc.MSQLException") &&
e.getCause().getMessage().startsWith("Not Supported"))
{
return;
}
}
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testSetBeanNull()
{
try
{
// insert some data
Insert query_insert = new Insert(mDatasource);
query_insert.into("parametersbean")
.fieldsParameters(BeanImpl.class);
DbPreparedStatement statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
statement_insert.setBean(null);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
finally
{
statement_insert.close();
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testSetBeanError()
{
try
{
// insert some data
Insert query_insert = new Insert(mDatasource);
query_insert.into("parametersbean")
.fieldsParameters(BeanImpl.class);
DbPreparedStatement statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
statement_insert.setBean(BeanErrorImpl.getPopulatedBean());
fail();
}
catch (DatabaseException e)
{
assertTrue(e.getCause() instanceof BeanUtilsException);
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testSetBean()
{
try
{
// insert some data
Insert query_insert = new Insert(mDatasource);
query_insert.into("parametersbean")
.fieldsParameters(BeanImpl.class)
.fieldParameter("notbeanInt");
DbPreparedStatement statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
try
{
statement_insert.setBean(null);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
statement_insert.setBean(BeanImpl.getPopulatedBean());
statement_insert.setInt("notbeanInt", 23);
statement_insert.executeUpdate();
// retrieve the data
BeanManager bean_manager = new BeanManager();
BeanImpl retrieved_bean = bean_manager.fetchBean();
BeanImpl new_bean = BeanImpl.getPopulatedBean();
assertEquals(retrieved_bean.getPropertyString(), new_bean.getPropertyString());
assertEquals(retrieved_bean.getPropertyStringbuffer().toString(), new_bean.getPropertyStringbuffer().toString());
// don't compare milliseconds since each db stores it differently
assertEquals((retrieved_bean.getPropertyDate().getTime()/1000)*1000, (new_bean.getPropertyDate().getTime()/1000)*1000);
assertEquals((retrieved_bean.getPropertyCalendar().getTime().getTime()/1000)*1000, (new_bean.getPropertyCalendar().getTime().getTime()/1000)*1000);
assertEquals((retrieved_bean.getPropertyTimestamp().getTime()/1000)*1000, (new_bean.getPropertyTimestamp().getTime()/1000)*1000);
assertEquals(retrieved_bean.getPropertySqlDate().toString(), new_bean.getPropertySqlDate().toString());
assertEquals(retrieved_bean.getPropertyTime().toString(), new_bean.getPropertyTime().toString());
assertEquals(retrieved_bean.getPropertyChar(), new_bean.getPropertyChar());
assertEquals(retrieved_bean.getPropertyCharacterObject(), new_bean.getPropertyCharacterObject());
assertEquals(retrieved_bean.isPropertyBoolean(), new_bean.isPropertyBoolean());
assertEquals(retrieved_bean.getPropertyBooleanObject(), new_bean.getPropertyBooleanObject());
assertEquals(retrieved_bean.getPropertyByte(), new_bean.getPropertyByte());
assertEquals(retrieved_bean.getPropertyByteObject(), new_bean.getPropertyByteObject());
assertEquals(retrieved_bean.getPropertyDouble(), new_bean.getPropertyDouble(), 0.01);
assertEquals(retrieved_bean.getPropertyDoubleObject().doubleValue(), new_bean.getPropertyDoubleObject().doubleValue(), 0.01);
assertEquals(retrieved_bean.getPropertyFloat(), new_bean.getPropertyFloat(), 0.01);
assertEquals(retrieved_bean.getPropertyFloatObject().floatValue(), new_bean.getPropertyFloatObject().floatValue(), 0.01);
assertEquals(retrieved_bean.getPropertyInt(), new_bean.getPropertyInt());
assertEquals(retrieved_bean.getPropertyIntegerObject(), new_bean.getPropertyIntegerObject());
assertEquals(retrieved_bean.getPropertyLong(), new_bean.getPropertyLong());
assertEquals(retrieved_bean.getPropertyLongObject(), new_bean.getPropertyLongObject());
assertEquals(retrieved_bean.getPropertyShort(), new_bean.getPropertyShort());
assertEquals(retrieved_bean.getPropertyShortObject(), new_bean.getPropertyShortObject());
assertEquals(retrieved_bean.getPropertyBigDecimal(), new_bean.getPropertyBigDecimal());
}
finally
{
statement_insert.close();
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testSetBeanNulls()
{
try
{
// insert some data
Insert query_insert = new Insert(mDatasource);
query_insert.into("parametersbean")
.fieldsParameters(BeanImpl.class);
DbPreparedStatement statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
BeanImpl null_bean = BeanImpl.getNullBean();
// each database has its oddities here, sadly
Calendar cal = Calendar.getInstance();
cal.set(2002, 5, 18, 15, 26, 14);
cal.set(Calendar.MILLISECOND, 764);
if (mDatasource.getDriver().equals("org.postgresql.Driver"))
{
// postgres doesn't handle null chars
null_bean.setPropertyChar(' ');
}
else if (mDatasource.getAliasedDriver().equals("com.mysql.jdbc.Driver"))
{
// mysql automatically set the current time to timestamps
null_bean.setPropertyDate(cal.getTime());
null_bean.setPropertyCalendar(cal);
null_bean.setPropertyTimestamp(new Timestamp(cal.getTime().getTime()));
}
statement_insert.setBean(null_bean);
statement_insert.executeUpdate();
// retrieve the data
BeanManager bean_manager = new BeanManager();
BeanImpl retrieved_bean = bean_manager.fetchBean();
BeanImpl new_bean = BeanImpl.getNullBean();
// apply the database oddities
if (mDatasource.getDriver().equals("org.postgresql.Driver"))
{
// postgres doesn't handle null chars
new_bean.setPropertyChar(' ');
}
else if (mDatasource.getAliasedDriver().equals("com.mysql.jdbc.Driver"))
{
// mysql automatically set the current time to timestamps
new_bean.setPropertyDate(cal.getTime());
new_bean.setPropertyCalendar(cal);
new_bean.setPropertyTimestamp(new Timestamp(cal.getTime().getTime()));
}
assertEquals(retrieved_bean.getPropertyString(), new_bean.getPropertyString());
assertEquals(retrieved_bean.getPropertyStringbuffer(), new_bean.getPropertyStringbuffer());
// don't compare milliseconds since each db stores it differently
if (mDatasource.getAliasedDriver().equals("com.mysql.jdbc.Driver"))
{
// don't compare milliseconds since each db stores it differently
assertEquals((retrieved_bean.getPropertyDate().getTime()/1000)*1000, (new_bean.getPropertyDate().getTime()/1000)*1000);
assertEquals((retrieved_bean.getPropertyCalendar().getTime().getTime()/1000)*1000, (new_bean.getPropertyCalendar().getTime().getTime()/1000)*1000);
assertEquals((retrieved_bean.getPropertyTimestamp().getTime()/1000)*1000, (new_bean.getPropertyTimestamp().getTime()/1000)*1000);
}
else
{
assertEquals(retrieved_bean.getPropertyDate(), new_bean.getPropertyDate());
assertEquals(retrieved_bean.getPropertyCalendar(), new_bean.getPropertyCalendar());
assertEquals(retrieved_bean.getPropertyTimestamp(), new_bean.getPropertyTimestamp());
}
assertEquals(retrieved_bean.getPropertySqlDate(), new_bean.getPropertySqlDate());
assertEquals(retrieved_bean.getPropertyTime(), new_bean.getPropertyTime());
assertEquals(retrieved_bean.getPropertyChar(), new_bean.getPropertyChar());
assertEquals(retrieved_bean.getPropertyCharacterObject(), new_bean.getPropertyCharacterObject());
assertEquals(retrieved_bean.isPropertyBoolean(), new_bean.isPropertyBoolean());
assertEquals(retrieved_bean.getPropertyBooleanObject(), new_bean.getPropertyBooleanObject());
assertEquals(retrieved_bean.getPropertyByte(), new_bean.getPropertyByte());
assertEquals(retrieved_bean.getPropertyByteObject(), new_bean.getPropertyByteObject());
assertEquals(retrieved_bean.getPropertyDouble(), new_bean.getPropertyDouble(), 0.01);
assertEquals(retrieved_bean.getPropertyDoubleObject().doubleValue(), new_bean.getPropertyDoubleObject().doubleValue(), 0.01);
assertEquals(retrieved_bean.getPropertyFloat(), new_bean.getPropertyFloat(), 0.01);
assertEquals(retrieved_bean.getPropertyFloatObject().floatValue(), new_bean.getPropertyFloatObject().floatValue(), 0.01);
assertEquals(retrieved_bean.getPropertyInt(), new_bean.getPropertyInt());
assertEquals(retrieved_bean.getPropertyIntegerObject(), new_bean.getPropertyIntegerObject());
assertEquals(retrieved_bean.getPropertyLong(), new_bean.getPropertyLong());
assertEquals(retrieved_bean.getPropertyLongObject(), new_bean.getPropertyLongObject());
assertEquals(retrieved_bean.getPropertyShort(), new_bean.getPropertyShort());
assertEquals(retrieved_bean.getPropertyShortObject(), new_bean.getPropertyShortObject());
assertEquals(retrieved_bean.getPropertyBigDecimal(), new_bean.getPropertyBigDecimal());
}
finally
{
statement_insert.close();
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testSetNamedParameters()
{
try
{
// insert some data
Insert query_insert = new Insert(mDatasource);
query_insert.into("parametersbean")
.fieldsParameters(BeanImpl.class);
DbPreparedStatement statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
Calendar cal = Calendar.getInstance();
cal.set(2002, 5, 18, 15, 26, 14);
cal.set(Calendar.MILLISECOND, 764);
statement_insert.setString("propertyString", "someotherstring");
statement_insert.setString("propertyStringbuffer", "someotherstringbuff");
statement_insert.setTimestamp("propertyDate", new Timestamp(cal.getTime().getTime()));
statement_insert.setTimestamp("propertyCalendar", new Timestamp(cal.getTime().getTime()));
statement_insert.setDate("propertySqlDate", new java.sql.Date(cal.getTime().getTime()));
statement_insert.setTime("propertyTime", new Time(cal.getTime().getTime()));
statement_insert.setTimestamp("propertyTimestamp", new Timestamp(cal.getTime().getTime()));
statement_insert.setString("propertyChar", "v");
statement_insert.setString("propertyCharacterObject", "r");
statement_insert.setBoolean("propertyBoolean", true);
statement_insert.setBoolean("propertyBooleanObject", false);
statement_insert.setByte("propertyByte", (byte)89);
statement_insert.setByte("propertyByteObject", (byte)34);
statement_insert.setDouble("propertyDouble", 53348.34d);
statement_insert.setDouble("propertyDoubleObject", 143298.692d);
statement_insert.setFloat("propertyFloat", 98634.2f);
statement_insert.setFloat("propertyFloatObject", 8734.7f);
statement_insert.setInt("propertyInt", 545);
statement_insert.setInt("propertyIntegerObject", 968);
statement_insert.setLong("propertyLong", 34563L);
statement_insert.setLong("propertyLongObject", 66875L);
statement_insert.setShort("propertyShort", (short)43);
statement_insert.setShort("propertyShortObject", (short)68);
statement_insert.setBigDecimal("propertyBigDecimal", new BigDecimal("219038743.392874"));
statement_insert.setString("propertyEnum", SomeEnum.VALUE_TWO.toString());
statement_insert.executeUpdate();
// retrieve the data
BeanManager bean_manager = new BeanManager();
BeanImpl retrieved_bean = bean_manager.fetchBean();
BeanImpl new_bean = BeanImpl.getPopulatedBean();
assertEquals(retrieved_bean.getPropertyString(), new_bean.getPropertyString());
assertEquals(retrieved_bean.getPropertyStringbuffer().toString(), new_bean.getPropertyStringbuffer().toString());
// don't compare milliseconds since each db stores it differently
assertEquals((retrieved_bean.getPropertyDate().getTime()/1000)*1000, (new_bean.getPropertyDate().getTime()/1000)*1000);
assertEquals((retrieved_bean.getPropertyCalendar().getTime().getTime()/1000)*1000, (new_bean.getPropertyCalendar().getTime().getTime()/1000)*1000);
assertEquals((retrieved_bean.getPropertyTimestamp().getTime()/1000)*1000, (new_bean.getPropertyTimestamp().getTime()/1000)*1000);
assertEquals(retrieved_bean.getPropertySqlDate().toString(), new_bean.getPropertySqlDate().toString());
assertEquals(retrieved_bean.getPropertyTime().toString(), new_bean.getPropertyTime().toString());
assertEquals(retrieved_bean.getPropertyChar(), new_bean.getPropertyChar());
assertEquals(retrieved_bean.getPropertyCharacterObject(), new_bean.getPropertyCharacterObject());
assertEquals(retrieved_bean.isPropertyBoolean(), new_bean.isPropertyBoolean());
assertEquals(retrieved_bean.getPropertyBooleanObject(), new_bean.getPropertyBooleanObject());
assertEquals(retrieved_bean.getPropertyByte(), new_bean.getPropertyByte());
assertEquals(retrieved_bean.getPropertyByteObject(), new_bean.getPropertyByteObject());
assertEquals(retrieved_bean.getPropertyDouble(), new_bean.getPropertyDouble(), 0.01);
assertEquals(retrieved_bean.getPropertyDoubleObject().doubleValue(), new_bean.getPropertyDoubleObject().doubleValue(), 0.01);
assertEquals(retrieved_bean.getPropertyFloat(), new_bean.getPropertyFloat(), 0.01);
assertEquals(retrieved_bean.getPropertyFloatObject().floatValue(), new_bean.getPropertyFloatObject().floatValue(), 0.01);
assertEquals(retrieved_bean.getPropertyInt(), new_bean.getPropertyInt());
assertEquals(retrieved_bean.getPropertyIntegerObject(), new_bean.getPropertyIntegerObject());
assertEquals(retrieved_bean.getPropertyLong(), new_bean.getPropertyLong());
assertEquals(retrieved_bean.getPropertyLongObject(), new_bean.getPropertyLongObject());
assertEquals(retrieved_bean.getPropertyShort(), new_bean.getPropertyShort());
assertEquals(retrieved_bean.getPropertyShortObject(), new_bean.getPropertyShortObject());
assertEquals(retrieved_bean.getPropertyBigDecimal(), new_bean.getPropertyBigDecimal());
}
finally
{
statement_insert.close();
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testIllegalParameterName()
{
try
{
Insert query_insert = new Insert(mDatasource);
query_insert
.into("parametersbean")
.fieldParameter("intcol");
DbPreparedStatement statement_insert = null;
try
{
statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
statement_insert.setInt(null, 1);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setInt("", 1);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
statement_insert.close();
}
catch (PreparedStatementCreationErrorException e)
{
assertSame(mDatasource, e.getDatasource());
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testInexistantParameterName()
{
try
{
Insert query_insert = new Insert(mDatasource);
query_insert
.into("parametersbean")
.fieldParameter("intcol");
DbPreparedStatement statement_insert = null;
try
{
statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
statement_insert.setInt("doesntexist", 1);
fail();
}
catch (ParameterDoesntExistException e)
{
assertSame(statement_insert, e.getPreparedStatement());
assertEquals("doesntexist", e.getParameterName());
}
statement_insert.close();
}
catch (PreparedStatementCreationErrorException e)
{
assertSame(mDatasource, e.getDatasource());
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testIllegalArgumentTypedParameters()
{
try
{
Insert query_insert = new Insert(mDatasource);
query_insert
.into("parametersbean")
.fieldParameter("intcol");
DbPreparedStatement statement_insert = null;
try
{
statement_insert = mDatasource.getConnection().getPreparedStatement(query_insert);
try
{
statement_insert.setDoubles(null, 1d);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setShorts(null, (short)1);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setNulls(null, Types.INTEGER);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setNulls(null, Types.INTEGER, "INT");
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setBooleans(null, true);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setBytes(null, (byte)1);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setDates(null, new Date(0));
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setDates(null, new Date(0), Calendar.getInstance());
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setInts(null, 1);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setLongs(null, 1L);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setFloats(null, 1f);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setBigDecimals(null, new BigDecimal(String.valueOf(1)));
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setStrings(null, "1");
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setBytes((int[])null, new byte[] {(byte)1});
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setObjects(null, "1", Types.VARCHAR, 0);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setObjects(null, "1", Types.VARCHAR);
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setTimes(null, new Time(0));
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setTimes(null, new Time(0), Calendar.getInstance());
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setTimestamps(null, new Timestamp(0));
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setTimestamps(null, new Timestamp(0), Calendar.getInstance());
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
statement_insert.setObjects(null, "1");
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
try
{
try
{
statement_insert.setURLs(null, new URL("http://www.uwyn.com"));
}
catch (MalformedURLException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
fail();
}
catch (IllegalArgumentException e)
{
assertTrue(true);
}
statement_insert.close();
}
catch (PreparedStatementCreationErrorException e)
{
assertSame(mDatasource, e.getDatasource());
}
}
catch (DatabaseException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
class BeanManager extends DbQueryManager
{
public BeanManager()
{
super(mDatasource);
}
protected BeanImpl fetchBean()
throws DatabaseException
{
Select query_select = new Select(getDatasource());
query_select
.from("parametersbean")
.fields(BeanImpl.class);
DbBeanFetcher<BeanImpl> fetcher = new DbBeanFetcher<BeanImpl>(getDatasource(), BeanImpl.class);
DbStatement statement = executeQuery(query_select);
fetch(statement.getResultSet(), fetcher);
BeanImpl bean = fetcher.getBeanInstance();
statement.close();
return bean;
}
}
}