1 /* 2 * Copyright (C) 2007 Google Inc. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package libcore.java.sql; 18 19 import java.io.InputStream; 20 import java.io.InputStreamReader; 21 import java.io.OutputStream; 22 import java.io.Reader; 23 import java.io.Writer; 24 import java.math.BigDecimal; 25 import java.net.URL; 26 import java.sql.Array; 27 import java.sql.Blob; 28 import java.sql.Clob; 29 import java.sql.Date; 30 import java.sql.PreparedStatement; 31 import java.sql.Ref; 32 import java.sql.ResultSet; 33 import java.sql.ResultSetMetaData; 34 import java.sql.SQLException; 35 import java.sql.Statement; 36 import java.sql.Time; 37 import java.sql.Timestamp; 38 import java.sql.Types; 39 import java.util.Calendar; 40 import java.util.GregorianCalendar; 41 import java.util.Locale; 42 import java.util.Map; 43 import java.util.TimeZone; 44 45 public final class OldPreparedStatementTest extends OldSQLTest { 46 47 String queryAllSelect = "select * from type"; 48 49 String[] queries = { 50 "create table type (" + 51 52 " BoolVal BOOLEAN," + " IntVal INT," + " LongVal LONG," 53 + " Bint BIGINT," + " Tint TINYINT," + " Sint SMALLINT," 54 + " Mint MEDIUMINT, " + 55 56 " IntegerVal INTEGER, " + " RealVal REAL, " 57 + " DoubleVal DOUBLE, " + " FloatVal FLOAT, " 58 + " DecVal DECIMAL, " + 59 60 " NumVal NUMERIC, " + " charStr CHAR(20), " 61 + " dateVal DATE, " + " timeVal TIME, " + " TS TIMESTAMP, " 62 + 63 64 " DT DATETIME, " + " TBlob TINYBLOB, " + " BlobVal BLOB, " 65 + " MBlob MEDIUMBLOB, " + " LBlob LONGBLOB, " + 66 67 " TText TINYTEXT, " + " TextVal TEXT, " 68 + " MText MEDIUMTEXT, " + " LText LONGTEXT " + ");", 69 70 "insert into type (BoolVal, IntVal, LongVal, Bint, Tint, Sint, Mint," 71 + "IntegerVal, RealVal, DoubleVal, FloatVal, DecVal," 72 + "NumVal, charStr, dateVal, timeVal, TS," 73 + "DT, TBlob, BlobVal, MBlob, LBlob," 74 + "TText, TextVal, MText, LText" 75 + ") " 76 + "values (1, -1, 22, 2, 33," 77 + "3, 1, 2, 3.9, 23.2, 33.3, 44," 78 + "5, 'test string', '1799-05-26', '12:35:45', '2007-10-09 14:28:02.0'," 79 + "'1221-09-22 10:11:55', 1, 2, 3, 4," 80 + "'Test text message tiny', 'Test text message', 'Test text message medium', 'Test text message long');" }; 81 setUp()82 public void setUp() throws Exception { 83 super.setUp(); 84 Statement st = null; 85 try { 86 st = conn.createStatement(); 87 for (int i = 0; i < queries.length; i++) { 88 st.execute(queries[i]); 89 } 90 } finally { 91 try { 92 st.close(); 93 } catch (Exception ee) { 94 } 95 } 96 } 97 tearDown()98 public void tearDown() throws SQLException { 99 Statement st = null; 100 try { 101 st = conn.createStatement(); 102 st.execute("drop table if exists type"); 103 } finally { 104 try { 105 st.close(); 106 } catch (SQLException ee) { 107 } 108 } 109 super.tearDown(); 110 } 111 testAddBatch()112 public void testAddBatch() throws SQLException { 113 PreparedStatement ps = null; 114 try { 115 ps = conn 116 .prepareStatement("INSERT INTO zoo VALUES (3,'Tuzik', ?);"); 117 ps.addBatch("INSERT INTO zoo VALUES (?,'Burenka', ?); "); 118 ps.addBatch("INSERT INTO zoo VALUES (?,'Mashka','cat')"); 119 try { 120 ps.executeBatch(); 121 } catch (SQLException sqle) { 122 fail("SQLException is thrown for executeBatch()"); 123 } 124 ps.setString(1, "dog"); 125 Statement st = null; 126 try { 127 ps.executeBatch(); 128 st = conn.createStatement(); 129 st.execute("select * from zoo"); 130 ResultSet rs = st.getResultSet(); 131 assertEquals(2, getCount(rs)); 132 } catch (SQLException sqle) { 133 fail("SQLException is thrown for executeBatch()"); 134 } finally { 135 try { 136 st.close(); 137 } catch (SQLException ee) { 138 } 139 } 140 } finally { 141 try { 142 ps.close(); 143 } catch (SQLException ee) { 144 } 145 } 146 147 try { 148 ps = conn 149 .prepareStatement("INSERT INTO zoo VALUES (3,'Tuzik', ?);"); 150 ps.addBatch(""); 151 } catch (SQLException e) { 152 // expected 153 } finally { 154 try { 155 ps.close(); 156 } catch (SQLException ee) { 157 } 158 } 159 160 try { 161 ps = conn 162 .prepareStatement("INSERT INTO zoo VALUES (3,'Tuzik', ?);"); 163 ps.addBatch(null); 164 } catch (SQLException e) { 165 // expected 166 } finally { 167 try { 168 ps.close(); 169 } catch (SQLException ee) { 170 } 171 } 172 } 173 174 175 // preparedStatement.execute() does not return false on update. testExecute()176 public void testExecute() throws SQLException { 177 Statement st = null; 178 PreparedStatement ps = null; 179 try { 180 //update 181 String query = "insert into zoo(id, family, name) values(?, ?, 'unknown animal')"; 182 ps = conn.prepareStatement(query); 183 ps.setInt(1, 3); 184 ps.setString(2, "No name"); 185 assertFalse(ps.execute()); 186 assertEquals(1,ps.getUpdateCount()); 187 188 // select 189 ps = conn.prepareStatement("select * from zoo"); 190 assertTrue(ps.execute()); 191 assertEquals(3, getCount(ps.getResultSet())); 192 } finally { 193 try { 194 ps.close(); 195 } catch (Exception ee) { 196 } 197 } 198 199 try { 200 String query = "update zoo set name='Masha', family=? where id=?;"; 201 ps = conn.prepareStatement(query); 202 ps.setString(1, "cat"); 203 ps.setInt(2, 2); 204 assertFalse(ps.execute()); 205 assertEquals(1, ps.getUpdateCount()); 206 st = conn.createStatement(); 207 st.execute("select family from zoo where id=2"); 208 ResultSet rs = st.getResultSet(); 209 rs.next(); 210 assertEquals("cat", rs.getString(1)); 211 } finally { 212 try { 213 ps.close(); 214 st.close(); 215 } catch (Exception ee) { 216 } 217 } 218 219 try { 220 conn.createStatement().execute("drop table if exists hutch"); 221 String query = "create table hutch (id integer not null, animal_id integer, address char(20), primary key (id));"; 222 ps = conn.prepareStatement(query); 223 assertFalse(ps.execute()); 224 assertTrue(ps.getUpdateCount() > 0); 225 } finally { 226 try { 227 ps.close(); 228 } catch (Exception ee) { 229 } 230 } 231 232 try { 233 String query = "select name, family from zoo where id = ?"; 234 ps = conn.prepareStatement(query); 235 ps.setInt(1, 1); 236 assertTrue(ps.execute()); 237 } finally { 238 try { 239 ps.close(); 240 } catch (Exception ee) { 241 } 242 } 243 244 try { 245 String query = "select name, family from zoo where id = ?"; 246 ps = conn.prepareStatement(query); 247 ps.execute(); 248 } finally { 249 try { 250 ps.close(); 251 } catch (Exception ee) { 252 } 253 } 254 //Exception test 255 try { 256 String query = "update zoo set name='Masha', family=? where id=?;"; 257 ps = conn.prepareStatement(query); 258 ps.setString(1, "cat"); 259 ps.setInt(2, 2); 260 assertTrue(ps.execute("update zoo set name='Masha', family='cat' where id=2;")); 261 } catch (SQLException e) { 262 // ok Should not provide string argument for a prepared Statement 263 } finally { 264 try { 265 ps.close(); 266 } catch (Exception ee) { 267 } 268 } 269 } 270 testExecuteQuery()271 public void testExecuteQuery() throws SQLException { 272 String[] queries2 = { 273 "update zoo set name='Masha', family='cat' where id=;", 274 "insert into hutch (id, animal_id, address) values (1, ?,'Birds-house, 1');", 275 "insert into hutch (id, animal_id, address) values (?, 1, 'Horse-house, 5');"}; 276 277 for (int i = 0; i < queries2.length; i++) { 278 PreparedStatement ps = null; 279 try { 280 ps = conn.prepareStatement(queries2[i]); 281 ps.executeQuery(); 282 fail("SQLException is not thrown for query: " + queries2[i]); 283 } catch (SQLException sqle) { 284 // expected 285 } finally { 286 try { 287 ps.close(); 288 } catch (Exception ee) { 289 } 290 } 291 } 292 293 String query = "select * from zoo where id = ?"; 294 PreparedStatement ps = null; 295 try { 296 ps = conn.prepareStatement(query); 297 ps.setInt(1, 1); 298 ResultSet rs = ps.executeQuery(); 299 rs.next(); 300 assertEquals(1, rs.getInt(1)); 301 assertEquals("Kesha", rs.getString(2)); 302 assertEquals("parrot", rs.getString(3)); 303 } finally { 304 try { 305 ps.close(); 306 } catch (Exception ee) { 307 } 308 } 309 310 try { 311 ps = conn.prepareStatement(query); 312 ps.setInt(1, 5); 313 ResultSet rs = ps.executeQuery(); 314 assertNotNull(rs); 315 assertFalse(rs.next()); 316 } finally { 317 try { 318 ps.close(); 319 } catch (Exception ee) { 320 } 321 } 322 } 323 324 // TODO Crashes VM. Fix later. testExecuteUpdate()325 public void testExecuteUpdate() throws SQLException { 326 String[] queries1 = { "insert into hutch (id, animal_id, address) values (1, ?, 'Birds-house, 1');", 327 "insert into hutch (id, animal_id, address) values (?, 1, 'Horse-house, 5');"}; 328 329 for (int i = 0; i < queries1.length; i++) { 330 PreparedStatement ps = null; 331 try { 332 ps = conn.prepareStatement(queries1[i]); 333 ps.executeUpdate(); 334 fail("SQLException is not thrown for query: " + queries1[i]); 335 } catch(SQLException sqle) { 336 // expected 337 } finally { 338 try { 339 ps.close(); 340 } catch(Exception ee) {} 341 } 342 } 343 344 String query = "update zoo set name='Masha', family='cat' where id=?;"; 345 PreparedStatement ps = null; 346 try { 347 ps = conn.prepareStatement(query); 348 ps.setInt(1, 2); 349 int updateCount = ps.executeUpdate(); 350 assertEquals(1, updateCount); 351 ps.setInt(1, 1); 352 int updateCount1 = ps.executeUpdate(); 353 assertEquals(1, updateCount1); 354 } finally { 355 try { 356 ps.close(); 357 } catch(Exception ee) {} 358 } 359 } 360 361 /** 362 * TODO Doesn't pass. according to spec, it is possible to invoke the 363 * method getMetaData on a PreparedStatement object before it is executed. 364 */ testGetMetaData()365 public void testGetMetaData() throws SQLException { 366 PreparedStatement ps = null; 367 368 // Specification testing 369 370 try { 371 String query = "update zoo set name='Masha', family='cat' where id=?;"; 372 ps = conn.prepareStatement(query); 373 assertNotNull(ps); 374 ResultSetMetaData meta = ps.getMetaData(); 375 assertNotNull(meta); 376 } finally { 377 try { 378 ps.close(); 379 } catch (SQLException ee) { 380 } 381 } 382 383 try { 384 String query = "select * from zoo where id = ?"; 385 ps = conn.prepareStatement(query); 386 ResultSetMetaData rsmd = ps.getMetaData(); 387 assertNotNull(rsmd); 388 assertEquals(3, rsmd.getColumnCount()); 389 assertEquals("id", rsmd.getColumnName(1)); 390 } finally { 391 try { 392 ps.close(); 393 } catch (SQLException ee) { 394 } 395 } 396 397 // ps closed 398 try { 399 ps.getMetaData(); 400 fail("SQLException expected"); 401 } catch (SQLException e) { 402 // ok 403 } 404 } 405 testGetParameterMetaData()406 public void testGetParameterMetaData() throws SQLException { 407 PreparedStatement ps = null; 408 String query = "select * from zoo where id = ?"; 409 ps = conn.prepareStatement(query); 410 411 try { 412 ps.getParameterMetaData(); 413 fail(); 414 } catch (SQLException e) { 415 assertEquals("not supported",e.getMessage()); 416 } finally { 417 try { 418 ps.close(); 419 } catch (SQLException ee) { 420 } 421 } 422 423 ps.close(); 424 425 try { 426 ps.getParameterMetaData(); 427 fail("SQLException expected"); 428 } catch (SQLException e) { 429 // ok 430 } 431 } 432 433 434 /** 435 * Test fails: clearparameters should be implemented with Stmt.reset() 436 */ testClearParameters()437 public void testClearParameters() throws SQLException { 438 PreparedStatement ps = null; 439 try { 440 String query = "select * from zoo where id = ? and family=?"; 441 ps = conn.prepareStatement(query); 442 ps.clearParameters(); 443 try { 444 ps.execute(); 445 fail("SQLException is not thrown during execute method after calling clearParameters()"); 446 } catch (SQLException sql) { 447 } 448 ps.setInt(1, 2); 449 ps.setString(2, "dog"); 450 ps.clearParameters(); 451 try { 452 ps.execute(); 453 fail("SQLException is not thrown during execute method after calling clearParameters()"); 454 } catch (SQLException sqle) { 455 // expected 456 } 457 ps.setInt(1, 2); 458 ps.clearParameters(); 459 try { 460 ps.execute(); 461 fail("SQLException is not thrown during execute method after calling clearParameters()"); 462 } catch (SQLException sqle) { 463 // expected 464 } 465 ps.setInt(1, 2); 466 ps.setString(2, "cat"); 467 468 try { 469 ps.execute(); 470 } catch (SQLException sqle) { 471 fail("SQLException is thrown during execute method after calling clearParameters() twice"); 472 } 473 } finally { 474 try { 475 ps.close(); 476 } catch (SQLException ee) { 477 } 478 } 479 } 480 481 // exception test fails testSetInt()482 public void testSetInt() throws SQLException { 483 484 PreparedStatement ps = null; 485 Statement st = null; 486 try { 487 String query = "insert into type (IntVal) values (?);"; 488 ps = conn.prepareStatement(query); 489 try { 490 ps.setInt(1, Integer.MAX_VALUE); 491 ps.execute(); 492 st = conn.createStatement(); 493 st.execute("select * from type where IntVal=" 494 + Integer.MAX_VALUE); 495 ResultSet rs = st.getResultSet(); 496 assertEquals(1, getCount(rs)); 497 } finally { 498 try { 499 ps.close(); 500 st.close(); 501 } catch (Exception ee) { 502 } 503 } 504 ps = conn.prepareStatement(query); 505 try { 506 ps.setInt(1, Integer.MIN_VALUE); 507 ps.execute(); 508 st = conn.createStatement(); 509 st.execute("select * from type where IntVal=" 510 + Integer.MAX_VALUE); 511 ResultSet rs = st.getResultSet(); 512 assertEquals(1, getCount(rs)); 513 } finally { 514 try { 515 ps.close(); 516 st.close(); 517 } catch (SQLException ee) { 518 } 519 } 520 ps = conn.prepareStatement(query); 521 ps.close(); 522 try { 523 ps.setInt(1, Integer.MIN_VALUE); 524 fail("SQLException is not thrown"); 525 } catch (SQLException sqle) { 526 // expected 527 } 528 } finally { 529 try { 530 531 ps.close(); 532 } catch (SQLException ee) { 533 } 534 } 535 } 536 537 // exception test fails testSetLong()538 public void testSetLong() throws SQLException { 539 540 PreparedStatement ps = null; 541 try { 542 String query = "insert into type (LongVal) values (?);"; 543 ps = conn.prepareStatement(query); 544 Statement st = null; 545 try { 546 ps.setLong(1, Long.MAX_VALUE); 547 ps.execute(); 548 st = conn.createStatement(); 549 st.execute("select * from type where LongVal=" + Long.MAX_VALUE); 550 ResultSet rs = st.getResultSet(); 551 assertEquals(1, getCount(rs)); 552 } finally { 553 try { 554 st.close(); 555 } catch (Exception ee) { 556 } 557 } 558 559 try { 560 ps.setLong(1, Long.MIN_VALUE); 561 ps.execute(); 562 st = conn.createStatement(); 563 st.execute("select * from type where LongVal=" + Long.MAX_VALUE); 564 ResultSet rs = st.getResultSet(); 565 assertEquals(1, getCount(rs)); 566 } finally { 567 try { 568 st.close(); 569 } catch (SQLException ee) { 570 } 571 } 572 573 ps.close(); 574 try { 575 ps.setLong(1, Long.MIN_VALUE); 576 fail("SQLException is not thrown"); 577 } catch (SQLException sqle) { 578 // expected 579 } 580 } finally { 581 try { 582 ps.close(); 583 } catch (SQLException ee) { 584 } 585 } 586 587 } 588 589 // exception test fails testSetFloat()590 public void testSetFloat() throws SQLException { 591 float value1 = 12345678.12345689f; 592 float value2 = -12345678.12345689f; 593 594 PreparedStatement ps = null; 595 String query = "insert into type (FloatVal) values (?);"; 596 ps = conn.prepareStatement(query); 597 598 try { 599 600 Statement st = null; 601 try { 602 ps.setFloat(1, value1); 603 ps.execute(); 604 st = conn.createStatement(); 605 st.execute("select * from type where FloatVal=" + value1); 606 ResultSet rs = st.getResultSet(); 607 assertEquals(1, getCount(rs)); 608 } finally { 609 try { 610 st.close(); 611 } catch (Exception ee) { 612 } 613 } 614 615 try { 616 ps.setFloat(1, value2); 617 ps.execute(); 618 st = conn.createStatement(); 619 st.execute("select * from type where FloatVal=" + value2); 620 ResultSet rs = st.getResultSet(); 621 assertEquals(1, getCount(rs)); 622 } finally { 623 try { 624 st.close(); 625 } catch (SQLException ee) { 626 627 } 628 } 629 ps.close(); 630 try { 631 ps.setFloat(1, Float.MIN_VALUE); 632 fail("SQLException is not thrown"); 633 } catch (SQLException sqle) { 634 // expected 635 } 636 } finally { 637 try { 638 639 ps.close(); 640 } catch (SQLException ee) { 641 } 642 } 643 } 644 645 // exception test fails testSetDouble()646 public void testSetDouble() throws SQLException { 647 PreparedStatement ps = null; 648 String query = "insert into type (DoubleVal) values (?);"; 649 ps = conn.prepareStatement(query); 650 651 try { 652 653 Statement st = null; 654 try { 655 ps.setDouble(1, Double.MAX_VALUE); 656 ps.execute(); 657 st = conn.createStatement(); 658 st.execute("select * from type where DoubleVal=" 659 + Double.MAX_VALUE); 660 ResultSet rs = st.getResultSet(); 661 assertEquals(1, getCount(rs)); 662 } finally { 663 try { 664 st.close(); 665 } catch (Exception ee) { 666 } 667 } 668 669 try { 670 ps.setDouble(1, Double.MIN_VALUE); 671 ps.execute(); 672 st = conn.createStatement(); 673 st.execute("select * from type where DoubleVal=" 674 + Double.MIN_VALUE); 675 ResultSet rs = st.getResultSet(); 676 assertEquals(1, getCount(rs)); 677 } finally { 678 try { 679 st.close(); 680 } catch (SQLException ee) { 681 } 682 } 683 684 ps.close(); 685 try { 686 ps.setDouble(1, 2.0); 687 fail("SQLException is not thrown"); 688 } catch (SQLException sqle) { 689 // expected 690 } 691 } finally { 692 try { 693 694 ps.close(); 695 } catch (SQLException ee) { 696 } 697 } 698 } 699 700 // exception test fails testSetString_charField()701 public void testSetString_charField() throws SQLException { 702 PreparedStatement ps = null; 703 try { 704 String query = "insert into type (charStr) values (?);"; 705 ps = conn.prepareStatement(query); 706 707 String str = "test^text$test%"; 708 Statement st = null; 709 try { 710 ps.setString(1, str); 711 ps.execute(); 712 st = conn.createStatement(); 713 st.execute("select * from type where charStr='" + str + "'"); 714 ResultSet rs = st.getResultSet(); 715 assertEquals(1, getCount(rs)); 716 } finally { 717 try { 718 st.close(); 719 } catch (Exception ee) { 720 } 721 } 722 723 try { 724 ps.setString(1, ""); 725 ps.execute(); 726 st = conn.createStatement(); 727 st.execute("select * from type where charStr=''"); 728 ResultSet rs = st.getResultSet(); 729 assertEquals(1, getCount(rs)); 730 } finally { 731 try { 732 st.close(); 733 } catch (SQLException ee) { 734 } 735 } 736 737 try { 738 ps.setString(1, " "); 739 ps.execute(); 740 st = conn.createStatement(); 741 st.execute("select * from type where charStr=' '"); 742 ResultSet rs = st.getResultSet(); 743 assertEquals(1, getCount(rs)); 744 } finally { 745 try { 746 st.close(); 747 } catch (SQLException ee) { 748 } 749 } 750 751 ps.setString(1, " test & text * test % text * test ^ text "); 752 ps.execute(); 753 ps.setString(1, null); 754 ps.execute(); 755 ps.close(); 756 757 try { 758 ps.setString(1, "test text"); 759 fail("SQLException is not thrown"); 760 } catch (SQLException sqle) { 761 // expected 762 } 763 } finally { 764 try { 765 ps.close(); 766 } catch (SQLException ee) { 767 } 768 } 769 } 770 771 // statment.close() does not wrap up testSetString_tinyTextField()772 public void testSetString_tinyTextField() throws SQLException { 773 PreparedStatement ps = null; 774 try { 775 String str = "test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test"; 776 String query = "insert into type (TText) values (?);"; 777 ps = conn.prepareStatement(query); 778 Statement st = null; 779 try { 780 ps.setString(1, str); 781 ps.execute(); 782 st = conn.createStatement(); 783 st.execute("select * from type where TText='" + str + "'"); 784 ResultSet rs = st.getResultSet(); 785 assertEquals(1, getCount(rs)); 786 } finally { 787 try { 788 st.close(); 789 } catch (Exception ee) { 790 } 791 } 792 793 try { 794 ps.setString(1, ""); 795 ps.execute(); 796 st = conn.createStatement(); 797 st.execute("select * from type where TText=''"); 798 ResultSet rs = st.getResultSet(); 799 assertEquals(1, getCount(rs)); 800 } finally { 801 try { 802 st.close(); 803 } catch (SQLException ee) { 804 } 805 } 806 807 try { 808 ps.setString(1, " "); 809 ps.execute(); 810 st = conn.createStatement(); 811 st.execute("select * from type where TText=' '"); 812 ResultSet rs = st.getResultSet(); 813 assertEquals(1, getCount(rs)); 814 } finally { 815 try { 816 st.close(); 817 } catch (SQLException ee) { 818 } 819 } 820 821 try { 822 ps.setString(1, 823 "test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test*test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test-test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test+test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test?test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test#test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test "); 824 ps.execute(); 825 } catch (SQLException sqle) { 826 fail("SQLException is thrown"); 827 } 828 829 try { 830 ps.setString(1, null); 831 ps.execute(); 832 } catch (SQLException sqle) { 833 fail("SQLException is thrown: " + sqle.getMessage()); 834 } 835 836 ps.close(); 837 838 try { 839 ps.setString(1, "test text"); 840 fail("SQLException is not thrown"); 841 } catch (SQLException sqle) { 842 // expected 843 } 844 } finally { 845 try { 846 ps.close(); 847 } catch (SQLException ee) { 848 } 849 } 850 } 851 testSetString_textField()852 public void testSetString_textField() throws SQLException { 853 PreparedStatement ps = null; 854 try { 855 String str = "test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test"; 856 String query = "insert into type (TextVal) values (?);"; 857 ps = conn.prepareStatement(query); 858 Statement st = null; 859 try { 860 ps.setString(1, str); 861 ps.execute(); 862 st = conn.createStatement(); 863 st.execute("select * from type where TextVal='" + str + "'"); 864 ResultSet rs = st.getResultSet(); 865 assertEquals(1, getCount(rs)); 866 } finally { 867 try { 868 st.close(); 869 } catch (Exception ee) { 870 } 871 } 872 873 try { 874 ps.setString(1, ""); 875 ps.execute(); 876 st = conn.createStatement(); 877 st.execute("select * from type where TextVal=''"); 878 ResultSet rs = st.getResultSet(); 879 assertEquals(1, getCount(rs)); 880 } finally { 881 try { 882 st.close(); 883 } catch (SQLException ee) { 884 } 885 } 886 887 try { 888 ps.setString(1, " "); 889 ps.execute(); 890 st = conn.createStatement(); 891 st.execute("select * from type where TextVal=' '"); 892 ResultSet rs = st.getResultSet(); 893 assertEquals(1, getCount(rs)); 894 } finally { 895 try { 896 st.close(); 897 } catch (SQLException ee) { 898 } 899 } 900 901 String longString = " test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/"; 902 for (int i = 0; i < 10; i++) { 903 longString += longString; 904 } 905 ps.setString(1, longString); 906 ps.execute(); 907 908 ps.setString(1, null); 909 ps.execute(); 910 911 ps.close(); 912 913 try { 914 ps.setString(2, "test text"); 915 fail("SQLException is not thrown"); 916 } catch (SQLException sqle) { 917 // expected 918 } 919 } finally { 920 try { 921 ps.close(); 922 } catch (SQLException ee) { 923 } 924 } 925 } 926 testSetString_mediumTextField()927 public void testSetString_mediumTextField() throws SQLException { 928 PreparedStatement ps = null; 929 try { 930 String str = "test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test"; 931 String query = "insert into type (MText) values (?);"; 932 ps = conn.prepareStatement(query); 933 Statement st = null; 934 try { 935 ps.setString(1, str); 936 ps.execute(); 937 st = conn.createStatement(); 938 st.execute("select * from type where MText='" + str + "'"); 939 ResultSet rs = st.getResultSet(); 940 assertEquals(1, getCount(rs)); 941 } finally { 942 try { 943 st.close(); 944 } catch (Exception ee) { 945 } 946 } 947 948 try { 949 ps.setString(1, ""); 950 ps.execute(); 951 st = conn.createStatement(); 952 st.execute("select * from type where MText=''"); 953 ResultSet rs = st.getResultSet(); 954 assertEquals(1, getCount(rs)); 955 } finally { 956 try { 957 st.close(); 958 } catch (Exception ee) { 959 } 960 } 961 962 try { 963 ps.setString(1, " "); 964 ps.execute(); 965 st = conn.createStatement(); 966 st 967 .execute("select * from type where MText=' '"); 968 ResultSet rs = st.getResultSet(); 969 assertEquals(1, getCount(rs)); 970 } finally { 971 try { 972 st.close(); 973 } catch (Exception ee) { 974 } 975 } 976 977 ps.setString(1, null); 978 ps.execute(); 979 ps.close(); 980 981 try { 982 ps.setString(2, "test text"); 983 fail("SQLException is not thrown"); 984 } catch (SQLException sqle) { 985 // expected 986 } 987 } finally { 988 try { 989 ps.close(); 990 } catch (Exception ee) { 991 } 992 } 993 } 994 995 // exception test fails testSetString_longTextField()996 public void testSetString_longTextField() throws SQLException { 997 PreparedStatement ps = null; 998 try { 999 String str = "test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test/test^text$test%test(text)test@text5test~test^text$test%test(text)test@text5test"; 1000 String query = "insert into type (LText) values (?);"; 1001 ps = conn.prepareStatement(query); 1002 Statement st = null; 1003 try { 1004 ps.setString(1, str); 1005 ps.execute(); 1006 st = conn.createStatement(); 1007 st.execute("select * from type where LText='" + str + "'"); 1008 ResultSet rs = st.getResultSet(); 1009 assertEquals(1, getCount(rs)); 1010 } finally { 1011 try { 1012 st.close(); 1013 } catch (Exception ee) { 1014 } 1015 } 1016 1017 try { 1018 ps.setString(1, ""); 1019 ps.execute(); 1020 st = conn.createStatement(); 1021 st.execute("select * from type where LText=''"); 1022 ResultSet rs = st.getResultSet(); 1023 assertEquals(1, getCount(rs)); 1024 } finally { 1025 try { 1026 st.close(); 1027 } catch (Exception ee) { 1028 } 1029 } 1030 1031 try { 1032 ps.setString(1, " "); 1033 ps.execute(); 1034 st = conn.createStatement(); 1035 st.execute("select * from type where LText=' '"); 1036 ResultSet rs = st.getResultSet(); 1037 assertEquals(1, getCount(rs)); 1038 } finally { 1039 try { 1040 st.close(); 1041 } catch (Exception ee) { 1042 } 1043 } 1044 1045 ps.setString(1, null); 1046 ps.execute(); 1047 ps.close(); 1048 1049 try { 1050 ps.setString(1, "test text"); 1051 fail("SQLException is not thrown"); 1052 } catch (SQLException sqle) { 1053 // expected 1054 } 1055 } finally { 1056 try { 1057 ps.close(); 1058 } catch (Exception ee) { 1059 } 1060 } 1061 } 1062 1063 // exception test fails testSetShort()1064 public void testSetShort() throws SQLException { 1065 PreparedStatement ps = null; 1066 PreparedStatement ps1 = null; 1067 PreparedStatement ps2 = null; 1068 try { 1069 String query = "insert into type (Sint) values (?);"; 1070 ps = conn.prepareStatement(query); 1071 Statement st = null; 1072 try { 1073 ps.setShort(1, Short.MAX_VALUE); 1074 ps.execute(); 1075 st = conn.createStatement(); 1076 st.execute("select * from type where Sint=" + Short.MAX_VALUE); 1077 ResultSet rs = st.getResultSet(); 1078 assertEquals(1, getCount(rs)); 1079 } finally { 1080 try { 1081 st.close(); 1082 } catch (Exception ee) { 1083 } 1084 } 1085 1086 try { 1087 ps.setShort(1, Short.MIN_VALUE); 1088 ps.execute(); 1089 st = conn.createStatement(); 1090 st.execute("select * from type where Sint=" + Short.MIN_VALUE); 1091 ResultSet rs = st.getResultSet(); 1092 assertEquals(1, getCount(rs)); 1093 } finally { 1094 try { 1095 st.close(); 1096 } catch (Exception ee) { 1097 } 1098 } 1099 1100 ps.close(); 1101 1102 try { 1103 ps.setShort(1, Short.MIN_VALUE); 1104 fail("SQLException is not thrown"); 1105 } catch (SQLException sqle) { 1106 // expected 1107 } 1108 1109 String query1 = "insert into type (Tint) values (?);"; 1110 ps1 = conn.prepareStatement(query1); 1111 ps1.setShort(1, Short.MAX_VALUE); 1112 1113 String query2 = "insert into type (IntVal) values (?);"; 1114 ps2 = conn.prepareStatement(query2); 1115 ps2.setShort(1, Short.MAX_VALUE); 1116 ps2.execute(); 1117 st = conn.createStatement(); 1118 st.execute("select * from type where IntVal=" + Short.MAX_VALUE); 1119 ResultSet rs = st.getResultSet(); 1120 assertEquals(1, getCount(rs)); 1121 } finally { 1122 try { 1123 1124 ps.close(); 1125 ps1.close(); 1126 ps2.close(); 1127 } catch (Exception ee) { 1128 } 1129 } 1130 } 1131 1132 // exception test fails testSetBoolean()1133 public void testSetBoolean() throws SQLException { 1134 PreparedStatement ps = null; 1135 PreparedStatement ps1 = null; 1136 try { 1137 String query = "insert into type (BoolVal) values (?);"; 1138 ps = conn.prepareStatement(query); 1139 Statement st = null; 1140 try { 1141 ps.setBoolean(1, false); 1142 ps.execute(); 1143 st = conn.createStatement(); 1144 st.execute("select * from type where BoolVal = 0"); 1145 ResultSet rs = st.getResultSet(); 1146 assertEquals(1, getCount(rs)); 1147 } finally { 1148 try { 1149 st.close(); 1150 } catch (Exception ee) { 1151 } 1152 } 1153 1154 try { 1155 ps.setBoolean(1, true); 1156 ps.execute(); 1157 st = conn.createStatement(); 1158 st.execute("select * from type where BoolVal= 1"); 1159 ResultSet rs = st.getResultSet(); 1160 assertEquals(2, getCount(rs)); 1161 } finally { 1162 try { 1163 st.close(); 1164 } catch (Exception ee) { 1165 } 1166 } 1167 1168 ps.close(); 1169 1170 try { 1171 ps.setBoolean(1, false); 1172 fail("SQLException is not thrown"); 1173 } catch (SQLException sqle) { 1174 // expected 1175 } 1176 1177 String query1 = "insert into type (Tint) values (?);"; 1178 ps1 = conn.prepareStatement(query1); 1179 ps1.setBoolean(1, true); 1180 ps1.execute(); 1181 } finally { 1182 try { 1183 1184 ps.close(); 1185 ps1.close(); 1186 } catch (Exception ee) { 1187 } 1188 } 1189 } 1190 1191 // exception test fails testSetByte()1192 public void testSetByte() throws SQLException { 1193 PreparedStatement ps = null; 1194 PreparedStatement ps1 = null; 1195 try { 1196 String query = "insert into type (Tint) values (?);"; 1197 ps = conn.prepareStatement(query); 1198 Statement st = null; 1199 try { 1200 ps.setByte(1, Byte.MAX_VALUE); 1201 ps.execute(); 1202 st = conn.createStatement(); 1203 st.execute("select * from type where Tint=" + Byte.MAX_VALUE); 1204 ResultSet rs = st.getResultSet(); 1205 assertEquals(1, getCount(rs)); 1206 } finally { 1207 try { 1208 st.close(); 1209 } catch (SQLException ee) { 1210 } 1211 } 1212 1213 try { 1214 ps.setByte(1, Byte.MIN_VALUE); 1215 ps.execute(); 1216 st = conn.createStatement(); 1217 st.execute("select * from type where Tint=" + Byte.MIN_VALUE); 1218 ResultSet rs = st.getResultSet(); 1219 assertEquals(1, getCount(rs)); 1220 } finally { 1221 try { 1222 st.close(); 1223 } catch (SQLException ee) { 1224 } 1225 } 1226 1227 try { 1228 ps.setByte(2, Byte.MAX_VALUE); 1229 fail("SQLException is not thrown"); 1230 } catch (Exception sqle) { 1231 // expected 1232 } 1233 1234 ps.close(); 1235 1236 try { 1237 ps.setByte(1, Byte.MIN_VALUE); 1238 fail("SQLException is not thrown"); 1239 } catch (SQLException sqle) { 1240 // expected 1241 } 1242 1243 String query1 = "insert into type (IntVal) values (?);"; 1244 ps1 = conn.prepareStatement(query1); 1245 ps1.setByte(1, Byte.MAX_VALUE); 1246 ps1.execute(); 1247 } finally { 1248 try { 1249 1250 ps.close(); 1251 ps1.close(); 1252 } catch (Exception ee) { 1253 } 1254 } 1255 } 1256 1257 // preparedStatement.execute() does not return false on update. testSetBytes()1258 public void testSetBytes() throws SQLException { 1259 byte[] bytesArray = {1, 0}; 1260 PreparedStatement ps = null; 1261 PreparedStatement ps1 = null; 1262 try { 1263 String query = "insert into type (LBlob) values (?);"; 1264 ps = conn.prepareStatement(query); 1265 1266 try { 1267 ps.setBytes(1, bytesArray); 1268 assertFalse(ps.execute()); 1269 assertTrue(ps.getUpdateCount() > 0); 1270 } catch (SQLException sqle) { 1271 fail("SQLException is thrown: " + sqle.getMessage()); 1272 } 1273 1274 try { 1275 ps.setBytes(2, bytesArray); 1276 fail("SQLException is not thrown"); 1277 } catch (Exception sqle) { 1278 // expected RuntimeException or SQLException 1279 } 1280 1281 ps.close(); 1282 1283 try { 1284 ps.setBytes(1, bytesArray); 1285 fail("SQLException is not thrown"); 1286 } catch (SQLException sqle) { 1287 // expected 1288 } 1289 String query1 = "insert into type (TBlob) values (?);"; 1290 ps1 = conn.prepareStatement(query1); 1291 1292 ps.setBytes(1, bytesArray); 1293 assertFalse(ps.execute()); 1294 assertTrue(ps.getUpdateCount() > 0); 1295 } finally { 1296 try { 1297 1298 if (ps != null) ps.close(); 1299 if (ps1 != null) ps1.close(); 1300 } catch (Exception ee) { 1301 } 1302 } 1303 } 1304 1305 // preparedStatement.execute() does not return false on update. testSetBigDecimal()1306 public void testSetBigDecimal() throws SQLException { 1307 BigDecimal bd = new BigDecimal("50"); 1308 PreparedStatement ps = null; 1309 PreparedStatement ps1 = null; 1310 try { 1311 String query = "insert into type (DecVal) values (?);"; 1312 ps = conn.prepareStatement(query); 1313 Statement st = null; 1314 ps.setBigDecimal(1, bd); 1315 assertFalse(ps.execute()); 1316 assertTrue(ps.getUpdateCount() > 0); 1317 1318 try { 1319 ps.setBigDecimal(2, bd); 1320 fail("SQLException is not thrown"); 1321 } catch (SQLException sqle) { 1322 // expected 1323 assertEquals("bad parameter index", sqle.getMessage()); 1324 } 1325 1326 try { 1327 ps.setBigDecimal(-2, bd); 1328 fail("SQLException is not thrown"); 1329 } catch (SQLException sqle) { 1330 // expected 1331 assertEquals("bad parameter index", sqle.getMessage()); 1332 } 1333 String query1 = "insert into type (Tint) values (?);"; 1334 ps1 = conn.prepareStatement(query1); 1335 1336 ps1.setBigDecimal(1, bd); 1337 } finally { 1338 try { 1339 if (ps != null) ps.close(); 1340 if (ps1 != null) ps1.close(); 1341 } catch (SQLException ee) { 1342 } 1343 } 1344 } 1345 1346 /** 1347 * preparedStatement.execute() does not return false on update. Setting a 1348 * data for a declared INTEGER should throw Exception 1349 */ testSetDate_int_Date()1350 public void testSetDate_int_Date() throws SQLException { 1351 Calendar cal = new GregorianCalendar(1799, 5, 26); 1352 Date[] dates = { 1353 new Date(cal.getTimeInMillis()), new Date(Integer.MAX_VALUE), 1354 new Date(123456789)}; 1355 1356 PreparedStatement ps = null; 1357 PreparedStatement ps1 = null; 1358 try { 1359 String query = "insert into type (dateVal) values (?);"; 1360 ps = conn.prepareStatement(query); 1361 1362 for (int i = 0; i < dates.length; i++) { 1363 ps.setDate(1, dates[i]); 1364 assertFalse(ps.execute()); 1365 assertTrue(ps.getUpdateCount() > 0); 1366 } 1367 1368 try { 1369 ps.setDate(2, dates[0]); 1370 fail("SQLException is not thrown"); 1371 } catch (Exception sqle) { 1372 // expected 1373 } 1374 1375 ps.close(); 1376 1377 try { 1378 ps.setDate(1, dates[0]); 1379 fail("SQLException is not thrown"); 1380 } catch (SQLException sqle) { 1381 // expected 1382 } 1383 1384 String query1 = "insert into type (Tint) values (?);"; 1385 ps1 = conn.prepareStatement(query1); 1386 1387 try { 1388 ps1.setDate(1, dates[0]); 1389 fail("SQLException is not thrown"); 1390 } catch (SQLException sqle) { 1391 // expected 1392 assertEquals("SQLite.Exception: error in prepare", sqle 1393 .getMessage()); 1394 } 1395 } finally { 1396 try { 1397 if (ps != null) ps.close(); 1398 if (ps1 != null) ps1.close(); 1399 } catch (SQLException ee) { 1400 } 1401 } 1402 } 1403 1404 // preparedStatement.execute() does not return false on update. testSetDate_int_Date_Calendar()1405 public void testSetDate_int_Date_Calendar() throws SQLException { 1406 Calendar[] cals = { Calendar.getInstance(), 1407 Calendar.getInstance(Locale.GERMANY), 1408 Calendar.getInstance(TimeZone.getDefault()) }; 1409 Calendar cal = new GregorianCalendar(1799,5,26); 1410 1411 Date[] dates = { new Date(cal.getTimeInMillis()), new Date(Integer.MAX_VALUE), 1412 new Date(123456789) }; 1413 1414 PreparedStatement ps = null; 1415 PreparedStatement ps1 = null; 1416 try { 1417 String query = "insert into type (dateVal) values (?);"; 1418 ps = conn.prepareStatement(query); 1419 1420 for (int i = 0; i < dates.length; i++) { 1421 ps.setDate(1, dates[i], cals[i]); 1422 assertFalse(ps.execute()); 1423 assertTrue(ps.getUpdateCount() > 0); 1424 } 1425 1426 try { 1427 ps.setDate(2, dates[0], cals[0]); 1428 ps.execute(); 1429 fail("SQLException is not thrown"); 1430 } catch (Exception sqle) { 1431 // expected 1432 } 1433 1434 ps.close(); 1435 1436 try { 1437 ps.setDate(1, dates[0], cals[1]); 1438 fail("SQLException is not thrown"); 1439 } catch (Exception sqle) { 1440 // expected 1441 } 1442 String query1 = "insert into type (Tint) values (?);"; 1443 ps1 = conn.prepareStatement(query1); 1444 1445 ps1.setDate(1, dates[0], cals[2]); 1446 ps1.execute(); 1447 } finally { 1448 try { 1449 if (ps != null) ps.close(); 1450 if (ps1 != null) ps1.close(); 1451 } catch (SQLException ee) { 1452 } 1453 } 1454 } 1455 1456 /** 1457 * This test doesn't pass on RI 1458 */ testSetNull_int_int()1459 public void testSetNull_int_int() throws SQLException { 1460 PreparedStatement ps = null; 1461 try { 1462 String query = "insert into type (BoolVal, IntVal) values ('true', ?);"; 1463 ps = conn.prepareStatement(query); 1464 Statement st = null; 1465 try { 1466 ps.setNull(1, Types.INTEGER); 1467 ps.execute(); 1468 } finally { 1469 try { 1470 ps.close(); 1471 } catch (Exception ee) { 1472 } 1473 } 1474 1475 query = "insert into type (BoolVal, LongVal) values ('true', ?);"; 1476 ps = conn.prepareStatement(query); 1477 1478 try { 1479 ps.setNull(1, Types.BIGINT); 1480 ps.execute(); 1481 } finally { 1482 try { 1483 ps.close(); 1484 } catch (Exception ee) { 1485 } 1486 } 1487 1488 query = "insert into type (BoolVal, DecVal) values ('true', ?)"; 1489 ps = conn.prepareStatement(query); 1490 1491 try { 1492 ps.setNull(1, Types.DECIMAL); 1493 ps.execute(); 1494 } finally { 1495 try { 1496 ps.close(); 1497 } catch (Exception ee) { 1498 } 1499 } 1500 1501 query = "insert into type (BoolVal, dateVal) values ('true', ?);"; 1502 ps = conn.prepareStatement(query); 1503 1504 try { 1505 ps.setNull(1, Types.DATE); 1506 ps.execute(); 1507 } finally { 1508 try { 1509 ps.close(); 1510 } catch (Exception ee) { 1511 } 1512 } 1513 1514 query = "insert into type (BoolVal, BlobVal) values ('true', ?);"; 1515 ps = conn.prepareStatement(query); 1516 1517 try { 1518 ps.setNull(1, Types.BLOB); 1519 ps.execute(); 1520 } finally { 1521 try { 1522 ps.close(); 1523 } catch (Exception ee) { 1524 } 1525 } 1526 1527 query = "insert into type (BoolVal, TextVal) values ('true', ?);"; 1528 ps = conn.prepareStatement(query); 1529 ps.setNull(1, Types.CHAR); 1530 ps.execute(); 1531 } finally { 1532 try { 1533 ps.close(); 1534 } catch (Exception ee) { 1535 } 1536 } 1537 } 1538 1539 /** 1540 * UDTs and Ref types not supported in SQLite v 3 1541 */ testSetNullIntintString()1542 public void testSetNullIntintString() throws SQLException { 1543 // test UDT 1544 String typeCreationStmtUDT = "CREATE TYPE addressType AS " 1545 + "( street INTEGER, zip TEXT);"; 1546 String personTableCreateUDT = "CREATE TABLE person (name TEXT, address addressType);"; 1547 Statement st = null; 1548 PreparedStatement ps = null; 1549 try { 1550 st = conn.createStatement(); 1551 st.execute(typeCreationStmtUDT); 1552 st.execute(personTableCreateUDT); 1553 fail("UDTs and Ref Types not supported"); 1554 String query = "insert into person (name, address) values ('Hans', ?);"; 1555 ps = conn.prepareStatement(query); 1556 try { 1557 ps.setNull(1, Types.DATALINK); 1558 ps.execute(); 1559 } catch (SQLException sqle) { 1560 fail("SQLException is thrown: " + sqle.getMessage()); 1561 sqle.printStackTrace(); 1562 } finally { 1563 try { 1564 st.close(); 1565 } catch (Exception ee) { 1566 } 1567 } 1568 } catch (SQLException e) { 1569 // UDTs or Ref types not supported 1570 // ok 1571 } finally { 1572 try { 1573 st.execute("drop table if exists person"); 1574 ps.close(); 1575 } catch (Exception ee) { 1576 } 1577 } 1578 1579 // test non UDT REF type Exception checking 1580 String personTableCreate = "create table person (name TEXT, Address TEXT)"; 1581 try { 1582 st = conn.createStatement(); 1583 st.execute(personTableCreate); 1584 String insert 1585 = "insert into person (name, address) values (?, '1600 Amphitheatre Mountain View');"; 1586 ps = conn.prepareStatement(insert); 1587 try { 1588 ps.setNull(1, 1, ""); 1589 ps.execute(); 1590 } catch (SQLException sqle) { 1591 assertEquals("SQLite.Exception: error in step", sqle.getMessage()); 1592 } finally { 1593 try { 1594 st.close(); 1595 } catch (Exception ee) { 1596 } 1597 } 1598 } finally { 1599 try { 1600 st.execute("drop table if exists person"); 1601 ps.close(); 1602 } catch (Exception ee) { 1603 } 1604 } 1605 1606 // test non UDT REF type OK 1607 1608 personTableCreate = "create table person (name TEXT, Address TEXT)"; 1609 try { 1610 st = conn.createStatement(); 1611 st.execute("drop table if exists person"); 1612 st.execute(personTableCreate); 1613 String insert 1614 = "insert into person (name, address) values (?, '1600 Amphitheatre Mountain View');"; 1615 ps = conn.prepareStatement(insert); 1616 try { 1617 ps.setNull(1, 1, ""); 1618 ps.execute(); 1619 } finally { 1620 try { 1621 st.close(); 1622 } catch (Exception ee) { 1623 } 1624 } 1625 } finally { 1626 try { 1627 st.execute("drop table if exists person"); 1628 ps.close(); 1629 } catch (Exception ee) { 1630 } 1631 } 1632 } 1633 1634 // exception test fails testSetObject_int_Object()1635 public void testSetObject_int_Object() throws SQLException { 1636 PreparedStatement ps = null; 1637 try { 1638 String query = "insert into type (IntVal) values (?);"; 1639 ps = conn.prepareStatement(query); 1640 Statement st = null; 1641 try { 1642 ps.setObject(1, Integer.MAX_VALUE); 1643 ps.execute(); 1644 st = conn.createStatement(); 1645 st.execute("select * from type where IntVal=" 1646 + Integer.MAX_VALUE); 1647 ResultSet rs = st.getResultSet(); 1648 assertEquals(1, getCount(rs)); 1649 } finally { 1650 try { 1651 st.close(); 1652 } catch (Exception ee) { 1653 } 1654 } 1655 1656 query = "insert into type (LongVal) values (?);"; 1657 ps = conn.prepareStatement(query); 1658 1659 try { 1660 ps.setObject(1, "test text"); 1661 ps.execute(); 1662 st = conn.createStatement(); 1663 st.execute("select * from type where LongVal='test text';"); 1664 ResultSet rs = st.getResultSet(); 1665 assertEquals(1, getCount(rs)); 1666 } finally { 1667 try { 1668 st.close(); 1669 } catch (SQLException ee) { 1670 } 1671 } 1672 1673 query = "insert into type (DecVal) values (?);"; 1674 ps = conn.prepareStatement(query); 1675 1676 try { 1677 ps.setObject(1, new Object()); 1678 ps.execute(); 1679 } catch (SQLException sqle) { 1680 fail("SQLException is thrown"); 1681 } 1682 1683 query = "insert into type (dateVal) values (?);"; 1684 ps = conn.prepareStatement(query); 1685 Date d = new Date(123456789); 1686 1687 try { 1688 ps.setObject(1, d); 1689 ps.execute(); 1690 st = conn.createStatement(); 1691 st.execute("select * from type where dateVal='" 1692 + d.getTime() + "';"); 1693 ResultSet rs = st.getResultSet(); 1694 assertEquals(1, getCount(rs)); 1695 } finally { 1696 try { 1697 st.close(); 1698 } catch (Exception ee) { 1699 } 1700 } 1701 1702 // this sub test doesn't pass on RI 1703 query = "insert into type (BlobVal) values (?);"; 1704 ps = conn.prepareStatement(query); 1705 1706 try { 1707 ps.setObject(1, null); 1708 ps.execute(); 1709 } finally { 1710 try { 1711 st.close(); 1712 } catch (SQLException ee) { 1713 } 1714 } 1715 1716 } finally { 1717 try { 1718 ps.close(); 1719 } catch (Exception ee) { 1720 } 1721 } 1722 try { 1723 ps.setObject(1, "test text"); 1724 fail("Exception not thrown"); 1725 } catch (SQLException e) { 1726 // ok 1727 } 1728 1729 } 1730 1731 /** 1732 * This test doesn't pass on RI 1733 */ testSetObject_int_Object_int()1734 public void testSetObject_int_Object_int() throws SQLException { 1735 PreparedStatement ps = null; 1736 try { 1737 String query = "insert into type (IntVal) values (?);"; 1738 ps = conn.prepareStatement(query); 1739 Statement st = null; 1740 try { 1741 ps.setObject(1, Integer.MAX_VALUE, Types.INTEGER); 1742 ps.execute(); 1743 st = conn.createStatement(); 1744 st.execute("select * from type where IntVal=" 1745 + Integer.MAX_VALUE); 1746 ResultSet rs = st.getResultSet(); 1747 assertEquals(1, getCount(rs)); 1748 } finally { 1749 try { 1750 st.close(); 1751 } catch (Exception ee) { 1752 } 1753 } 1754 1755 query = "insert into type (LongVal) values (?);"; 1756 ps = conn.prepareStatement(query); 1757 1758 try { 1759 ps.setObject(1, "test text", Types.CHAR); 1760 ps.execute(); 1761 st = conn.createStatement(); 1762 st.execute("select * from type where LongVal='test text';"); 1763 ResultSet rs = st.getResultSet(); 1764 assertEquals(1, getCount(rs)); 1765 } finally { 1766 try { 1767 st.close(); 1768 } catch (Exception ee) { 1769 } 1770 } 1771 1772 query = "insert into type (DecVal) values (?);"; 1773 ps = conn.prepareStatement(query); 1774 ps.setObject(1, new Object(), Types.DECIMAL); 1775 ps.execute(); 1776 1777 query = "insert into type (dateVal) values (?);"; 1778 ps = conn.prepareStatement(query); 1779 Date d = new Date(123456789); 1780 1781 try { 1782 ps.setObject(1, d, Types.DATE); 1783 ps.execute(); 1784 st = conn.createStatement(); 1785 st.execute("select * from type where dateVal='" 1786 + d.getTime() + "';"); 1787 ResultSet rs = st.getResultSet(); 1788 assertEquals(1, getCount(rs)); 1789 } finally { 1790 try { 1791 st.close(); 1792 } catch (Exception ee) { 1793 } 1794 } 1795 1796 // this sub test doesn't pass on RI 1797 query = "insert into type (BlobVal) values (?);"; 1798 ps = conn.prepareStatement(query); 1799 1800 try { 1801 ps.setObject(1, "", Types.BLOB); 1802 ps.execute(); 1803 } finally { 1804 try { 1805 st.close(); 1806 } catch (Exception ee) { 1807 } 1808 } 1809 } finally { 1810 try { 1811 ps.close(); 1812 } catch (Exception ee) { 1813 } 1814 } 1815 1816 try { 1817 ps.setObject(1, Integer.MAX_VALUE, Types.INTEGER); 1818 fail("Exception not thrown"); 1819 } catch (SQLException e) { 1820 // ok 1821 } 1822 } 1823 1824 /** 1825 * This test doesn't pass on RI; Fails for Types.DATE 1826 */ testSetObject_int_Object_int_int()1827 public void testSetObject_int_Object_int_int() throws SQLException { 1828 PreparedStatement ps = null; 1829 try { 1830 String query = "insert into type (IntVal) values (?);"; 1831 ps = conn.prepareStatement(query); 1832 Statement st = null; 1833 try { 1834 ps.setObject(1, Integer.MAX_VALUE, Types.INTEGER, 1835 Integer.MAX_VALUE); 1836 ps.execute(); 1837 st = conn.createStatement(); 1838 st.execute("select * from type where IntVal=" 1839 + Integer.MAX_VALUE); 1840 ResultSet rs = st.getResultSet(); 1841 assertEquals(1, getCount(rs)); 1842 } finally { 1843 try { 1844 st.close(); 1845 } catch (Exception ee) { 1846 } 1847 } 1848 1849 query = "insert into type (LongVal) values (?);"; 1850 ps = conn.prepareStatement(query); 1851 1852 try { 1853 ps.setObject(1, "test text", Types.CHAR, Integer.MIN_VALUE); 1854 ps.execute(); 1855 st = conn.createStatement(); 1856 st.execute("select * from type where LongVal='test text';"); 1857 ResultSet rs = st.getResultSet(); 1858 assertEquals(1, getCount(rs)); 1859 } finally { 1860 try { 1861 st.close(); 1862 } catch (Exception ee) { 1863 } 1864 } 1865 1866 query = "insert into type (DecVal) values (?);"; 1867 ps = conn.prepareStatement(query); 1868 BigDecimal bd2 = new BigDecimal("12.21"); 1869 ps.setObject(1, bd2, Types.DECIMAL, 2); 1870 ps.execute(); 1871 1872 query = "insert into type (dateVal) values (?);"; 1873 ps = conn.prepareStatement(query); 1874 Date d = new Date(123456789); 1875 try { 1876 ps.setObject(1, d , Types.DATE, -1); 1877 ps.execute(); 1878 st = conn.createStatement(); 1879 st.execute("select * from type where dateVal='" 1880 + d.getTime() + "';"); 1881 ResultSet rs = st.getResultSet(); 1882 assertEquals(1, getCount(rs)); 1883 } finally { 1884 try { 1885 st.close(); 1886 } catch (Exception ee) { 1887 } 1888 } 1889 1890 // this sub test doesn't pass on RI 1891 query = "insert into type(BlobVal) values (?);"; 1892 ps = conn.prepareStatement(query); 1893 1894 try { 1895 ps.setObject(1, "", Types.BLOB, 0); 1896 ps.execute(); 1897 } finally { 1898 try { 1899 st.close(); 1900 } catch (Exception ee) { 1901 } 1902 } 1903 } finally { 1904 try { 1905 ps.close(); 1906 } catch (Exception ee) { 1907 } 1908 } 1909 1910 try { 1911 ps.setObject(1, "test text", Types.CHAR, Integer.MIN_VALUE); 1912 fail("Exception not thrown"); 1913 } catch (SQLException e) { 1914 // ok 1915 } 1916 } 1917 1918 // statement.close() does not wrap up testSetTimeint_Time()1919 public void testSetTimeint_Time() throws SQLException { 1920 Time[] times = { new Time(24, 25, 26), new Time(Integer.MAX_VALUE), 1921 new Time(123456789) }; 1922 1923 PreparedStatement ps = null; 1924 PreparedStatement ps1 = null; 1925 try { 1926 String query = "insert into type (timeVal) values (?);"; 1927 ps = conn.prepareStatement(query); 1928 Statement st = null; 1929 for (int i = 0; i < times.length; i++) { 1930 try { 1931 ps.setTime(1, times[i]); 1932 ps.execute(); 1933 st = conn.createStatement(); 1934 st.execute("select * from type where timeVal='" 1935 + times[i].getTime() + "'"); 1936 ResultSet rs = st.getResultSet(); 1937 assertEquals(1, getCount(rs)); 1938 } finally { 1939 try { 1940 st.close(); 1941 } catch (Exception ee) { 1942 } 1943 } 1944 } 1945 1946 try { 1947 ps.setTime(2, times[0]); 1948 fail("SQLException is not thrown"); 1949 } catch (Exception sqle) { 1950 // expected index out of bounds 1951 } 1952 1953 ps.close(); 1954 1955 try { 1956 ps.setTime(1, times[0]); 1957 fail("SQLException is not thrown"); 1958 } catch (SQLException sqle) { 1959 // expected 1960 } 1961 String query1 = "insert into type (Tint) values (?)"; 1962 ps1 = conn.prepareStatement(query1); 1963 ps1.setTime(1, times[0]); 1964 ps1.execute(); 1965 } finally { 1966 try { 1967 ps.close(); 1968 ps1.close(); 1969 } catch (Exception ee) { 1970 } 1971 } 1972 } 1973 1974 // preparedStatement.execute() does not return False on update. testSetTime_int_Time_Calendar()1975 public void testSetTime_int_Time_Calendar() throws SQLException { 1976 Calendar[] cals = { Calendar.getInstance(), 1977 Calendar.getInstance(Locale.GERMANY), 1978 Calendar.getInstance(TimeZone.getDefault()) }; 1979 1980 Time[] times = { new Time(24, 25, 26), new Time(Integer.MAX_VALUE), 1981 new Time(123456789) }; 1982 1983 PreparedStatement ps = null; 1984 PreparedStatement ps1 = null; 1985 try { 1986 String query = "insert into type (timeVal) values (?);"; 1987 ps = conn.prepareStatement(query); 1988 Statement st = null; 1989 for (int i = 0; i < times.length; i++) { 1990 try { 1991 ps.setTime(1, times[i], cals[i]); 1992 assertFalse(ps.execute()); 1993 assertTrue(ps.getUpdateCount() > 0); 1994 } finally { 1995 try { 1996 st.close(); 1997 } catch (Exception ee) { 1998 } 1999 } 2000 } 2001 2002 try { 2003 ps.setTime(2, times[0], cals[0]); 2004 fail("SQLException is not thrown"); 2005 } catch (Exception sqle) { 2006 // expected 2007 } 2008 2009 ps.close(); 2010 2011 try { 2012 ps.setTime(-2, times[0], cals[1]); 2013 fail("SQLException is not thrown"); 2014 } catch (Exception sqle) { 2015 // expected 2016 } 2017 String query1 = "insert into type (Tint) values (?);"; 2018 ps1 = conn.prepareStatement(query1); 2019 ps1.setTime(1, times[0], cals[2]); 2020 ps1.execute(); 2021 } finally { 2022 try { 2023 ps.close(); 2024 ps1.close(); 2025 } catch (Exception ee) { 2026 } 2027 } 2028 } 2029 2030 // preparedStatement.execute() does not return false on update. testSetTimestamp_int_Timestamp()2031 public void testSetTimestamp_int_Timestamp() throws SQLException { 2032 Timestamp[] timestamps = { new Timestamp(2007, 10, 17, 19, 06, 50, 23), 2033 new Timestamp(123) }; 2034 2035 PreparedStatement ps = null; 2036 PreparedStatement ps1 = null; 2037 try { 2038 String query = "insert into type (TS) values (?);"; 2039 ps = conn.prepareStatement(query); 2040 2041 for (int i = 0; i < timestamps.length; i++) { 2042 ps.setTimestamp(1, timestamps[i]); 2043 assertFalse(ps.execute()); 2044 assertTrue(ps.getUpdateCount() > 0); 2045 } 2046 2047 try { 2048 ps.setTimestamp(2, timestamps[0]); 2049 fail("SQLException is not thrown"); 2050 } catch (Exception sqle) { 2051 // expected 2052 } 2053 2054 try { 2055 ps.setTimestamp(-2, timestamps[0]); 2056 fail("SQLException is not thrown"); 2057 } catch (Exception sqle) { 2058 // expected 2059 } 2060 String query1 = "insert into type (Tint) values (?);"; 2061 ps1 = conn.prepareStatement(query1); 2062 ps1.setTimestamp(1, timestamps[0]); 2063 ps1.execute(); 2064 } finally { 2065 try { 2066 ps.close(); 2067 ps1.close(); 2068 } catch (Exception ee) { 2069 } 2070 } 2071 } 2072 testSetBlob()2073 public void testSetBlob() { 2074 ResultSet res = null; 2075 PreparedStatement ps = null; 2076 Blob mock = new MockBlob(); 2077 try { 2078 String neverExecutedQuery = "select TBlob from type;"; 2079 ps = conn.prepareStatement(neverExecutedQuery); 2080 ps.setBlob(1,mock); 2081 fail("Exception expected not supported"); 2082 } catch (SQLException e) { 2083 //ok 2084 } 2085 } 2086 testSetClob()2087 public void testSetClob() { 2088 ResultSet res = null; 2089 PreparedStatement ps = null; 2090 Clob mock = new MockClob(); 2091 try { 2092 String neverExecutedQuery = "select TBlob from type;"; 2093 ps = conn.prepareStatement(neverExecutedQuery); 2094 ps.setClob(1,mock); 2095 fail("Exception expected not supported"); 2096 } catch (SQLException e) { 2097 //ok 2098 } 2099 } 2100 2101 // preparedStatement.execute() does not return false on update. testSetTimestampIntTimestampCalendar()2102 public void testSetTimestampIntTimestampCalendar() throws SQLException { 2103 Calendar[] cals = { Calendar.getInstance(), 2104 Calendar.getInstance(Locale.GERMANY), 2105 Calendar.getInstance(TimeZone.getDefault()) }; 2106 2107 Timestamp[] timestamps = { new Timestamp(2007, 10, 17, 19, 06, 50, 23), 2108 new Timestamp(123) }; 2109 2110 PreparedStatement ps = null; 2111 PreparedStatement ps1 = null; 2112 try { 2113 String query = "insert into type (timeVal) values (?);"; 2114 ps = conn.prepareStatement(query); 2115 Statement st = null; 2116 for (int i = 0; i < timestamps.length; i++) { 2117 try { 2118 ps.setTimestamp(1, timestamps[i], cals[i]); 2119 assertFalse(ps.execute()); 2120 assertTrue(ps.getUpdateCount() > 0); 2121 } finally { 2122 try { 2123 st.close(); 2124 } catch (Exception ee) { 2125 } 2126 } 2127 } 2128 2129 try { 2130 ps.setTimestamp(2, timestamps[0], cals[0]); 2131 ps.execute(); 2132 fail("SQLException is not thrown"); 2133 } catch (Exception sqle) { 2134 // expected 2135 } 2136 ps.close(); 2137 try { 2138 ps.setTimestamp(1, timestamps[0], cals[1]); 2139 ps.execute(); 2140 fail("SQLException is not thrown"); 2141 } catch (SQLException sqle) { 2142 // expected 2143 } 2144 String query1 = "insert into type (Tint) values (?);"; 2145 ps1 = conn.prepareStatement(query1); 2146 ps1.setTimestamp(1, timestamps[0], cals[2]); 2147 ps1.execute(); 2148 } finally { 2149 try { 2150 ps.close(); 2151 ps1.close(); 2152 } catch (Exception ee) { 2153 } 2154 } 2155 } 2156 testSetURL()2157 public void testSetURL() { 2158 ResultSet res = null; 2159 PreparedStatement ps = null; 2160 try { 2161 String query = "insert into type (TText) values (?);"; 2162 ps = conn.prepareStatement(query); 2163 ps.setURL(1, new URL("http://www.android.com")); 2164 fail("Exception expected not supported"); 2165 } catch (SQLException e) { 2166 //ok 2167 } catch (Exception e) { 2168 fail("Error in test setup "+e.getMessage()); 2169 e.printStackTrace(); 2170 } 2171 2172 } 2173 testSetArray()2174 public void testSetArray() { 2175 ResultSet res = null; 2176 PreparedStatement ps = null; 2177 Array a = new MockArray(); 2178 try { 2179 String query = "insert into type (TText) values (?);"; 2180 ps = conn.prepareStatement(query); 2181 ps.setArray(1, new MockArray()); 2182 fail("Exception expected not supported"); 2183 } catch (SQLException e) { 2184 //ok 2185 } catch (Exception e) { 2186 fail("Error in test setup "+e.getMessage()); 2187 e.printStackTrace(); 2188 } 2189 2190 } 2191 testSetRef()2192 public void testSetRef() { 2193 ResultSet res = null; 2194 PreparedStatement ps = null; 2195 Ref mock = new MockRef(); 2196 try { 2197 String neverExecutedQuery = "select TBlob from type;"; 2198 ps = conn.prepareStatement(neverExecutedQuery); 2199 ps.setRef(1,mock); 2200 fail("Exception expected not supported"); 2201 } catch (SQLException e) { 2202 //ok 2203 } 2204 2205 } 2206 testSetUnicodestream()2207 public void testSetUnicodestream() { 2208 ResultSet res = null; 2209 PreparedStatement ps = null; 2210 try { 2211 String query = "insert into type (TText) values (?);"; 2212 ps = conn.prepareStatement(query); 2213 InputStream file = Class.forName(this.getClass().getName()) 2214 .getResourceAsStream("/blob.c"); 2215 ps.setUnicodeStream(0, file, 100); 2216 fail("Exception expected not supported"); 2217 } catch (SQLException e) { 2218 //ok 2219 } catch (Exception e) { 2220 fail("Error in test setup "+e.getMessage()); 2221 e.printStackTrace(); 2222 } 2223 } 2224 testSetCharacterSteam()2225 public void testSetCharacterSteam() throws SQLException { 2226 String query = "insert into type (TText) values (?);"; 2227 PreparedStatement ps = conn.prepareStatement(query); 2228 InputStream file = OldPreparedStatementTest.class.getResourceAsStream("/blob.c"); 2229 assertNotNull("Error in test setup: file not found",file); 2230 Reader reader = new InputStreamReader(file); 2231 ps.setCharacterStream(1, reader, 100); 2232 } 2233 testSetAsciiStream()2234 public void testSetAsciiStream() { 2235 ResultSet res = null; 2236 try { 2237 String query = "insert into type (TText) values (?);"; 2238 PreparedStatement ps = conn.prepareStatement(query); 2239 InputStream file = OldPreparedStatementTest.class.getResourceAsStream("/blob.c"); 2240 ps.setAsciiStream(0, file, 100); 2241 fail("Exception expected not supported"); 2242 } catch (SQLException e) { 2243 // ok 2244 } catch (Exception e) { 2245 fail("Error in test setup "+e.getMessage()); 2246 e.printStackTrace(); 2247 } 2248 } 2249 testSetBinaryStream()2250 public void testSetBinaryStream() throws Exception { 2251 try { 2252 String query = "insert into type (TText) values (?);"; 2253 PreparedStatement ps = conn.prepareStatement(query); 2254 InputStream file = OldPreparedStatementTest.class.getResourceAsStream("/blob.c"); 2255 ps.setBinaryStream(0, file, 100); 2256 fail("Exception expected not supported"); 2257 } catch (SQLException expected) { 2258 } 2259 } 2260 2261 private class MockRef implements Ref { getBaseTypeName()2262 public String getBaseTypeName() throws SQLException { 2263 return null; 2264 } 2265 getObject()2266 public Object getObject() throws SQLException { 2267 return null; 2268 } 2269 getObject(Map<String, Class<?>> map)2270 public Object getObject(Map<String, Class<?>> map) throws SQLException { 2271 return null; 2272 } 2273 setObject(Object value)2274 public void setObject(Object value) throws SQLException {} 2275 } 2276 2277 private class MockArray implements Array { 2278 getArray()2279 public Object getArray() throws SQLException { 2280 return null; 2281 } 2282 getArray(long index, int count)2283 public Object getArray(long index, int count) throws SQLException { 2284 return null; 2285 } 2286 getArray(long index, int count, Map<String, Class<?>> map)2287 public Object getArray(long index, int count, Map<String, Class<?>> map) 2288 throws SQLException { 2289 return null; 2290 } 2291 getArray(Map<String, Class<?>> map)2292 public Object getArray(Map<String, Class<?>> map) throws SQLException { 2293 return null; 2294 } 2295 getBaseType()2296 public int getBaseType() throws SQLException { 2297 return 0; 2298 } 2299 getBaseTypeName()2300 public String getBaseTypeName() throws SQLException { 2301 return null; 2302 } 2303 getResultSet()2304 public ResultSet getResultSet() throws SQLException { 2305 return null; 2306 } 2307 getResultSet(long index, int count)2308 public ResultSet getResultSet(long index, int count) 2309 throws SQLException { 2310 return null; 2311 } 2312 getResultSet(long index, int count, Map<String, Class<?>> map)2313 public ResultSet getResultSet(long index, int count, 2314 Map<String, Class<?>> map) throws SQLException { 2315 return null; 2316 } 2317 getResultSet(Map<String, Class<?>> map)2318 public ResultSet getResultSet(Map<String, Class<?>> map) 2319 throws SQLException { 2320 return null; 2321 } 2322 free()2323 public void free() throws SQLException {} 2324 } 2325 2326 private class MockBlob implements Blob { 2327 getBinaryStream()2328 public InputStream getBinaryStream() throws SQLException { 2329 return null; 2330 } 2331 getBytes(long pos, int length)2332 public byte[] getBytes(long pos, int length) throws SQLException { 2333 return null; 2334 } 2335 length()2336 public long length() throws SQLException { 2337 return 0; 2338 } 2339 position(Blob pattern, long start)2340 public long position(Blob pattern, long start) throws SQLException { 2341 return 0; 2342 } 2343 position(byte[] pattern, long start)2344 public long position(byte[] pattern, long start) throws SQLException { 2345 return 0; 2346 } 2347 setBinaryStream(long pos)2348 public OutputStream setBinaryStream(long pos) throws SQLException { 2349 return null; 2350 } 2351 setBytes(long pos, byte[] theBytes)2352 public int setBytes(long pos, byte[] theBytes) throws SQLException { 2353 return 0; 2354 } 2355 setBytes(long pos, byte[] theBytes, int offset, int len)2356 public int setBytes(long pos, byte[] theBytes, int offset, int len) 2357 throws SQLException { 2358 return 0; 2359 } 2360 truncate(long len)2361 public void truncate(long len) throws SQLException { 2362 2363 } 2364 free()2365 public void free() throws SQLException {} 2366 getBinaryStream(long pos, long length)2367 public InputStream getBinaryStream(long pos, long length) throws SQLException { 2368 return null; 2369 } 2370 } 2371 2372 private class MockClob implements Clob { 2373 getAsciiStream()2374 public InputStream getAsciiStream() throws SQLException { 2375 return null; 2376 } 2377 getCharacterStream()2378 public Reader getCharacterStream() throws SQLException { 2379 return null; 2380 } 2381 getSubString(long pos, int length)2382 public String getSubString(long pos, int length) throws SQLException { 2383 return null; 2384 } 2385 length()2386 public long length() throws SQLException { 2387 return 0; 2388 } 2389 position(Clob searchstr, long start)2390 public long position(Clob searchstr, long start) throws SQLException { 2391 return 0; 2392 } 2393 position(String searchstr, long start)2394 public long position(String searchstr, long start) throws SQLException { 2395 return 0; 2396 } 2397 setAsciiStream(long pos)2398 public OutputStream setAsciiStream(long pos) throws SQLException { 2399 return null; 2400 } 2401 setCharacterStream(long pos)2402 public Writer setCharacterStream(long pos) throws SQLException { 2403 return null; 2404 } 2405 setString(long pos, String str)2406 public int setString(long pos, String str) throws SQLException { 2407 return 0; 2408 } 2409 setString(long pos, String str, int offset, int len)2410 public int setString(long pos, String str, int offset, int len) 2411 throws SQLException { 2412 return 0; 2413 } 2414 truncate(long len)2415 public void truncate(long len) throws SQLException {} 2416 free()2417 public void free() throws SQLException {} 2418 getCharacterStream(long pos, long length)2419 public Reader getCharacterStream(long pos, long length) throws SQLException { 2420 return null; 2421 } 2422 } 2423 } 2424