001 package com.mockrunner.mock.jdbc; 002 003 import java.io.ByteArrayInputStream; 004 import java.io.InputStream; 005 import java.io.Reader; 006 import java.io.StringReader; 007 import java.io.UnsupportedEncodingException; 008 import java.math.BigDecimal; 009 import java.net.MalformedURLException; 010 import java.net.URL; 011 import java.sql.Array; 012 import java.sql.Blob; 013 import java.sql.CallableStatement; 014 import java.sql.Clob; 015 import java.sql.Connection; 016 import java.sql.Date; 017 import java.sql.NClob; 018 import java.sql.Ref; 019 import java.sql.ResultSet; 020 import java.sql.RowId; 021 import java.sql.SQLException; 022 import java.sql.SQLXML; 023 import java.sql.Time; 024 import java.sql.Timestamp; 025 import java.util.ArrayList; 026 import java.util.Calendar; 027 import java.util.Collections; 028 import java.util.HashMap; 029 import java.util.HashSet; 030 import java.util.Iterator; 031 import java.util.List; 032 import java.util.Map; 033 import java.util.Set; 034 035 import com.mockrunner.base.NestedApplicationException; 036 import com.mockrunner.jdbc.AbstractOutParameterResultSetHandler; 037 import com.mockrunner.util.common.StreamUtil; 038 039 /** 040 * Mock implementation of <code>CallableStatement</code>. 041 */ 042 public class MockCallableStatement extends MockPreparedStatement implements CallableStatement 043 { 044 private AbstractOutParameterResultSetHandler resultSetHandler; 045 private Map paramObjects = new HashMap(); 046 private Set registeredOutParameterSetIndexed = new HashSet(); 047 private Set registeredOutParameterSetNamed = new HashSet(); 048 private List batchParameters = new ArrayList(); 049 private Map lastOutParameters = null; 050 private boolean wasNull = false; 051 052 public MockCallableStatement(Connection connection, String sql) 053 { 054 super(connection, sql); 055 } 056 057 public MockCallableStatement(Connection connection, String sql, int resultSetType, int resultSetConcurrency) 058 { 059 super(connection, sql, resultSetType, resultSetConcurrency); 060 } 061 062 public MockCallableStatement(Connection connection, String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) 063 { 064 super(connection, sql, resultSetType, resultSetConcurrency, resultSetHoldability); 065 } 066 067 public void setCallableStatementResultSetHandler(AbstractOutParameterResultSetHandler resultSetHandler) 068 { 069 super.setPreparedStatementResultSetHandler(resultSetHandler); 070 this.resultSetHandler = resultSetHandler; 071 } 072 073 public Map getNamedParameterMap() 074 { 075 return Collections.unmodifiableMap(paramObjects); 076 } 077 078 public Map getParameterMap() 079 { 080 Map parameterMap = new HashMap(getIndexedParameterMap()); 081 parameterMap.putAll(getNamedParameterMap()); 082 return Collections.unmodifiableMap(parameterMap); 083 } 084 085 public Object getParameter(String name) 086 { 087 return paramObjects.get(name); 088 } 089 090 public void clearParameters() throws SQLException 091 { 092 super.clearParameters(); 093 paramObjects.clear(); 094 } 095 096 public Set getNamedRegisteredOutParameterSet() 097 { 098 return Collections.unmodifiableSet(registeredOutParameterSetNamed); 099 } 100 101 public boolean isOutParameterRegistered(int index) 102 { 103 return registeredOutParameterSetIndexed.contains(new Integer(index)); 104 } 105 106 public Set getIndexedRegisteredOutParameterSet() 107 { 108 return Collections.unmodifiableSet(registeredOutParameterSetIndexed); 109 } 110 111 public boolean isOutParameterRegistered(String parameterName) 112 { 113 return registeredOutParameterSetNamed.contains(parameterName); 114 } 115 116 public void clearRegisteredOutParameter() 117 { 118 registeredOutParameterSetIndexed.clear(); 119 registeredOutParameterSetNamed.clear(); 120 } 121 122 public ResultSet executeQuery() throws SQLException 123 { 124 ResultSet resultSet = executeQuery(getParameterMap()); 125 lastOutParameters = getOutParameterMap(); 126 return resultSet; 127 } 128 129 public int executeUpdate() throws SQLException 130 { 131 int updateCount = executeUpdate(getParameterMap()); 132 lastOutParameters = getOutParameterMap(); 133 return updateCount; 134 } 135 136 public void addBatch() throws SQLException 137 { 138 batchParameters.add(new HashMap(getParameterMap())); 139 } 140 141 public int[] executeBatch() throws SQLException 142 { 143 return executeBatch(batchParameters); 144 } 145 146 public void registerOutParameter(int parameterIndex, int sqlType) throws SQLException 147 { 148 registeredOutParameterSetIndexed.add(new Integer(parameterIndex)); 149 } 150 151 public void registerOutParameter(int parameterIndex, int sqlType, int scale) throws SQLException 152 { 153 registerOutParameter(parameterIndex, sqlType); 154 } 155 156 public void registerOutParameter(int parameterIndex, int sqlType, String typeName) throws SQLException 157 { 158 registerOutParameter(parameterIndex, sqlType); 159 } 160 161 public void registerOutParameter(String parameterName, int sqlType) throws SQLException 162 { 163 registeredOutParameterSetNamed.add(parameterName); 164 } 165 166 public void registerOutParameter(String parameterName, int sqlType, int scale) throws SQLException 167 { 168 registerOutParameter(parameterName, sqlType); 169 } 170 171 public void registerOutParameter(String parameterName, int sqlType, String typeName) throws SQLException 172 { 173 registerOutParameter(parameterName, sqlType); 174 } 175 176 public boolean wasNull() throws SQLException 177 { 178 return wasNull; 179 } 180 181 public Object getObject(int parameterIndex) throws SQLException 182 { 183 wasNull = false; 184 Object returnValue = null; 185 if(null != lastOutParameters) 186 { 187 returnValue = lastOutParameters.get(new Integer(parameterIndex)); 188 } 189 if(null == returnValue) wasNull = true; 190 return returnValue; 191 } 192 193 public Object getObject(int parameterIndex, Map map) throws SQLException 194 { 195 return getObject(parameterIndex); 196 } 197 198 public byte getByte(int parameterIndex) throws SQLException 199 { 200 Object value = getObject(parameterIndex); 201 if(null != value) 202 { 203 if(value instanceof Number) return ((Number)value).byteValue(); 204 return new Byte(value.toString()).byteValue(); 205 } 206 return 0; 207 } 208 209 public double getDouble(int parameterIndex) throws SQLException 210 { 211 Object value = getObject(parameterIndex); 212 if(null != value) 213 { 214 if(value instanceof Number) return ((Number)value).doubleValue(); 215 return new Double(value.toString()).doubleValue(); 216 } 217 return 0; 218 } 219 220 public float getFloat(int parameterIndex) throws SQLException 221 { 222 Object value = getObject(parameterIndex); 223 if(null != value) 224 { 225 if(value instanceof Number) return ((Number)value).floatValue(); 226 return new Float(value.toString()).floatValue(); 227 } 228 return 0; 229 } 230 231 public int getInt(int parameterIndex) throws SQLException 232 { 233 Object value = getObject(parameterIndex); 234 if(null != value) 235 { 236 if(value instanceof Number) return ((Number)value).intValue(); 237 return new Integer(value.toString()).intValue(); 238 } 239 return 0; 240 } 241 242 public long getLong(int parameterIndex) throws SQLException 243 { 244 Object value = getObject(parameterIndex); 245 if(null != value) 246 { 247 if(value instanceof Number) return ((Number)value).longValue(); 248 return new Long(value.toString()).longValue(); 249 } 250 return 0; 251 } 252 253 public short getShort(int parameterIndex) throws SQLException 254 { 255 Object value = getObject(parameterIndex); 256 if(null != value) 257 { 258 if(value instanceof Number) return ((Number)value).shortValue(); 259 return new Short(value.toString()).shortValue(); 260 } 261 return 0; 262 } 263 264 public boolean getBoolean(int parameterIndex) throws SQLException 265 { 266 Object value = getObject(parameterIndex); 267 if(null != value) 268 { 269 if(value instanceof Boolean) return ((Boolean)value).booleanValue(); 270 return new Boolean(value.toString()).booleanValue(); 271 } 272 return false; 273 } 274 275 public byte[] getBytes(int parameterIndex) throws SQLException 276 { 277 Object value = getObject(parameterIndex); 278 if(null != value) 279 { 280 if(value instanceof byte[]) return (byte[])value; 281 try 282 { 283 return value.toString().getBytes("ISO-8859-1"); 284 } 285 catch(UnsupportedEncodingException exc) 286 { 287 throw new NestedApplicationException(exc); 288 } 289 } 290 return null; 291 } 292 293 public String getString(int parameterIndex) throws SQLException 294 { 295 Object value = getObject(parameterIndex); 296 if(null != value) return value.toString(); 297 return null; 298 } 299 300 public String getNString(int parameterIndex) throws SQLException 301 { 302 return getString(parameterIndex); 303 } 304 305 public BigDecimal getBigDecimal(int parameterIndex) throws SQLException 306 { 307 Object value = getObject(parameterIndex); 308 if(null != value) 309 { 310 if(value instanceof Number) return new BigDecimal(((Number)value).doubleValue()); 311 return new BigDecimal(value.toString()); 312 } 313 return null; 314 } 315 316 public BigDecimal getBigDecimal(int parameterIndex, int scale) throws SQLException 317 { 318 return getBigDecimal(parameterIndex); 319 } 320 321 public URL getURL(int parameterIndex) throws SQLException 322 { 323 Object value = getObject(parameterIndex); 324 if(null != value) 325 { 326 if(value instanceof URL) return (URL)value; 327 try 328 { 329 return new URL(value.toString()); 330 } 331 catch(MalformedURLException exc) 332 { 333 334 } 335 } 336 return null; 337 } 338 339 public Array getArray(int parameterIndex) throws SQLException 340 { 341 Object value = getObject(parameterIndex); 342 if(null != value) 343 { 344 if(value instanceof Array) return (Array)value; 345 return new MockArray(value); 346 } 347 return null; 348 } 349 350 public Blob getBlob(int parameterIndex) throws SQLException 351 { 352 Object value = getObject(parameterIndex); 353 if(null != value) 354 { 355 if(value instanceof Blob) return (Blob)value; 356 return new MockBlob(getBytes(parameterIndex)); 357 } 358 return null; 359 } 360 361 public Clob getClob(int parameterIndex) throws SQLException 362 { 363 Object value = getObject(parameterIndex); 364 if(null != value) 365 { 366 if(value instanceof Clob) return (Clob)value; 367 return new MockClob(getString(parameterIndex)); 368 } 369 return null; 370 } 371 372 public NClob getNClob(int parameterIndex) throws SQLException 373 { 374 Object value = getObject(parameterIndex); 375 if(null != value) 376 { 377 if(value instanceof NClob) return (NClob)value; 378 if(value instanceof Clob) return getNClobFromClob((Clob)value); 379 return new MockNClob(getString(parameterIndex)); 380 } 381 return null; 382 } 383 384 public SQLXML getSQLXML(int parameterIndex) throws SQLException 385 { 386 Object value = getObject(parameterIndex); 387 if(null != value) 388 { 389 if(value instanceof SQLXML) return (SQLXML)value; 390 return new MockSQLXML(getString(parameterIndex)); 391 } 392 return null; 393 } 394 395 public Reader getCharacterStream(int parameterIndex) throws SQLException 396 { 397 Object value = getObject(parameterIndex); 398 if(null != value) 399 { 400 if(value instanceof Reader) return (Reader)value; 401 return new StringReader(getString(parameterIndex)); 402 } 403 return null; 404 } 405 406 public Reader getNCharacterStream(int parameterIndex) throws SQLException 407 { 408 return getCharacterStream(parameterIndex); 409 } 410 411 public Date getDate(int parameterIndex) throws SQLException 412 { 413 Object value = getObject(parameterIndex); 414 if(null != value) 415 { 416 if(value instanceof Date) return (Date)value; 417 return Date.valueOf(value.toString()); 418 } 419 return null; 420 } 421 422 public Date getDate(int parameterIndex, Calendar calendar) throws SQLException 423 { 424 return getDate(parameterIndex); 425 } 426 427 public Ref getRef(int parameterIndex) throws SQLException 428 { 429 Object value = getObject(parameterIndex); 430 if(null != value) 431 { 432 if(value instanceof Ref) return (Ref)value; 433 return new MockRef(value); 434 } 435 return null; 436 } 437 438 public Time getTime(int parameterIndex) throws SQLException 439 { 440 Object value = getObject(parameterIndex); 441 if(null != value) 442 { 443 if(value instanceof Time) return (Time)value; 444 return Time.valueOf(value.toString()); 445 } 446 return null; 447 } 448 449 public Time getTime(int parameterIndex, Calendar calendar) throws SQLException 450 { 451 return getTime(parameterIndex); 452 } 453 454 public Timestamp getTimestamp(int parameterIndex) throws SQLException 455 { 456 Object value = getObject(parameterIndex); 457 if(null != value) 458 { 459 if(value instanceof Timestamp) return (Timestamp)value; 460 return Timestamp.valueOf(value.toString()); 461 } 462 return null; 463 } 464 465 public Timestamp getTimestamp(int parameterIndex, Calendar calendar) throws SQLException 466 { 467 return getTimestamp(parameterIndex); 468 } 469 470 public RowId getRowId(int parameterIndex) throws SQLException 471 { 472 Object value = getObject(parameterIndex); 473 if(null != value) 474 { 475 if(value instanceof RowId) return (RowId)value; 476 return new MockRowId(getBytes(parameterIndex)); 477 } 478 return null; 479 } 480 481 public Object getObject(String parameterName) throws SQLException 482 { 483 wasNull = false; 484 Object returnValue = null; 485 if(null != lastOutParameters) 486 { 487 returnValue = lastOutParameters.get(parameterName); 488 } 489 if(null == returnValue) wasNull = true; 490 return returnValue; 491 } 492 493 public Object getObject(String parameterName, Map map) throws SQLException 494 { 495 return getObject(parameterName); 496 } 497 498 public byte getByte(String parameterName) throws SQLException 499 { 500 Object value = getObject(parameterName); 501 if(null != value) 502 { 503 if(value instanceof Number) return ((Number)value).byteValue(); 504 return new Byte(value.toString()).byteValue(); 505 } 506 return 0; 507 } 508 509 public double getDouble(String parameterName) throws SQLException 510 { 511 Object value = getObject(parameterName); 512 if(null != value) 513 { 514 if(value instanceof Number) return ((Number)value).doubleValue(); 515 return new Double(value.toString()).doubleValue(); 516 } 517 return 0; 518 } 519 520 public float getFloat(String parameterName) throws SQLException 521 { 522 Object value = getObject(parameterName); 523 if(null != value) 524 { 525 if(value instanceof Number) return ((Number)value).floatValue(); 526 return new Float(value.toString()).floatValue(); 527 } 528 return 0; 529 } 530 531 public int getInt(String parameterName) throws SQLException 532 { 533 Object value = getObject(parameterName); 534 if(null != value) 535 { 536 if(value instanceof Number) return ((Number)value).intValue(); 537 return new Integer(value.toString()).intValue(); 538 } 539 return 0; 540 } 541 542 public long getLong(String parameterName) throws SQLException 543 { 544 Object value = getObject(parameterName); 545 if(null != value) 546 { 547 if(value instanceof Number) return ((Number)value).longValue(); 548 return new Long(value.toString()).longValue(); 549 } 550 return 0; 551 } 552 553 public short getShort(String parameterName) throws SQLException 554 { 555 Object value = getObject(parameterName); 556 if(null != value) 557 { 558 if(value instanceof Number) return ((Number)value).shortValue(); 559 return new Short(value.toString()).shortValue(); 560 } 561 return 0; 562 } 563 564 public boolean getBoolean(String parameterName) throws SQLException 565 { 566 Object value = getObject(parameterName); 567 if(null != value) 568 { 569 if(value instanceof Boolean) return ((Boolean)value).booleanValue(); 570 return new Boolean(value.toString()).booleanValue(); 571 } 572 return false; 573 } 574 575 public byte[] getBytes(String parameterName) throws SQLException 576 { 577 Object value = getObject(parameterName); 578 if(null != value) 579 { 580 if(value instanceof byte[]) return (byte[])value; 581 try 582 { 583 return value.toString().getBytes("ISO-8859-1"); 584 } 585 catch(UnsupportedEncodingException exc) 586 { 587 throw new NestedApplicationException(exc); 588 } 589 } 590 return null; 591 } 592 593 public String getString(String parameterName) throws SQLException 594 { 595 Object value = getObject(parameterName); 596 if(null != value) return value.toString(); 597 return null; 598 } 599 600 public String getNString(String parameterName) throws SQLException 601 { 602 return getString(parameterName); 603 } 604 605 public BigDecimal getBigDecimal(String parameterName) throws SQLException 606 { 607 Object value = getObject(parameterName); 608 if(null != value) 609 { 610 if(value instanceof Number) return new BigDecimal(((Number)value).doubleValue()); 611 return new BigDecimal(value.toString()); 612 } 613 return null; 614 } 615 616 public URL getURL(String parameterName) throws SQLException 617 { 618 Object value = getObject(parameterName); 619 if(null != value) 620 { 621 if(value instanceof URL) return (URL)value; 622 try 623 { 624 return new URL(value.toString()); 625 } 626 catch(MalformedURLException exc) 627 { 628 629 } 630 } 631 return null; 632 } 633 634 public Array getArray(String parameterName) throws SQLException 635 { 636 Object value = getObject(parameterName); 637 if(null != value) 638 { 639 if(value instanceof Array) return (Array)value; 640 return new MockArray(value); 641 } 642 return null; 643 } 644 645 public Blob getBlob(String parameterName) throws SQLException 646 { 647 Object value = getObject(parameterName); 648 if(null != value) 649 { 650 if(value instanceof Blob) return (Blob)value; 651 return new MockBlob(getBytes(parameterName)); 652 } 653 return null; 654 } 655 656 public Clob getClob(String parameterName) throws SQLException 657 { 658 Object value = getObject(parameterName); 659 if(null != value) 660 { 661 if(value instanceof Clob) return (Clob)value; 662 return new MockClob(getString(parameterName)); 663 } 664 return null; 665 } 666 667 public NClob getNClob(String parameterName) throws SQLException 668 { 669 Object value = getObject(parameterName); 670 if(null != value) 671 { 672 if(value instanceof NClob) return (NClob)value; 673 if(value instanceof Clob) return getNClobFromClob((Clob)value); 674 return new MockNClob(getString(parameterName)); 675 } 676 return null; 677 } 678 679 public SQLXML getSQLXML(String parameterName) throws SQLException 680 { 681 Object value = getObject(parameterName); 682 if(null != value) 683 { 684 if(value instanceof SQLXML) return (SQLXML)value; 685 return new MockSQLXML(getString(parameterName)); 686 } 687 return null; 688 } 689 690 public Reader getCharacterStream(String parameterName) throws SQLException 691 { 692 Object value = getObject(parameterName); 693 if(null != value) 694 { 695 if(value instanceof Reader) return (Reader)value; 696 return new StringReader(getString(parameterName)); 697 } 698 return null; 699 } 700 701 public Reader getNCharacterStream(String parameterName) throws SQLException 702 { 703 return getCharacterStream(parameterName); 704 } 705 706 public Date getDate(String parameterName) throws SQLException 707 { 708 Object value = getObject(parameterName); 709 if(null != value) 710 { 711 if(value instanceof Date) return (Date)value; 712 return Date.valueOf(value.toString()); 713 } 714 return null; 715 } 716 717 public Date getDate(String parameterName, Calendar calendar) throws SQLException 718 { 719 return getDate(parameterName); 720 } 721 722 public Ref getRef(String parameterName) throws SQLException 723 { 724 Object value = getObject(parameterName); 725 if(null != value) 726 { 727 if(value instanceof Ref) return (Ref)value; 728 return new MockRef(value); 729 } 730 return null; 731 } 732 733 public Time getTime(String parameterName) throws SQLException 734 { 735 Object value = getObject(parameterName); 736 if(null != value) 737 { 738 if(value instanceof Time) return (Time)value; 739 return Time.valueOf(value.toString()); 740 } 741 return null; 742 } 743 744 public Time getTime(String parameterName, Calendar calendar) throws SQLException 745 { 746 return getTime(parameterName); 747 } 748 749 public Timestamp getTimestamp(String parameterName) throws SQLException 750 { 751 Object value = getObject(parameterName); 752 if(null != value) 753 { 754 if(value instanceof Timestamp) return (Timestamp)value; 755 return Timestamp.valueOf(value.toString()); 756 } 757 return null; 758 } 759 760 public Timestamp getTimestamp(String parameterName, Calendar calendar) throws SQLException 761 { 762 return getTimestamp(parameterName); 763 } 764 765 public RowId getRowId(String parameterName) throws SQLException 766 { 767 Object value = getObject(parameterName); 768 if(null != value) 769 { 770 if(value instanceof RowId) return (RowId)value; 771 return new MockRowId(getBytes(parameterName)); 772 } 773 return null; 774 } 775 776 public void setByte(String parameterName, byte byteValue) throws SQLException 777 { 778 setObject(parameterName, new Byte(byteValue)); 779 } 780 781 public void setDouble(String parameterName, double doubleValue) throws SQLException 782 { 783 setObject(parameterName, new Double(doubleValue)); 784 } 785 786 public void setFloat(String parameterName, float floatValue) throws SQLException 787 { 788 setObject(parameterName, new Float(floatValue)); 789 } 790 791 public void setInt(String parameterName, int intValue) throws SQLException 792 { 793 setObject(parameterName, new Integer(intValue)); 794 } 795 796 public void setNull(String parameterName, int sqlType) throws SQLException 797 { 798 setObject(parameterName, null); 799 } 800 801 public void setNull(String parameterName, int sqlType, String typeName) throws SQLException 802 { 803 setNull(parameterName, sqlType); 804 } 805 806 public void setLong(String parameterName, long longValue) throws SQLException 807 { 808 setObject(parameterName, new Long(longValue)); 809 } 810 811 public void setShort(String parameterName, short shortValue) throws SQLException 812 { 813 setObject(parameterName, new Short(shortValue)); 814 } 815 816 public void setBoolean(String parameterName, boolean booleanValue) throws SQLException 817 { 818 setObject(parameterName, new Boolean(booleanValue)); 819 } 820 821 public void setBytes(String parameterName, byte[] byteArray) throws SQLException 822 { 823 setObject(parameterName, byteArray); 824 } 825 826 public void setAsciiStream(String parameterName, InputStream stream) throws SQLException 827 { 828 setBinaryStream(parameterName, stream); 829 } 830 831 public void setAsciiStream(String parameterName, InputStream stream, int length) throws SQLException 832 { 833 setBinaryStream(parameterName, stream, length); 834 } 835 836 public void setAsciiStream(String parameterName, InputStream stream, long length) throws SQLException 837 { 838 setBinaryStream(parameterName, stream, length); 839 } 840 841 public void setBinaryStream(String parameterName, InputStream stream) throws SQLException 842 { 843 byte[] data = StreamUtil.getStreamAsByteArray(stream); 844 setObject(parameterName, new ByteArrayInputStream(data)); 845 } 846 847 public void setBinaryStream(String parameterName, InputStream stream, int length) throws SQLException 848 { 849 byte[] data = StreamUtil.getStreamAsByteArray(stream, length); 850 setObject(parameterName, new ByteArrayInputStream(data)); 851 } 852 853 public void setBinaryStream(String parameterName, InputStream stream, long length) throws SQLException 854 { 855 setBinaryStream(parameterName, stream, (int)length); 856 } 857 858 public void setCharacterStream(String parameterName, Reader reader) throws SQLException 859 { 860 String data = StreamUtil.getReaderAsString(reader); 861 setObject(parameterName, new StringReader(data)); 862 } 863 864 public void setCharacterStream(String parameterName, Reader reader, int length) throws SQLException 865 { 866 String data = StreamUtil.getReaderAsString(reader, length); 867 setObject(parameterName, new StringReader(data)); 868 } 869 870 public void setCharacterStream(String parameterName, Reader reader, long length) throws SQLException 871 { 872 setCharacterStream(parameterName, reader, (int)length); 873 } 874 875 public void setNCharacterStream(String parameterName, Reader reader) throws SQLException 876 { 877 setCharacterStream(parameterName, reader); 878 } 879 880 public void setNCharacterStream(String parameterName, Reader reader, long length) throws SQLException 881 { 882 setCharacterStream(parameterName, reader, length); 883 } 884 885 public void setBlob(String parameterName, Blob blob) throws SQLException 886 { 887 setObject(parameterName, blob); 888 } 889 890 public void setBlob(String parameterName, InputStream inputStream) throws SQLException 891 { 892 byte[] data = StreamUtil.getStreamAsByteArray(inputStream); 893 setBlob(parameterName, new MockBlob(data)); 894 } 895 896 public void setBlob(String parameterName, InputStream inputStream, long length) throws SQLException 897 { 898 byte[] data = StreamUtil.getStreamAsByteArray(inputStream, (int)length); 899 setBlob(parameterName, new MockBlob(data)); 900 } 901 902 public void setClob(String parameterName, Clob clob) throws SQLException 903 { 904 setObject(parameterName, clob); 905 } 906 907 public void setClob(String parameterName, Reader reader) throws SQLException 908 { 909 String data = StreamUtil.getReaderAsString(reader); 910 setClob(parameterName, new MockClob(data)); 911 } 912 913 public void setClob(String parameterName, Reader reader, long length) throws SQLException 914 { 915 String data = StreamUtil.getReaderAsString(reader, (int)length); 916 setClob(parameterName, new MockClob(data)); 917 } 918 919 public void setNClob(String parameterName, NClob nClob) throws SQLException 920 { 921 setObject(parameterName, nClob); 922 } 923 924 public void setNClob(String parameterName, Reader reader) throws SQLException 925 { 926 String data = StreamUtil.getReaderAsString(reader); 927 setNClob(parameterName, new MockNClob(data)); 928 } 929 930 public void setNClob(String parameterName, Reader reader, long length) throws SQLException 931 { 932 String data = StreamUtil.getReaderAsString(reader, (int)length); 933 setNClob(parameterName, new MockNClob(data)); 934 } 935 936 public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException 937 { 938 setObject(parameterName, xmlObject); 939 } 940 941 public void setString(String parameterName, String string) throws SQLException 942 { 943 setObject(parameterName, string); 944 } 945 946 public void setNString(String parameterName, String string) throws SQLException 947 { 948 setObject(parameterName, string); 949 } 950 951 public void setBigDecimal(String parameterName, BigDecimal bigDecimal) throws SQLException 952 { 953 setObject(parameterName, bigDecimal); 954 } 955 956 public void setURL(String parameterName, URL url) throws SQLException 957 { 958 setObject(parameterName, url); 959 } 960 961 public void setDate(String parameterName, Date date) throws SQLException 962 { 963 setObject(parameterName, date); 964 } 965 966 public void setTime(String parameterName, Time time) throws SQLException 967 { 968 setObject(parameterName, time); 969 } 970 971 public void setTimestamp(String parameterName, Timestamp timestamp) throws SQLException 972 { 973 setObject(parameterName, timestamp); 974 } 975 976 public void setDate(String parameterName, Date date, Calendar calendar) throws SQLException 977 { 978 setDate(parameterName, date); 979 } 980 981 public void setTime(String parameterName, Time time, Calendar calendar) throws SQLException 982 { 983 setTime(parameterName, time); 984 } 985 986 public void setTimestamp(String parameterName, Timestamp timestamp, Calendar calendar) throws SQLException 987 { 988 setTimestamp(parameterName, timestamp); 989 } 990 991 public void setRowId(String parameterName, RowId rowId) throws SQLException 992 { 993 setObject(parameterName, rowId); 994 } 995 996 public void setObject(String parameterName, Object object) throws SQLException 997 { 998 paramObjects.put(parameterName, object); 999 } 1000 1001 public void setObject(String parameterName, Object object, int targetSqlType) throws SQLException 1002 { 1003 setObject(parameterName, object); 1004 } 1005 1006 public void setObject(String parameterName, Object object, int targetSqlType, int scale) throws SQLException 1007 { 1008 setObject(parameterName, object); 1009 } 1010 1011 private Map getOutParameterMap() 1012 { 1013 Map outParameter = resultSetHandler.getOutParameter(getSQL(), getParameterMap()); 1014 if(null == outParameter) 1015 { 1016 outParameter = resultSetHandler.getOutParameter(getSQL()); 1017 } 1018 if(null == outParameter) 1019 { 1020 outParameter = resultSetHandler.getGlobalOutParameter(); 1021 } 1022 if(resultSetHandler.getMustRegisterOutParameters()) 1023 { 1024 return filterNotRegisteredParameters(outParameter); 1025 } 1026 return outParameter; 1027 } 1028 1029 private Map filterNotRegisteredParameters(Map outParameter) 1030 { 1031 Map filteredMap = new HashMap(); 1032 Iterator keys = outParameter.keySet().iterator(); 1033 while(keys.hasNext()) 1034 { 1035 Object nextKey = keys.next(); 1036 if(registeredOutParameterSetIndexed.contains(nextKey) || registeredOutParameterSetNamed.contains(nextKey)) 1037 { 1038 filteredMap.put(nextKey, outParameter.get(nextKey)); 1039 } 1040 } 1041 return Collections.unmodifiableMap(filteredMap); 1042 } 1043 1044 private NClob getNClobFromClob(Clob clobValue) throws SQLException 1045 { 1046 return new MockNClob(clobValue.getSubString(1, (int)clobValue.length())); 1047 } 1048 }