Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified DatabaseConnector.mpr
Binary file not shown.
35 changes: 23 additions & 12 deletions javasource/databaseconnector/impl/PreparedStatementCreatorImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@
import databaseconnector.interfaces.PreparedStatementCreator;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -37,26 +34,40 @@ public PreparedStatement create(IStringTemplate sql, Connection connection) thro
private void addPreparedStatementParameters(List<ITemplateParameter> queryParameters, PreparedStatement preparedStatement) throws SQLException, IllegalArgumentException {
for (int i = 0; i < queryParameters.size(); i++) {
ITemplateParameter parameter = queryParameters.get(i);
Object parameterValue = parameter.getValue();

switch (parameter.getParameterType()) {
case INTEGER:
preparedStatement.setLong(i + 1, (long) parameter.getValue());
if (parameterValue == null)
preparedStatement.setNull(i + 1, Types.BIGINT);
else
preparedStatement.setLong(i + 1, (long) parameter.getValue());
break;
case STRING:
preparedStatement.setString(i + 1, (String) parameter.getValue());
if (parameterValue == null)
preparedStatement.setNull(i + 1, Types.VARCHAR);
else
preparedStatement.setString(i + 1, (String) parameter.getValue());
break;
case BOOLEAN:
preparedStatement.setBoolean(i + 1, (Boolean) parameter.getValue());
if (parameterValue == null)
preparedStatement.setNull(i + 1, Types.BOOLEAN);
else
preparedStatement.setBoolean(i + 1, (Boolean) parameter.getValue());
break;
case DECIMAL:
preparedStatement.setBigDecimal(i + 1, (BigDecimal) parameter.getValue());
if (parameterValue == null)
preparedStatement.setNull(i + 1, Types.DECIMAL);
else
preparedStatement.setBigDecimal(i + 1, (BigDecimal) parameter.getValue());
break;
case DATETIME:
java.util.Date date = ((java.util.Date) parameter.getValue());
if (date == null)
preparedStatement.setTimestamp(i + 1, null);
else
if (parameterValue == null)
preparedStatement.setNull(i + 1, Types.TIMESTAMP);
else {
java.util.Date date = ((java.util.Date) parameter.getValue());
preparedStatement.setTimestamp(i + 1, new Timestamp(date.getTime()));
}
break;
default:
throw new IllegalArgumentException("Invalid parameter type: " + parameter.getParameterType());
Expand Down
12 changes: 7 additions & 5 deletions javasource/databaseconnectortest/test/JdbcConnectorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ private SimpleEntry<String, IMetaPrimitive.PrimitiveType> entry(String name, IMe
return new SimpleEntry<>(name, type);
}

@Test public void testStatementCreationException() throws SQLException {
@Test(expected = SQLException.class)
public void testStatementCreationException() throws SQLException {
Exception testException = new SQLException("Test Exception Text");

when(connectionManager.getConnection(anyString(), anyString(), anyString())).thenReturn(connection);
Expand All @@ -87,10 +88,11 @@ private SimpleEntry<String, IMetaPrimitive.PrimitiveType> entry(String name, IMe
try {
jdbcConnector.executeQuery(jdbcUrl, userName, password, mockIMetaObject(), sqlQuery, context);
fail("An exception should occur!");
} catch(SQLException sqlException) {}

verify(connection).close();
verify(preparedStatement, never()).close();
}
finally {
verify(connection).close();
verify(preparedStatement, never()).close();
}
}

@Test public void testObjectInstantiatorException() throws SQLException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.mendix.systemwideinterfaces.javaactions.parameters.IStringTemplate;
import com.mendix.systemwideinterfaces.javaactions.parameters.ITemplateParameter;
import com.mendix.systemwideinterfaces.javaactions.parameters.TemplateParameterType;
import com.sap.db.jdbcext.wrapper.PreparedStatement;
import databaseconnector.impl.PreparedStatementCreatorImpl;
import org.junit.Before;
import org.junit.Rule;
Expand All @@ -14,9 +13,7 @@
import org.mockito.junit.MockitoRule;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
Expand Down Expand Up @@ -71,8 +68,11 @@ public void testParameterTypes() throws SQLException {
builder.addParameter(true, TemplateParameterType.BOOLEAN);
builder.addParameter("Hello", TemplateParameterType.STRING);
builder.addParameter(new BigDecimal(45.5), TemplateParameterType.DECIMAL);
builder.addParameter(null, TemplateParameterType.DATETIME);
builder.addParameter(null, TemplateParameterType.STRING);
builder.addParameter(null, TemplateParameterType.DATETIME);
builder.addParameter(null, TemplateParameterType.DECIMAL);
builder.addParameter(null, TemplateParameterType.BOOLEAN);
builder.addParameter(null, TemplateParameterType.INTEGER);

sut.create(builder.build(), connection);

Expand All @@ -81,8 +81,11 @@ public void testParameterTypes() throws SQLException {
verify(preparedStatement).setBoolean(3, true);
verify(preparedStatement).setString(4, "Hello");
verify(preparedStatement).setBigDecimal(5, new BigDecimal(45.5));
verify(preparedStatement).setTimestamp(6, null);
verify(preparedStatement).setString(7, null);
verify(preparedStatement).setNull(6, Types.VARCHAR);
verify(preparedStatement).setNull(7, Types.TIMESTAMP);
verify(preparedStatement).setNull(8, Types.DECIMAL);
verify(preparedStatement).setNull(9, Types.BOOLEAN);
verify(preparedStatement).setNull(10, Types.BIGINT);
}

@Test
Expand Down