@@ -115,6 +115,26 @@ enum CallableStatementGetterSetterMethod {
115
115
116
116
@ Override
117
117
public void registerOutParameter (int index , int sqlType ) throws SQLServerException {
118
+ // Register output parameter by index
119
+ isSetByIndex = true ;
120
+ if (!connection .getUseFlexibleCallableStatements () && isSetByName && isSetByIndex ) {
121
+ SQLServerException .makeFromDriverError (connection , this ,
122
+ SQLServerException .getErrString ("R_noNamedAndIndexedParameters" ), null , false );
123
+ }
124
+ registerOutputParameter (index , sqlType );
125
+ }
126
+
127
+ private void registerOutParameterByName (int index , int sqlType ) throws SQLServerException {
128
+ // Register output parameter by name -- findColumn() sets the 'setByName' flag
129
+ registerOutputParameter (index , sqlType );
130
+ }
131
+
132
+ void registerOutParameterNonPLP (int index , int sqlType ) throws SQLServerException {
133
+ registerOutParameter (index , sqlType );
134
+ inOutParam [index - 1 ].isNonPLP = true ;
135
+ }
136
+
137
+ private void registerOutputParameter (int index , int sqlType ) throws SQLServerException {
118
138
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
119
139
loggerExternal .entering (getClassNameLogging (), "registerOutParameter" , new Object [] {index , sqlType });
120
140
checkClosed ();
@@ -171,11 +191,6 @@ public void registerOutParameter(int index, int sqlType) throws SQLServerExcepti
171
191
loggerExternal .exiting (getClassNameLogging (), "registerOutParameter" );
172
192
}
173
193
174
- void registerOutParameterNonPLP (int index , int sqlType ) throws SQLServerException {
175
- registerOutParameter (index , sqlType );
176
- inOutParam [index - 1 ].isNonPLP = true ;
177
- }
178
-
179
194
/**
180
195
* Locate any output parameter values returned from the procedure call
181
196
*/
@@ -542,6 +557,7 @@ private Object getSQLXMLInternal(int parameterIndex) throws SQLServerException {
542
557
543
558
@ Override
544
559
public int getInt (int index ) throws SQLServerException {
560
+ setByIndex ();
545
561
loggerExternal .entering (getClassNameLogging (), "getInt" , index );
546
562
checkClosed ();
547
563
Integer value = (Integer ) getValue (index , JDBCType .INTEGER );
@@ -561,6 +577,7 @@ public int getInt(String parameterName) throws SQLServerException {
561
577
562
578
@ Override
563
579
public String getString (int index ) throws SQLServerException {
580
+ setByIndex ();
564
581
loggerExternal .entering (getClassNameLogging (), "getString" , index );
565
582
checkClosed ();
566
583
String value = null ;
@@ -588,6 +605,7 @@ public String getString(String parameterName) throws SQLServerException {
588
605
589
606
@ Override
590
607
public final String getNString (int parameterIndex ) throws SQLException {
608
+ setByIndex ();
591
609
loggerExternal .entering (getClassNameLogging (), "getNString" , parameterIndex );
592
610
checkClosed ();
593
611
String value = (String ) getValue (parameterIndex , JDBCType .NCHAR );
@@ -611,6 +629,7 @@ public final String getNString(String parameterName) throws SQLException {
611
629
@ Deprecated (since = "6.5.4" )
612
630
@ Override
613
631
public BigDecimal getBigDecimal (int parameterIndex , int scale ) throws SQLException {
632
+ setByIndex ();
614
633
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
615
634
loggerExternal .entering (getClassNameLogging (), "getBigDecimal" , new Object [] {parameterIndex , scale });
616
635
checkClosed ();
@@ -640,6 +659,7 @@ public BigDecimal getBigDecimal(String parameterName, int scale) throws SQLServe
640
659
641
660
@ Override
642
661
public boolean getBoolean (int index ) throws SQLServerException {
662
+ setByIndex ();
643
663
loggerExternal .entering (getClassNameLogging (), "getBoolean" , index );
644
664
checkClosed ();
645
665
Boolean value = (Boolean ) getValue (index , JDBCType .BIT );
@@ -659,6 +679,7 @@ public boolean getBoolean(String parameterName) throws SQLServerException {
659
679
660
680
@ Override
661
681
public byte getByte (int index ) throws SQLServerException {
682
+ setByIndex ();
662
683
loggerExternal .entering (getClassNameLogging (), "getByte" , index );
663
684
checkClosed ();
664
685
Short shortValue = (Short ) getValue (index , JDBCType .TINYINT );
@@ -680,6 +701,7 @@ public byte getByte(String parameterName) throws SQLServerException {
680
701
681
702
@ Override
682
703
public byte [] getBytes (int index ) throws SQLServerException {
704
+ setByIndex ();
683
705
loggerExternal .entering (getClassNameLogging (), "getBytes" , index );
684
706
checkClosed ();
685
707
byte [] value = (byte []) getValue (index , JDBCType .BINARY );
@@ -699,6 +721,7 @@ public byte[] getBytes(String parameterName) throws SQLServerException {
699
721
700
722
@ Override
701
723
public Date getDate (int index ) throws SQLServerException {
724
+ setByIndex ();
702
725
loggerExternal .entering (getClassNameLogging (), "getDate" , index );
703
726
checkClosed ();
704
727
java .sql .Date value = (java .sql .Date ) getValue (index , JDBCType .DATE );
@@ -718,6 +741,7 @@ public Date getDate(String parameterName) throws SQLServerException {
718
741
719
742
@ Override
720
743
public Date getDate (int index , Calendar cal ) throws SQLServerException {
744
+ setByIndex ();
721
745
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
722
746
loggerExternal .entering (getClassNameLogging (), "getDate" , new Object [] {index , cal });
723
747
checkClosed ();
@@ -739,6 +763,7 @@ public Date getDate(String parameterName, Calendar cal) throws SQLServerExceptio
739
763
740
764
@ Override
741
765
public double getDouble (int index ) throws SQLServerException {
766
+ setByIndex ();
742
767
loggerExternal .entering (getClassNameLogging (), "getDouble" , index );
743
768
checkClosed ();
744
769
Double value = (Double ) getValue (index , JDBCType .DOUBLE );
@@ -758,6 +783,7 @@ public double getDouble(String parameterName) throws SQLServerException {
758
783
759
784
@ Override
760
785
public float getFloat (int index ) throws SQLServerException {
786
+ setByIndex ();
761
787
loggerExternal .entering (getClassNameLogging (), "getFloat" , index );
762
788
checkClosed ();
763
789
Float value = (Float ) getValue (index , JDBCType .REAL );
@@ -777,7 +803,7 @@ public float getFloat(String parameterName) throws SQLServerException {
777
803
778
804
@ Override
779
805
public long getLong (int index ) throws SQLServerException {
780
-
806
+ setByIndex ();
781
807
loggerExternal .entering (getClassNameLogging (), "getLong" , index );
782
808
checkClosed ();
783
809
Long value = (Long ) getValue (index , JDBCType .BIGINT );
@@ -797,7 +823,7 @@ public long getLong(String parameterName) throws SQLServerException {
797
823
798
824
@ Override
799
825
public Object getObject (int index ) throws SQLServerException {
800
-
826
+ setByIndex ();
801
827
loggerExternal .entering (getClassNameLogging (), "getObject" , index );
802
828
checkClosed ();
803
829
Object value = getValue (index ,
@@ -809,6 +835,7 @@ public Object getObject(int index) throws SQLServerException {
809
835
810
836
@ Override
811
837
public <T > T getObject (int index , Class <T > type ) throws SQLException {
838
+ setByIndex ();
812
839
loggerExternal .entering (getClassNameLogging (), "getObject" , index );
813
840
checkClosed ();
814
841
Object returnValue ;
@@ -923,6 +950,7 @@ public <T> T getObject(String parameterName, Class<T> type) throws SQLException
923
950
924
951
@ Override
925
952
public short getShort (int index ) throws SQLServerException {
953
+ setByIndex ();
926
954
loggerExternal .entering (getClassNameLogging (), "getShort" , index );
927
955
checkClosed ();
928
956
Short value = (Short ) getValue (index , JDBCType .SMALLINT );
@@ -942,7 +970,7 @@ public short getShort(String parameterName) throws SQLServerException {
942
970
943
971
@ Override
944
972
public Time getTime (int index ) throws SQLServerException {
945
-
973
+ setByIndex ();
946
974
loggerExternal .entering (getClassNameLogging (), "getTime" , index );
947
975
checkClosed ();
948
976
java .sql .Time value = (java .sql .Time ) getValue (index , JDBCType .TIME );
@@ -962,6 +990,7 @@ public Time getTime(String parameterName) throws SQLServerException {
962
990
963
991
@ Override
964
992
public Time getTime (int index , Calendar cal ) throws SQLServerException {
993
+ setByIndex ();
965
994
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
966
995
loggerExternal .entering (getClassNameLogging (), "getTime" , new Object [] {index , cal });
967
996
checkClosed ();
@@ -983,6 +1012,7 @@ public Time getTime(String parameterName, Calendar cal) throws SQLServerExceptio
983
1012
984
1013
@ Override
985
1014
public Timestamp getTimestamp (int index ) throws SQLServerException {
1015
+ setByIndex ();
986
1016
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
987
1017
loggerExternal .entering (getClassNameLogging (), GET_TIMESTAMP , index );
988
1018
checkClosed ();
@@ -1003,6 +1033,7 @@ public Timestamp getTimestamp(String parameterName) throws SQLServerException {
1003
1033
1004
1034
@ Override
1005
1035
public Timestamp getTimestamp (int index , Calendar cal ) throws SQLServerException {
1036
+ setByIndex ();
1006
1037
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
1007
1038
loggerExternal .entering (getClassNameLogging (), GET_TIMESTAMP , new Object [] {index , cal });
1008
1039
checkClosed ();
@@ -1024,6 +1055,7 @@ public Timestamp getTimestamp(String parameterName, Calendar cal) throws SQLServ
1024
1055
}
1025
1056
1026
1057
LocalDateTime getLocalDateTime (int columnIndex ) throws SQLServerException {
1058
+ setByIndex ();
1027
1059
loggerExternal .entering (getClassNameLogging (), "getLocalDateTime" , columnIndex );
1028
1060
checkClosed ();
1029
1061
LocalDateTime value = (LocalDateTime ) getValue (columnIndex , JDBCType .LOCALDATETIME );
@@ -1033,6 +1065,7 @@ LocalDateTime getLocalDateTime(int columnIndex) throws SQLServerException {
1033
1065
1034
1066
@ Override
1035
1067
public Timestamp getDateTime (int index ) throws SQLServerException {
1068
+ setByIndex ();
1036
1069
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
1037
1070
loggerExternal .entering (getClassNameLogging (), "getDateTime" , index );
1038
1071
checkClosed ();
@@ -1053,6 +1086,7 @@ public Timestamp getDateTime(String parameterName) throws SQLServerException {
1053
1086
1054
1087
@ Override
1055
1088
public Timestamp getDateTime (int index , Calendar cal ) throws SQLServerException {
1089
+ setByIndex ();
1056
1090
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
1057
1091
loggerExternal .entering (getClassNameLogging (), "getDateTime" , new Object [] {index , cal });
1058
1092
checkClosed ();
@@ -1075,6 +1109,7 @@ public Timestamp getDateTime(String parameterName, Calendar cal) throws SQLServe
1075
1109
1076
1110
@ Override
1077
1111
public Timestamp getSmallDateTime (int index ) throws SQLServerException {
1112
+ setByIndex ();
1078
1113
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
1079
1114
loggerExternal .entering (getClassNameLogging (), "getSmallDateTime" , index );
1080
1115
checkClosed ();
@@ -1096,6 +1131,7 @@ public Timestamp getSmallDateTime(String parameterName) throws SQLServerExceptio
1096
1131
1097
1132
@ Override
1098
1133
public Timestamp getSmallDateTime (int index , Calendar cal ) throws SQLServerException {
1134
+ setByIndex ();
1099
1135
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
1100
1136
loggerExternal .entering (getClassNameLogging (), "getSmallDateTime" , new Object [] {index , cal });
1101
1137
checkClosed ();
@@ -1118,6 +1154,7 @@ public Timestamp getSmallDateTime(String parameterName, Calendar cal) throws SQL
1118
1154
1119
1155
@ Override
1120
1156
public microsoft .sql .DateTimeOffset getDateTimeOffset (int index ) throws SQLServerException {
1157
+ setByIndex ();
1121
1158
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
1122
1159
loggerExternal .entering (getClassNameLogging (), "getDateTimeOffset" , index );
1123
1160
checkClosed ();
@@ -1163,6 +1200,7 @@ public boolean wasNull() throws SQLServerException {
1163
1200
1164
1201
@ Override
1165
1202
public final java .io .InputStream getAsciiStream (int parameterIndex ) throws SQLServerException {
1203
+ setByIndex ();
1166
1204
loggerExternal .entering (getClassNameLogging (), "getAsciiStream" , parameterIndex );
1167
1205
checkClosed ();
1168
1206
InputStream value = (InputStream ) getStream (parameterIndex , StreamType .ASCII );
@@ -1182,6 +1220,7 @@ public final java.io.InputStream getAsciiStream(String parameterName) throws SQL
1182
1220
1183
1221
@ Override
1184
1222
public BigDecimal getBigDecimal (int parameterIndex ) throws SQLServerException {
1223
+ setByIndex ();
1185
1224
loggerExternal .entering (getClassNameLogging (), "getBigDecimal" , parameterIndex );
1186
1225
checkClosed ();
1187
1226
BigDecimal value = (BigDecimal ) getValue (parameterIndex , JDBCType .DECIMAL );
@@ -1201,6 +1240,7 @@ public BigDecimal getBigDecimal(String parameterName) throws SQLServerException
1201
1240
1202
1241
@ Override
1203
1242
public BigDecimal getMoney (int parameterIndex ) throws SQLServerException {
1243
+ setByIndex ();
1204
1244
loggerExternal .entering (getClassNameLogging (), "getMoney" , parameterIndex );
1205
1245
checkClosed ();
1206
1246
BigDecimal value = (BigDecimal ) getValue (parameterIndex , JDBCType .MONEY );
@@ -1220,6 +1260,7 @@ public BigDecimal getMoney(String parameterName) throws SQLServerException {
1220
1260
1221
1261
@ Override
1222
1262
public BigDecimal getSmallMoney (int parameterIndex ) throws SQLServerException {
1263
+ setByIndex ();
1223
1264
loggerExternal .entering (getClassNameLogging (), "getSmallMoney" , parameterIndex );
1224
1265
checkClosed ();
1225
1266
BigDecimal value = (BigDecimal ) getValue (parameterIndex , JDBCType .SMALLMONEY );
@@ -1239,6 +1280,7 @@ public BigDecimal getSmallMoney(String parameterName) throws SQLServerException
1239
1280
1240
1281
@ Override
1241
1282
public final java .io .InputStream getBinaryStream (int parameterIndex ) throws SQLServerException {
1283
+ setByIndex ();
1242
1284
loggerExternal .entering (getClassNameLogging (), "getBinaryStream" , parameterIndex );
1243
1285
checkClosed ();
1244
1286
InputStream value = (InputStream ) getStream (parameterIndex , StreamType .BINARY );
@@ -1258,6 +1300,7 @@ public final java.io.InputStream getBinaryStream(String parameterName) throws SQ
1258
1300
1259
1301
@ Override
1260
1302
public Blob getBlob (int parameterIndex ) throws SQLServerException {
1303
+ setByIndex ();
1261
1304
loggerExternal .entering (getClassNameLogging (), "getBlob" , parameterIndex );
1262
1305
checkClosed ();
1263
1306
Blob value = (Blob ) getValue (parameterIndex , JDBCType .BLOB );
@@ -1277,6 +1320,7 @@ public Blob getBlob(String parameterName) throws SQLServerException {
1277
1320
1278
1321
@ Override
1279
1322
public final java .io .Reader getCharacterStream (int parameterIndex ) throws SQLServerException {
1323
+ setByIndex ();
1280
1324
loggerExternal .entering (getClassNameLogging (), "getCharacterStream" , parameterIndex );
1281
1325
checkClosed ();
1282
1326
Reader reader = (Reader ) getStream (parameterIndex , StreamType .CHARACTER );
@@ -1296,6 +1340,7 @@ public final java.io.Reader getCharacterStream(String parameterName) throws SQLE
1296
1340
1297
1341
@ Override
1298
1342
public final java .io .Reader getNCharacterStream (int parameterIndex ) throws SQLException {
1343
+ setByIndex ();
1299
1344
loggerExternal .entering (getClassNameLogging (), "getNCharacterStream" , parameterIndex );
1300
1345
checkClosed ();
1301
1346
Reader reader = (Reader ) getStream (parameterIndex , StreamType .NCHARACTER );
@@ -1327,6 +1372,7 @@ void closeActiveStream() throws SQLServerException {
1327
1372
1328
1373
@ Override
1329
1374
public Clob getClob (int parameterIndex ) throws SQLServerException {
1375
+ setByIndex ();
1330
1376
loggerExternal .entering (getClassNameLogging (), "getClob" , parameterIndex );
1331
1377
checkClosed ();
1332
1378
Clob clob = (Clob ) getValue (parameterIndex , JDBCType .CLOB );
@@ -1346,6 +1392,7 @@ public Clob getClob(String parameterName) throws SQLServerException {
1346
1392
1347
1393
@ Override
1348
1394
public NClob getNClob (int parameterIndex ) throws SQLException {
1395
+ setByIndex ();
1349
1396
loggerExternal .entering (getClassNameLogging (), "getNClob" , parameterIndex );
1350
1397
checkClosed ();
1351
1398
NClob nClob = (NClob ) getValue (parameterIndex , JDBCType .NCLOB );
@@ -2455,6 +2502,7 @@ public final void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLEx
2455
2502
2456
2503
@ Override
2457
2504
public final SQLXML getSQLXML (int parameterIndex ) throws SQLException {
2505
+ setByIndex ();
2458
2506
loggerExternal .entering (getClassNameLogging (), "getSQLXML" , parameterIndex );
2459
2507
checkClosed ();
2460
2508
SQLServerSQLXML value = (SQLServerSQLXML ) getSQLXMLInternal (parameterIndex );
@@ -2495,8 +2543,11 @@ public void registerOutParameter(String parameterName, int sqlType, String typeN
2495
2543
loggerExternal .entering (getClassNameLogging (), "registerOutParameter" ,
2496
2544
new Object [] {parameterName , sqlType , typeName });
2497
2545
checkClosed ();
2498
- registerOutParameter (findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD ), sqlType ,
2499
- typeName );
2546
+
2547
+ int index = findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD );
2548
+
2549
+ registerOutParameterByName (index , sqlType );
2550
+
2500
2551
loggerExternal .exiting (getClassNameLogging (), "registerOutParameter" );
2501
2552
}
2502
2553
@@ -2506,8 +2557,12 @@ public void registerOutParameter(String parameterName, int sqlType, int scale) t
2506
2557
loggerExternal .entering (getClassNameLogging (), "registerOutParameter" ,
2507
2558
new Object [] {parameterName , sqlType , scale });
2508
2559
checkClosed ();
2509
- registerOutParameter (findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD ), sqlType ,
2510
- scale );
2560
+
2561
+ int index = findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD );
2562
+
2563
+ registerOutParameterByName (index , sqlType );
2564
+ inOutParam [index - 1 ].setOutScale (scale );
2565
+
2511
2566
loggerExternal .exiting (getClassNameLogging (), "registerOutParameter" );
2512
2567
}
2513
2568
@@ -2516,10 +2571,15 @@ public void registerOutParameter(String parameterName, int sqlType, int precisio
2516
2571
int scale ) throws SQLServerException {
2517
2572
if (loggerExternal .isLoggable (java .util .logging .Level .FINER ))
2518
2573
loggerExternal .entering (getClassNameLogging (), "registerOutParameter" ,
2519
- new Object [] {parameterName , sqlType , scale });
2574
+ new Object [] {parameterName , sqlType , scale , precision });
2520
2575
checkClosed ();
2521
- registerOutParameter (findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD ), sqlType ,
2522
- precision , scale );
2576
+
2577
+ int index = findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD );
2578
+
2579
+ registerOutParameterByName (index , sqlType );
2580
+ inOutParam [index - 1 ].setValueLength (precision );
2581
+ inOutParam [index - 1 ].setOutScale (scale );
2582
+
2523
2583
loggerExternal .exiting (getClassNameLogging (), "registerOutParameter" );
2524
2584
}
2525
2585
@@ -2529,7 +2589,7 @@ public void registerOutParameter(String parameterName, int sqlType) throws SQLSe
2529
2589
loggerExternal .entering (getClassNameLogging (), "registerOutParameter" ,
2530
2590
new Object [] {parameterName , sqlType });
2531
2591
checkClosed ();
2532
- registerOutParameter (findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD ), sqlType );
2592
+ registerOutParameterByName (findColumn (parameterName , CallableStatementGetterSetterMethod .IS_SETTER_METHOD ), sqlType );
2533
2593
loggerExternal .exiting (getClassNameLogging (), "registerOutParameter" );
2534
2594
}
2535
2595
0 commit comments