You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by se...@apache.org on 2019/04/10 12:57:21 UTC
svn commit: r1857244 - in
/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc:
field/ i2b2/ row/ table/
Author: seanfinan
Date: Wed Apr 10 12:57:21 2019
New Revision: 1857244
URL: http://svn.apache.org/viewvc?rev=1857244&view=rev
Log:
Jdbc checkin : simplified interfaces, use PreparedStatement
Modified:
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractUmlsTable.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/AbstractJdbcField.java Wed Apr 10 12:57:21 2019
@@ -20,7 +20,7 @@ abstract public class AbstractJdbcField<
* {@inheritDoc}
*/
@Override
- public String getFieldName() {
+ public String getName() {
return _name;
}
@@ -28,16 +28,8 @@ abstract public class AbstractJdbcField<
* {@inheritDoc}
*/
@Override
- public int getFieldIndex() {
+ public int getIndex() {
return _index;
}
- /**
- * {@inheritDoc}
- */
- @Override
- public void setFieldIndex( final int index ) {
- _index = index;
- }
-
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/BooleanField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -11,16 +11,12 @@ import java.sql.SQLException;
*/
final public class BooleanField extends AbstractJdbcField<Boolean> {
- public BooleanField( final String name ) {
- super( name, NO_INDEX );
+ public BooleanField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final Boolean value ) throws SQLException {
- statement.setBoolean( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final Boolean value ) throws SQLException {
- statement.setBoolean( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final Boolean value ) throws SQLException {
+ statement.setBoolean( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/DoubleField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -11,16 +11,12 @@ import java.sql.SQLException;
*/
final public class DoubleField extends AbstractJdbcField<Double> {
- public DoubleField( final String name ) {
- super( name, NO_INDEX );
+ public DoubleField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final Double value ) throws SQLException {
- statement.setDouble( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final Double value ) throws SQLException {
- statement.setDouble( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final Double value ) throws SQLException {
+ statement.setDouble( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/FloatField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -11,16 +11,12 @@ import java.sql.SQLException;
*/
final public class FloatField extends AbstractJdbcField<Float> {
- public FloatField( final String name ) {
- super( name, NO_INDEX );
+ public FloatField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final Float value ) throws SQLException {
- statement.setFloat( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final Float value ) throws SQLException {
- statement.setFloat( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final Float value ) throws SQLException {
+ statement.setFloat( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/IntField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -11,16 +11,12 @@ import java.sql.SQLException;
*/
final public class IntField extends AbstractJdbcField<Integer> {
- public IntField( final String name ) {
- super( name, NO_INDEX );
+ public IntField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final Integer value ) throws SQLException {
- statement.setInt( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final Integer value ) throws SQLException {
- statement.setInt( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final Integer value ) throws SQLException {
+ statement.setInt( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/JdbcField.java Wed Apr 10 12:57:21 2019
@@ -1,6 +1,6 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -10,18 +10,10 @@ import java.sql.SQLException;
*/
public interface JdbcField<T> {
- int NO_INDEX = -1;
+ String getName();
- String getFieldName();
+ int getIndex();
- default int getFieldIndex() {
- return NO_INDEX;
- }
-
- void setFieldIndex( final int index );
-
- void addToStatement( final CallableStatement statement, final T value ) throws SQLException;
-
- void insertInStatement( final CallableStatement statement, final T value ) throws SQLException;
+ void addToStatement( final PreparedStatement statement, final T value ) throws SQLException;
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/LongField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -11,16 +11,12 @@ import java.sql.SQLException;
*/
final public class LongField extends AbstractJdbcField<Long> {
- public LongField( final String name ) {
- super( name, NO_INDEX );
+ public LongField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final Long value ) throws SQLException {
- statement.setLong( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final Long value ) throws SQLException {
- statement.setLong( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final Long value ) throws SQLException {
+ statement.setLong( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TextField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -11,16 +11,12 @@ import java.sql.SQLException;
*/
final public class TextField extends AbstractJdbcField<String> {
- public TextField( final String name ) {
- super( name, NO_INDEX );
+ public TextField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final String value ) throws SQLException {
- statement.setString( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final String value ) throws SQLException {
- statement.setString( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final String value ) throws SQLException {
+ statement.setString( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/field/TimeField.java Wed Apr 10 12:57:21 2019
@@ -1,7 +1,7 @@
package org.apache.ctakes.core.cc.jdbc.field;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
@@ -12,16 +12,12 @@ import java.sql.Timestamp;
*/
final public class TimeField extends AbstractJdbcField<Timestamp> {
- public TimeField( final String name ) {
- super( name, NO_INDEX );
+ public TimeField( final String name, final int index ) {
+ super( name, index );
}
- public void addToStatement( final CallableStatement statement, final Timestamp value ) throws SQLException {
- statement.setTimestamp( getFieldName(), value );
- }
-
- public void insertInStatement( final CallableStatement statement, final Timestamp value ) throws SQLException {
- statement.setTimestamp( getFieldIndex(), value );
+ public void addToStatement( final PreparedStatement statement, final Timestamp value ) throws SQLException {
+ statement.setTimestamp( getIndex(), value );
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/i2b2/ObservationFactRow.java Wed Apr 10 12:57:21 2019
@@ -11,7 +11,7 @@ import org.apache.log4j.Logger;
import org.apache.uima.jcas.JCas;
import org.apache.uima.resource.ResourceProcessException;
-import java.sql.CallableStatement;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime;
@@ -54,20 +54,20 @@ final public class ObservationFactRow
// Per Patient
- private final LongField _patientNum = new LongField( PATIENT_NUM );
+ private final LongField _patientNum = new LongField( PATIENT_NUM, 1 );
// Per Document
- private final TextField _providerId = new TextField( PROVIDER_ID );
- private final IntField _encounterNum = new IntField( ENCOUNTER_NUM );
- private final TimeField _startDate = new TimeField( START_DATE );
+ private final TextField _providerId = new TextField( PROVIDER_ID, 2 );
+ private final IntField _encounterNum = new IntField( ENCOUNTER_NUM, 3 );
+ private final TimeField _startDate = new TimeField( START_DATE, 4 );
// Per Row
- private final LongField _instanceNum = new LongField( INSTANCE_NUM );
- private final TextField _conceptCd = new TextField( CONCEPT_CD );
- private final TextField _modifierCd = new TextField( MODIFIER_CD );
- private final TextField _valtypeCd = new TextField( VALTYPE_CD );
- private final TextField _tvalChar = new TextField( TVAL_CHAR );
- private final TextField _observationBlob = new TextField( OBSERVATION_BLOB );
+ private final LongField _instanceNum = new LongField( INSTANCE_NUM, 5 );
+ private final TextField _conceptCd = new TextField( CONCEPT_CD, 6 );
+ private final TextField _modifierCd = new TextField( MODIFIER_CD, 7 );
+ private final TextField _valtypeCd = new TextField( VALTYPE_CD, 8 );
+ private final TextField _tvalChar = new TextField( TVAL_CHAR, 9 );
+ private final TextField _observationBlob = new TextField( OBSERVATION_BLOB, 10 );
// Per Patient
private long _patient;
@@ -154,23 +154,23 @@ final public class ObservationFactRow
* Set the concept_cd, modifier_cd, instance_num, valtype_cd, tval_char, observation_blob.
*/
@Override
- public void addToStatement( final CallableStatement statement,
+ public void addToStatement( final PreparedStatement statement,
final UmlsConcept value ) throws SQLException {
// Per Patient
- _patientNum.insertInStatement( statement, _patient );
+ _patientNum.addToStatement( statement, _patient );
// Per Document
- _providerId.insertInStatement( statement, _provider );
- _encounterNum.insertInStatement( statement, _encounter );
- _startDate.insertInStatement( statement, _start );
+ _providerId.addToStatement( statement, _provider );
+ _encounterNum.addToStatement( statement, _encounter );
+ _startDate.addToStatement( statement, _start );
// Per Row
- _instanceNum.insertInStatement( statement, _instance );
- _conceptCd.insertInStatement( statement, getConceptCode( value ) );
- _modifierCd.insertInStatement( statement, getModifierCd( value ) );
- _valtypeCd.insertInStatement( statement, getValtypeCd( value ) );
- _tvalChar.insertInStatement( statement, getTvalChar( value ) );
- _observationBlob.insertInStatement( statement, getObservationBlob( value ) );
+ _instanceNum.addToStatement( statement, _instance );
+ _conceptCd.addToStatement( statement, getConceptCode( value ) );
+ _modifierCd.addToStatement( statement, getModifierCd( value ) );
+ _valtypeCd.addToStatement( statement, getValtypeCd( value ) );
+ _tvalChar.addToStatement( statement, getTvalChar( value ) );
+ _observationBlob.addToStatement( statement, getObservationBlob( value ) );
_instance++;
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/row/JdbcRow.java Wed Apr 10 12:57:21 2019
@@ -2,13 +2,9 @@ package org.apache.ctakes.core.cc.jdbc.r
import org.apache.ctakes.core.cc.jdbc.field.JdbcField;
-import java.sql.*;
-import java.util.ArrayList;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
import java.util.Collection;
-import java.util.Comparator;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.stream.Collectors;
/**
* @author SPF , chip-nlp
@@ -19,53 +15,6 @@ public interface JdbcRow<C, P, D, E, T>
Collection<JdbcField<?>> getFields();
- default Collection<String> getFieldNames() {
- return getFields().stream()
- .sorted( Comparator.comparingInt( JdbcField::getFieldIndex ) )
- .map( JdbcField::getFieldName )
- .collect( Collectors.toList() );
- }
-
- /**
- * Attempt to get field indices using database metadata
- *
- * @param connection -
- * @param tableName -
- * @throws SQLException if something went wrong or some required fields did not exist
- */
- default void initializeFieldIndices( final Connection connection, final String tableName ) throws SQLException {
- final Collection<JdbcField<?>> fields = getFields();
- if ( fields == null ) {
- throw new SQLException( "No Fields defined for table " + tableName );
- }
- final Map<String, JdbcField<?>> fieldMap
- = fields.stream().collect( Collectors.toMap( JdbcField::getFieldName, Function.identity() ) );
- final Collection<String> assigned = new ArrayList<>( fieldMap.size() );
- final DatabaseMetaData metadata = connection.getMetaData();
- final ResultSet resultSet = metadata.getColumns( null, null, tableName, null );
- int index = 0;
- while ( resultSet.next() ) {
- index++;
- final String name = resultSet.getString( "COLUMN_NAME" );
- final JdbcField<?> field = fieldMap.get( name );
- if ( field != null ) {
- field.setFieldIndex( index );
- assigned.add( name );
- }
- }
- resultSet.close();
- if ( assigned.isEmpty() ) {
- // some drivers don't fully populate the db metadata. Try a series of statement resultset metadata.
- SELECT_1.initializeFieldIndices( connection, tableName, fieldMap );
- } else {
- fieldMap.keySet().removeAll( assigned );
- }
- if ( !fieldMap.isEmpty() ) {
- throw new SQLException( "No field indices for "
- + tableName + " : " + String.join( " , ", fieldMap.keySet() ) );
- }
- }
-
default void initializeCorpus( final C corpusValue ) {
}
@@ -78,66 +27,7 @@ public interface JdbcRow<C, P, D, E, T>
default void initializeEntity( final E entityValue ) {
}
- void addToStatement( final CallableStatement statement, final T value ) throws SQLException;
+ void addToStatement( final PreparedStatement statement, final T value ) throws SQLException;
- enum SELECT_1 {
- TOP( "SELECT TOP 1 * FROM ", "" ),
- FIRST( "SELECT FIRST 1 * FROM ", "" ),
- LIMIT( "SELECT * FROM ", " LIMIT 1" ),
- SAMPLE( "SELECT * FROM ", " SAMPLE 1" ),
- ROWNUM( "SELECT * FROM ", " WHERE ROWNUM <=1" );
- final private String _prefix;
- final private String _suffix;
-
- SELECT_1( final String prefix, final String suffix ) {
- _prefix = prefix;
- _suffix = suffix;
- }
-
- private boolean runStatement( final Connection connection,
- final String tableName,
- final Map<String, JdbcField<?>> fieldMap ) {
- final Collection<String> assigned = new ArrayList<>( fieldMap.size() );
- try {
- final Statement statement = connection.createStatement();
- final ResultSet resultSet = statement.executeQuery( _prefix + tableName + _suffix );
- final ResultSetMetaData metaData = resultSet.getMetaData();
- int index = 0;
- while ( resultSet.next() ) {
- index++;
- final String name = metaData.getColumnName( index );
- final JdbcField<?> field = fieldMap.get( name );
- if ( field != null ) {
- field.setFieldIndex( index );
- assigned.add( name );
- }
- }
- resultSet.close();
- statement.close();
- } catch ( SQLException sqlE ) {
- return false;
- }
- if ( assigned.isEmpty() ) {
- return false;
- }
- fieldMap.keySet().removeAll( assigned );
- return true;
- }
-
- static private boolean initializeFieldIndices( final Connection connection,
- final String tableName,
- final Map<String, JdbcField<?>> fieldMap ) {
- if ( fieldMap == null || fieldMap.isEmpty() ) {
- return true;
- }
- for ( SELECT_1 select1 : SELECT_1.values() ) {
- final boolean success = select1.runStatement( connection, tableName, fieldMap );
- if ( success ) {
- return true;
- }
- }
- return false;
- }
- }
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractJdbcTable.java Wed Apr 10 12:57:21 2019
@@ -2,8 +2,8 @@ package org.apache.ctakes.core.cc.jdbc.t
import javax.annotation.concurrent.NotThreadSafe;
-import java.sql.CallableStatement;
import java.sql.Connection;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
@@ -17,15 +17,14 @@ abstract public class AbstractJdbcTable<
static private final int DEFAULT_BATCH_LIMIT = 100;
private final String _tableName;
- private final CallableStatement _callableStatement;
+ private final PreparedStatement _preparedStatement;
private int _batchLimit = DEFAULT_BATCH_LIMIT;
private int _batchIndex = 0;
public AbstractJdbcTable( final Connection connection, final String tableName ) throws SQLException {
_tableName = tableName;
- initializeFieldIndices( connection, tableName );
final String sql = createRowInsertSql();
- _callableStatement = connection.prepareCall( sql );
+ _preparedStatement = connection.prepareCall( sql );
}
/**
@@ -40,8 +39,8 @@ abstract public class AbstractJdbcTable<
* {@inheritDoc}
*/
@Override
- final public CallableStatement getCallableStatement() {
- return _callableStatement;
+ final public PreparedStatement getPreparedStatement() {
+ return _preparedStatement;
}
/**
@@ -68,7 +67,7 @@ abstract public class AbstractJdbcTable<
_batchIndex++;
if ( _batchIndex >= _batchLimit ) {
_batchIndex = 0;
- getCallableStatement().executeBatch();
+ getPreparedStatement().executeBatch();
return true;
}
return false;
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractUmlsTable.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractUmlsTable.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractUmlsTable.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/AbstractUmlsTable.java Wed Apr 10 12:57:21 2019
@@ -8,8 +8,8 @@ import org.apache.ctakes.typesystem.type
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
-import java.sql.CallableStatement;
import java.sql.Connection;
+import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
@@ -68,7 +68,7 @@ abstract public class AbstractUmlsTable<
*/
@Override
final public void writeValue( final JCas value ) throws SQLException {
- final CallableStatement statement = getCallableStatement();
+ final PreparedStatement statement = getPreparedStatement();
final C corpusInitializer = getCorpusInitializer( value );
final JdbcRow<C, JCas, JCas, IdentifiedAnnotation, UmlsConcept> row = getJdbcRow();
@@ -98,7 +98,7 @@ abstract public class AbstractUmlsTable<
}
if ( !batchWritten ) {
// The current batch has not been written to db. Do so now.
- getCallableStatement().executeBatch();
+ getPreparedStatement().executeBatch();
}
}
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java?rev=1857244&r1=1857243&r2=1857244&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/jdbc/table/JdbcTable.java Wed Apr 10 12:57:21 2019
@@ -1,13 +1,16 @@
package org.apache.ctakes.core.cc.jdbc.table;
+import org.apache.ctakes.core.cc.jdbc.field.JdbcField;
import org.apache.ctakes.core.cc.jdbc.row.JdbcRow;
-import java.sql.CallableStatement;
-import java.sql.Connection;
+import java.sql.PreparedStatement;
import java.sql.SQLDataException;
import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Comparator;
+import java.util.List;
/**
* @author SPF , chip-nlp
@@ -22,21 +25,10 @@ public interface JdbcTable<T> {
JdbcRow<?, ?, ?, ?, ?> getJdbcRow();
- CallableStatement getCallableStatement();
+ PreparedStatement getPreparedStatement();
- default Collection<String> getFieldNames() {
- return getJdbcRow().getFieldNames();
- }
-
- /**
- * Attempt to get field indices
- *
- * @param connection -
- * @param tableName -
- * @throws SQLException if something went wrong or some required fields did not exist
- */
- default void initializeFieldIndices( final Connection connection, final String tableName ) throws SQLException {
- getJdbcRow().initializeFieldIndices( connection, tableName );
+ default Collection<JdbcField<?>> getFields() {
+ return getJdbcRow().getFields();
}
void writeValue( final T value ) throws SQLException;
@@ -46,15 +38,17 @@ public interface JdbcTable<T> {
* @throws SQLDataException -
*/
default String createRowInsertSql() throws SQLDataException {
- if ( getFieldNames().isEmpty() ) {
+ final List<JdbcField<?>> fields = new ArrayList<>( getFields() );
+ if ( fields.isEmpty() ) {
throw new SQLDataException( "Must set at least one Field to create an sql insert Statement" );
}
+ fields.sort( Comparator.comparingInt( JdbcField::getIndex ) );
final StringBuilder statement = new StringBuilder( "insert into" );
final StringBuilder queries = new StringBuilder();
statement.append( " " ).append( getTableName() );
statement.append( " (" );
- for ( String fieldName : getFieldNames() ) {
- statement.append( fieldName ).append( "," );
+ for ( JdbcField<?> field : fields ) {
+ statement.append( field.getName() ).append( "," );
queries.append( "?," );
}
// remove the last comma
@@ -65,7 +59,7 @@ public interface JdbcTable<T> {
}
default void close() throws SQLException {
- getCallableStatement().close();
+ getPreparedStatement().close();
}
}