File tree 3 files changed +49
-4
lines changed
3 files changed +49
-4
lines changed Original file line number Diff line number Diff line change @@ -140,4 +140,10 @@ protected void notifyFirstStatementExecuted() {
140
140
}
141
141
142
142
public abstract ResultSet executeQuery (String sql , boolean closeStmt ) throws SQLException ;
143
+
144
+ protected void checkIndex (int index ) throws SQLException {
145
+ if (index < 1 || index > batch .length ) {
146
+ throw new SQLException ("Parameter index is invalid" );
147
+ }
148
+ }
143
149
}
Original file line number Diff line number Diff line change 10
10
import java .sql .Blob ;
11
11
import java .sql .Clob ;
12
12
import java .sql .Date ;
13
+ import java .sql .JDBCType ;
13
14
import java .sql .ParameterMetaData ;
14
15
import java .sql .Ref ;
15
16
import java .sql .ResultSet ;
@@ -154,13 +155,29 @@ public String getParameterClassName(int param) throws SQLException {
154
155
}
155
156
156
157
/** @see java.sql.ParameterMetaData#getParameterTypeName(int) */
157
- public String getParameterTypeName (int pos ) {
158
- return "VARCHAR" ;
158
+ public String getParameterTypeName (int pos ) throws SQLException {
159
+ checkIndex (pos );
160
+ return JDBCType .valueOf (getParameterType (pos )).getName ();
159
161
}
160
162
161
163
/** @see java.sql.ParameterMetaData#getParameterType(int) */
162
- public int getParameterType (int pos ) {
163
- return Types .VARCHAR ;
164
+ public int getParameterType (int pos ) throws SQLException {
165
+ checkIndex (pos );
166
+ Object paramValue = batch [pos - 1 ];
167
+
168
+ if (paramValue == null ) {
169
+ return Types .NULL ;
170
+ } else if (paramValue instanceof Integer
171
+ || paramValue instanceof Short
172
+ || paramValue instanceof Boolean ) {
173
+ return Types .INTEGER ;
174
+ } else if (paramValue instanceof Long ) {
175
+ return Types .BIGINT ;
176
+ } else if (paramValue instanceof Double || paramValue instanceof Float ) {
177
+ return Types .REAL ;
178
+ } else {
179
+ return Types .VARCHAR ;
180
+ }
164
181
}
165
182
166
183
/** @see java.sql.ParameterMetaData#getParameterMode(int) */
Original file line number Diff line number Diff line change @@ -777,4 +777,26 @@ public void gh811_getMetadata_before_execution() throws SQLException {
777
777
assertThat (meta .getColumnClassName (1 )).isEqualTo ("java.lang.Object" );
778
778
}
779
779
}
780
+
781
+ @ Test
782
+ public void getParameterTypeTest () throws SQLException {
783
+ stat .executeUpdate ("create table t_int(i INT)" );
784
+
785
+ try (PreparedStatement ps = conn .prepareStatement ("INSERT INTO t_int VALUES(?)" )) {
786
+ ps .setLong (1 , 100 );
787
+ assertThat (ps .getParameterMetaData ().getParameterType (1 )).isEqualTo (Types .BIGINT );
788
+ assertThat (ps .getParameterMetaData ().getParameterTypeName (1 )).isEqualTo ("BIGINT" );
789
+ }
790
+
791
+ stat .executeUpdate ("create table t_real(a REAL, b REAL)" );
792
+
793
+ try (PreparedStatement ps = conn .prepareStatement ("INSERT INTO t_real VALUES(?, ?)" )) {
794
+ ps .setDouble (1 , 100.0 );
795
+ ps .setFloat (2 , 100.0f );
796
+ assertThat (ps .getParameterMetaData ().getParameterType (1 )).isEqualTo (Types .REAL );
797
+ assertThat (ps .getParameterMetaData ().getParameterTypeName (1 )).isEqualTo ("REAL" );
798
+ assertThat (ps .getParameterMetaData ().getParameterType (2 )).isEqualTo (Types .REAL );
799
+ assertThat (ps .getParameterMetaData ().getParameterTypeName (2 )).isEqualTo ("REAL" );
800
+ }
801
+ }
780
802
}
You can’t perform that action at this time.
0 commit comments