1 /* 2 * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package com.sun.rowset; 27 28 import java.sql; 29 import javax.sql; 30 import javax.naming; 31 import java.io; 32 import java.math; 33 import java.util; 34 import java.beans; 35 36 import javax.sql.rowset; 37 38 /** 39 * The standard implementation of the <code>JdbcRowSet</code> interface. See the interface 40 * defintion for full behavior and implementation requirements. 41 * 42 * @author Jonathan Bruce, Amit Handa 43 */ 44 45 public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { 46 47 /** 48 * The <code>Connection</code> object that is this rowset's 49 * current connection to the database. This field is set 50 * internally when the connection is established. 51 */ 52 private Connection conn; 53 54 /** 55 * The <code>PreparedStatement</code> object that is this rowset's 56 * current command. This field is set internally when the method 57 * <code>execute</code> creates the <code>PreparedStatement</code> 58 * object. 59 */ 60 private PreparedStatement ps; 61 62 /** 63 * The <code>ResultSet</code> object that is this rowset's 64 * current result set. This field is set internally when the method 65 * <code>execute</code> executes the rowset's command and thereby 66 * creates the rowset's <code>ResultSet</code> object. 67 */ 68 private ResultSet rs; 69 70 /** 71 * The <code>RowSetMetaDataImpl</code> object that is contructed when 72 * a <code>ResultSet</code> object is passed to the <code>JdbcRowSet</code> 73 * constructor. This helps in constructing all metadata associated 74 * with the <code>ResultSet</code> object using the setter methods of 75 * <code>RowSetMetaDataImpl</code>. 76 */ 77 private RowSetMetaDataImpl rowsMD; 78 79 /** 80 * The <code>ResultSetMetaData</code> object from which this 81 * <code>RowSetMetaDataImpl</code> is formed and which helps in getting 82 * the metadata information. 83 */ 84 private ResultSetMetaData resMD; 85 86 /** 87 * The property that helps to fire the property changed event when certain 88 * properties are changed in the <code>JdbcRowSet</code> object. This property 89 * is being added to satisfy Rave requirements. 90 */ 91 private PropertyChangeSupport propertyChangeSupport; 92 93 /** 94 * The Vector holding the Match Columns 95 */ 96 private Vector<Integer> iMatchColumns; 97 98 /** 99 * The Vector that will hold the Match Column names. 100 */ 101 private Vector<String> strMatchColumns; 102 103 104 protected transient JdbcRowSetResourceBundle resBundle; 105 106 /** 107 * Constructs a default <code>JdbcRowSet</code> object. 108 * The new instance of <code>JdbcRowSet</code> will serve as a proxy 109 * for the <code>ResultSet</code> object it creates, and by so doing, 110 * it will make it possible to use the result set as a JavaBeans 111 * component. 112 * <P> 113 * The following is true of a default <code>JdbcRowSet</code> instance: 114 * <UL> 115 * <LI>Does not show deleted rows 116 * <LI>Has no time limit for how long a driver may take to 117 * execute the rowset's command 118 * <LI>Has no limit for the number of rows it may contain 119 * <LI>Has no limit for the number of bytes a column may contain 120 * <LI>Has a scrollable cursor and does not show changes 121 * made by others 122 * <LI>Will not see uncommitted data (make "dirty" reads) 123 * <LI>Has escape processing turned on 124 * <LI>Has its connection's type map set to <code>null</code> 125 * <LI>Has an empty <code>Hashtable</code> object for storing any 126 * parameters that are set 127 * </UL> 128 * A newly created <code>JdbcRowSet</code> object must have its 129 * <code>execute</code> method invoked before other public methods 130 * are called on it; otherwise, such method calls will cause an 131 * exception to be thrown. 132 * 133 * @throws SQLException [1] if any of its public methods are called prior 134 * to calling the <code>execute</code> method; [2] if invalid JDBC driver 135 * properties are set or [3] if no connection to a data source exists. 136 */ 137 public JdbcRowSetImpl() { 138 conn = null; 139 ps = null; 140 rs = null; 141 142 try { 143 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); 144 } catch(IOException ioe) { 145 throw new RuntimeException(ioe); 146 } 147 148 propertyChangeSupport = new PropertyChangeSupport(this); 149 150 initParams(); 151 152 // set the defaults 153 154 try { 155 setShowDeleted(false); 156 } catch(SQLException sqle) { 157 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setshowdeleted").toString() + 158 sqle.getLocalizedMessage()); 159 } 160 161 try { 162 setQueryTimeout(0); 163 } catch(SQLException sqle) { 164 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + 165 sqle.getLocalizedMessage()); 166 } 167 168 try { 169 setMaxRows(0); 170 } catch(SQLException sqle) { 171 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + 172 sqle.getLocalizedMessage()); 173 } 174 175 try { 176 setMaxFieldSize(0); 177 } catch(SQLException sqle) { 178 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + 179 sqle.getLocalizedMessage()); 180 } 181 182 try { 183 setEscapeProcessing(true); 184 } catch(SQLException sqle) { 185 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + 186 sqle.getLocalizedMessage()); 187 } 188 189 try { 190 setConcurrency(ResultSet.CONCUR_UPDATABLE); 191 } catch (SQLException sqle) { 192 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setconcurrency").toString() + 193 sqle.getLocalizedMessage()); 194 } 195 196 setTypeMap(null); 197 198 try { 199 setType(ResultSet.TYPE_SCROLL_INSENSITIVE); 200 } catch(SQLException sqle){ 201 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settype").toString() + 202 sqle.getLocalizedMessage()); 203 } 204 205 setReadOnly(true); 206 207 try { 208 setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 209 } catch(SQLException sqle){ 210 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settransactionisolation").toString() + 211 sqle.getLocalizedMessage()); 212 } 213 214 //Instantiating the vector for MatchColumns 215 216 iMatchColumns = new Vector<Integer>(10); 217 for(int i = 0; i < 10 ; i++) { 218 iMatchColumns.add(i,Integer.valueOf(-1)); 219 } 220 221 strMatchColumns = new Vector<String>(10); 222 for(int j = 0; j < 10; j++) { 223 strMatchColumns.add(j,null); 224 } 225 } 226 227 /** 228 * Constructs a default <code>JdbcRowSet</code> object given a 229 * valid <code>Connection</code> object. The new 230 * instance of <code>JdbcRowSet</code> will serve as a proxy for 231 * the <code>ResultSet</code> object it creates, and by so doing, 232 * it will make it possible to use the result set as a JavaBeans 233 * component. 234 * <P> 235 * The following is true of a default <code>JdbcRowSet</code> instance: 236 * <UL> 237 * <LI>Does not show deleted rows 238 * <LI>Has no time limit for how long a driver may take to 239 * execute the rowset's command 240 * <LI>Has no limit for the number of rows it may contain 241 * <LI>Has no limit for the number of bytes a column may contain 242 * <LI>Has a scrollable cursor and does not show changes 243 * made by others 244 * <LI>Will not see uncommitted data (make "dirty" reads) 245 * <LI>Has escape processing turned on 246 * <LI>Has its connection's type map set to <code>null</code> 247 * <LI>Has an empty <code>Hashtable</code> object for storing any 248 * parameters that are set 249 * </UL> 250 * A newly created <code>JdbcRowSet</code> object must have its 251 * <code>execute</code> method invoked before other public methods 252 * are called on it; otherwise, such method calls will cause an 253 * exception to be thrown. 254 * 255 * @throws SQLException [1] if any of its public methods are called prior 256 * to calling the <code>execute</code> method, [2] if invalid JDBC driver 257 * properties are set, or [3] if no connection to a data source exists. 258 */ 259 public JdbcRowSetImpl(Connection con) throws SQLException { 260 261 conn = con; 262 ps = null; 263 rs = null; 264 265 try { 266 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); 267 } catch(IOException ioe) { 268 throw new RuntimeException(ioe); 269 } 270 271 propertyChangeSupport = new PropertyChangeSupport(this); 272 273 initParams(); 274 // set the defaults 275 setShowDeleted(false); 276 setQueryTimeout(0); 277 setMaxRows(0); 278 setMaxFieldSize(0); 279 280 setParams(); 281 282 setReadOnly(true); 283 setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 284 setEscapeProcessing(true); 285 setTypeMap(null); 286 287 //Instantiating the vector for MatchColumns 288 289 iMatchColumns = new Vector<Integer>(10); 290 for(int i = 0; i < 10 ; i++) { 291 iMatchColumns.add(i,Integer.valueOf(-1)); 292 } 293 294 strMatchColumns = new Vector<String>(10); 295 for(int j = 0; j < 10; j++) { 296 strMatchColumns.add(j,null); 297 } 298 } 299 300 /** 301 * Constructs a default <code>JdbcRowSet</code> object using the 302 * URL, username, and password arguments supplied. The new 303 * instance of <code>JdbcRowSet</code> will serve as a proxy for 304 * the <code>ResultSet</code> object it creates, and by so doing, 305 * it will make it possible to use the result set as a JavaBeans 306 * component. 307 * 308 * <P> 309 * The following is true of a default <code>JdbcRowSet</code> instance: 310 * <UL> 311 * <LI>Does not show deleted rows 312 * <LI>Has no time limit for how long a driver may take to 313 * execute the rowset's command 314 * <LI>Has no limit for the number of rows it may contain 315 * <LI>Has no limit for the number of bytes a column may contain 316 * <LI>Has a scrollable cursor and does not show changes 317 * made by others 318 * <LI>Will not see uncommitted data (make "dirty" reads) 319 * <LI>Has escape processing turned on 320 * <LI>Has its connection's type map set to <code>null</code> 321 * <LI>Has an empty <code>Hashtable</code> object for storing any 322 * parameters that are set 323 * </UL> 324 * 325 * @param url - a JDBC URL for the database to which this <code>JdbcRowSet</code> 326 * object will be connected. The form for a JDBC URL is 327 * <code>jdbc:subprotocol:subname</code>. 328 * @param user - the database user on whose behalf the connection 329 * is being made 330 * @param password - the user's password 331 * 332 * @throws SQLException if a database access error occurs 333 * 334 */ 335 public JdbcRowSetImpl(String url, String user, String password) throws SQLException { 336 conn = null; 337 ps = null; 338 rs = null; 339 340 try { 341 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); 342 } catch(IOException ioe) { 343 throw new RuntimeException(ioe); 344 } 345 346 propertyChangeSupport = new PropertyChangeSupport(this); 347 348 initParams(); 349 350 // Pass the arguments to BaseRowSet 351 // setter methods now. 352 353 setUsername(user); 354 setPassword(password); 355 setUrl(url); 356 357 // set the defaults 358 setShowDeleted(false); 359 setQueryTimeout(0); 360 setMaxRows(0); 361 setMaxFieldSize(0); 362 363 // to ensure connection to a db call connect now 364 // and associate a conn with "this" object 365 // in this case. 366 conn = connect(); 367 setParams(); 368 369 setReadOnly(true); 370 setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 371 setEscapeProcessing(true); 372 setTypeMap(null); 373 374 //Instantiating the vector for MatchColumns 375 376 iMatchColumns = new Vector<Integer>(10); 377 for(int i = 0; i < 10 ; i++) { 378 iMatchColumns.add(i,Integer.valueOf(-1)); 379 } 380 381 strMatchColumns = new Vector<String>(10); 382 for(int j = 0; j < 10; j++) { 383 strMatchColumns.add(j,null); 384 } 385 } 386 387 388 /** 389 * Constructs a <code>JdbcRowSet</code> object using the given valid 390 * <code>ResultSet</code> object. The new 391 * instance of <code>JdbcRowSet</code> will serve as a proxy for 392 * the <code>ResultSet</code> object, and by so doing, 393 * it will make it possible to use the result set as a JavaBeans 394 * component. 395 * 396 * <P> 397 * The following is true of a default <code>JdbcRowSet</code> instance: 398 * <UL> 399 * <LI>Does not show deleted rows 400 * <LI>Has no time limit for how long a driver may take to 401 * execute the rowset's command 402 * <LI>Has no limit for the number of rows it may contain 403 * <LI>Has no limit for the number of bytes a column may contain 404 * <LI>Has a scrollable cursor and does not show changes 405 * made by others 406 * <LI>Will not see uncommitted data (make "dirty" reads) 407 * <LI>Has escape processing turned on 408 * <LI>Has its connection's type map set to <code>null</code> 409 * <LI>Has an empty <code>Hashtable</code> object for storing any 410 * parameters that are set 411 * </UL> 412 * 413 * @param res a valid <code>ResultSet</code> object 414 * 415 * @throws SQLException if a database access occurs due to a non 416 * valid ResultSet handle. 417 */ 418 public JdbcRowSetImpl(ResultSet res) throws SQLException { 419 420 // A ResultSet handle encapsulates a connection handle. 421 // But there is no way we can retrieve a Connection handle 422 // from a ResultSet object. 423 // So to avoid any anomalies we keep the conn = null 424 // The passed rs handle will be a wrapper around for 425 // "this" object's all operations. 426 conn = null; 427 428 ps = null; 429 430 rs = res; 431 432 try { 433 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); 434 } catch(IOException ioe) { 435 throw new RuntimeException(ioe); 436 } 437 438 propertyChangeSupport = new PropertyChangeSupport(this); 439 440 initParams(); 441 442 // get the values from the resultset handle. 443 setShowDeleted(false); 444 setQueryTimeout(0); 445 setMaxRows(0); 446 setMaxFieldSize(0); 447 448 setParams(); 449 450 setReadOnly(true); 451 setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 452 setEscapeProcessing(true); 453 setTypeMap(null); 454 455 // Get a handle to ResultSetMetaData 456 // Construct RowSetMetaData out of it. 457 458 resMD = rs.getMetaData(); 459 460 rowsMD = new RowSetMetaDataImpl(); 461 462 initMetaData(rowsMD, resMD); 463 464 //Instantiating the vector for MatchColumns 465 466 iMatchColumns = new Vector<Integer>(10); 467 for(int i = 0; i < 10 ; i++) { 468 iMatchColumns.add(i,Integer.valueOf(-1)); 469 } 470 471 strMatchColumns = new Vector<String>(10); 472 for(int j = 0; j < 10; j++) { 473 strMatchColumns.add(j,null); 474 } 475 } 476 477 /** 478 * Initializes the given <code>RowSetMetaData</code> object with the values 479 * in the given <code>ResultSetMetaData</code> object. 480 * 481 * @param md the <code>RowSetMetaData</code> object for this 482 * <code>JdbcRowSetImpl</code> object, which will be set with 483 * values from rsmd 484 * @param rsmd the <code>ResultSetMetaData</code> object from which new 485 * values for md will be read 486 * @throws SQLException if an error occurs 487 */ 488 protected void initMetaData(RowSetMetaData md, ResultSetMetaData rsmd) throws SQLException { 489 int numCols = rsmd.getColumnCount(); 490 491 md.setColumnCount(numCols); 492 for (int col=1; col <= numCols; col++) { 493 md.setAutoIncrement(col, rsmd.isAutoIncrement(col)); 494 md.setCaseSensitive(col, rsmd.isCaseSensitive(col)); 495 md.setCurrency(col, rsmd.isCurrency(col)); 496 md.setNullable(col, rsmd.isNullable(col)); 497 md.setSigned(col, rsmd.isSigned(col)); 498 md.setSearchable(col, rsmd.isSearchable(col)); 499 md.setColumnDisplaySize(col, rsmd.getColumnDisplaySize(col)); 500 md.setColumnLabel(col, rsmd.getColumnLabel(col)); 501 md.setColumnName(col, rsmd.getColumnName(col)); 502 md.setSchemaName(col, rsmd.getSchemaName(col)); 503 md.setPrecision(col, rsmd.getPrecision(col)); 504 md.setScale(col, rsmd.getScale(col)); 505 md.setTableName(col, rsmd.getTableName(col)); 506 md.setCatalogName(col, rsmd.getCatalogName(col)); 507 md.setColumnType(col, rsmd.getColumnType(col)); 508 md.setColumnTypeName(col, rsmd.getColumnTypeName(col)); 509 } 510 } 511 512 513 protected void checkState() throws SQLException { 514 515 // If all the three i.e. conn, ps & rs are 516 // simultaneously null implies we are not connected 517 // to the db, implies undesirable state so throw exception 518 519 if (conn == null && ps == null && rs == null ) { 520 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.invalstate").toString()); 521 } 522 } 523 524 //--------------------------------------------------------------------- 525 // Reading and writing data 526 //--------------------------------------------------------------------- 527 528 /** 529 * Creates the internal <code>ResultSet</code> object for which this 530 * <code>JdbcRowSet</code> object is a wrapper, effectively 531 * making the result set a JavaBeans component. 532 * <P> 533 * Certain properties must have been set before this method is called 534 * so that it can establish a connection to a database and execute the 535 * query that will create the result set. If a <code>DataSource</code> 536 * object will be used to create the connection, properties for the 537 * data source name, user name, and password must be set. If the 538 * <code>DriverManager</code> will be used, the properties for the 539 * URL, user name, and password must be set. In either case, the 540 * property for the command must be set. If the command has placeholder 541 * parameters, those must also be set. This method throws 542 * an exception if the required properties are not set. 543 * <P> 544 * Other properties have default values that may optionally be set 545 * to new values. The <code>execute</code> method will use the value 546 * for the command property to create a <code>PreparedStatement</code> 547 * object and set its properties (escape processing, maximum field 548 * size, maximum number of rows, and query timeout limit) to be those 549 * of this rowset. 550 * 551 * @throws SQLException if (1) a database access error occurs, 552 * (2) any required JDBC properties are not set, or (3) if an 553 * invalid connection exists. 554 */ 555 public void execute() throws SQLException { 556 /* 557 * To execute based on the properties: 558 * i) determine how to get a connection 559 * ii) prepare the statement 560 * iii) set the properties of the statement 561 * iv) parse the params. and set them 562 * v) execute the statement 563 * 564 * During all of this try to tolerate as many errors 565 * as possible, many drivers will not support all of 566 * the properties and will/should throw SQLException 567 * at us... 568 * 569 */ 570 571 prepare(); 572 573 // set the properties of our shiny new statement 574 setProperties(ps); 575 576 577 // set the parameters 578 decodeParams(getParams(), ps); 579 580 581 // execute the statement 582 rs = ps.executeQuery(); 583 584 585 // notify listeners 586 notifyRowSetChanged(); 587 588 589 } 590 591 protected void setProperties(PreparedStatement ps) throws SQLException { 592 593 try { 594 ps.setEscapeProcessing(getEscapeProcessing()); 595 } catch (SQLException ex) { 596 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + 597 ex.getLocalizedMessage()); 598 } 599 600 try { 601 ps.setMaxFieldSize(getMaxFieldSize()); 602 } catch (SQLException ex) { 603 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + 604 ex.getLocalizedMessage()); 605 } 606 607 try { 608 ps.setMaxRows(getMaxRows()); 609 } catch (SQLException ex) { 610 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + 611 ex.getLocalizedMessage()); 612 } 613 614 try { 615 ps.setQueryTimeout(getQueryTimeout()); 616 } catch (SQLException ex) { 617 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + 618 ex.getLocalizedMessage()); 619 } 620 621 } 622 623 // An alternate solution is required instead of having the 624 // connect method as protected. 625 // This is a work around to assist Rave Team 626 // :ah 627 628 protected Connection connect() throws SQLException { 629 630 // Get a JDBC connection. 631 632 // First check for Connection handle object as such if 633 // "this" initialized using conn. 634 635 if(conn != null) { 636 return conn; 637 638 } else if (getDataSourceName() != null) { 639 640 // Connect using JNDI. 641 try { 642 Context ctx = new InitialContext(); 643 DataSource ds = (DataSource)ctx.lookup 644 (getDataSourceName()); 645 //return ds.getConnection(getUsername(),getPassword()); 646 647 if(getUsername() != null && !getUsername().equals("")) { 648 return ds.getConnection(getUsername(),getPassword()); 649 } else { 650 return ds.getConnection(); 651 } 652 } 653 catch (javax.naming.NamingException ex) { 654 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.connect").toString()); 655 } 656 657 } else if (getUrl() != null) { 658 // Check only for getUrl() != null because 659 // user, passwd can be null 660 // Connect using the driver manager. 661 662 return DriverManager.getConnection 663 (getUrl(), getUsername(), getPassword()); 664 } 665 else { 666 return null; 667 } 668 669 } 670 671 672 protected PreparedStatement prepare() throws SQLException { 673 // get a connection 674 conn = connect(); 675 676 try { 677 678 Map<String, Class<?>> aMap = getTypeMap(); 679 if( aMap != null) { 680 conn.setTypeMap(aMap); 681 } 682 ps = conn.prepareStatement(getCommand(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 683 } catch (SQLException ex) { 684 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.prepare").toString() + 685 ex.getLocalizedMessage()); 686 687 if (ps != null) 688 ps.close(); 689 if (conn != null) 690 conn.close(); 691 692 throw new SQLException(ex.getMessage()); 693 } 694 695 return ps; 696 } 697 698 private void decodeParams(Object[] params, PreparedStatement ps) 699 throws SQLException { 700 701 // There is a corresponding decodeParams in JdbcRowSetImpl 702 // which does the same as this method. This is a design flaw. 703 // Update the CachedRowsetReader.decodeParams when you update 704 // this method. 705 706 // Adding the same comments to CachedRowsetReader.decodeParams. 707 708 int arraySize; 709 Object[] param = null; 710 711 for (int i=0; i < params.length; i++) { 712 if (params[i] instanceof Object[]) { 713 param = (Object[])params[i]; 714 715 if (param.length == 2) { 716 if (param[0] == null) { 717 ps.setNull(i + 1, ((Integer)param[1]).intValue()); 718 continue; 719 } 720 721 if (param[0] instanceof java.sql.Date || 722 param[0] instanceof java.sql.Time || 723 param[0] instanceof java.sql.Timestamp) { 724 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detecteddate")); 725 if (param[1] instanceof java.util.Calendar) { 726 System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detectedcalendar")); 727 ps.setDate(i + 1, (java.sql.Date)param[0], 728 (java.util.Calendar)param[1]); 729 continue; 730 } 731 else { 732 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); 733 } 734 } 735 736 if (param[0] instanceof Reader) { 737 ps.setCharacterStream(i + 1, (Reader)param[0], 738 ((Integer)param[1]).intValue()); 739 continue; 740 } 741 742 /* 743 * What's left should be setObject(int, Object, scale) 744 */ 745 if (param[1] instanceof Integer) { 746 ps.setObject(i + 1, param[0], ((Integer)param[1]).intValue()); 747 continue; 748 } 749 750 } else if (param.length == 3) { 751 752 if (param[0] == null) { 753 ps.setNull(i + 1, ((Integer)param[1]).intValue(), 754 (String)param[2]); 755 continue; 756 } 757 758 if (param[0] instanceof java.io.InputStream) { 759 switch (((Integer)param[2]).intValue()) { 760 case JdbcRowSetImpl.UNICODE_STREAM_PARAM: 761 ps.setUnicodeStream(i + 1, 762 (java.io.InputStream)param[0], 763 ((Integer)param[1]).intValue()); 764 case JdbcRowSetImpl.BINARY_STREAM_PARAM: 765 ps.setBinaryStream(i + 1, 766 (java.io.InputStream)param[0], 767 ((Integer)param[1]).intValue()); 768 case JdbcRowSetImpl.ASCII_STREAM_PARAM: 769 ps.setAsciiStream(i + 1, 770 (java.io.InputStream)param[0], 771 ((Integer)param[1]).intValue()); 772 default: 773 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); 774 } 775 } 776 777 /* 778 * no point at looking at the first element now; 779 * what's left must be the setObject() cases. 780 */ 781 if (param[1] instanceof Integer && param[2] instanceof Integer) { 782 ps.setObject(i + 1, param[0], ((Integer)param[1]).intValue(), 783 ((Integer)param[2]).intValue()); 784 continue; 785 } 786 787 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); 788 789 } else { 790 // common case - this catches all SQL92 types 791 ps.setObject(i + 1, params[i]); 792 continue; 793 } 794 } else { 795 // Try to get all the params to be set here 796 ps.setObject(i + 1, params[i]); 797 798 } 799 } 800 } 801 802 /** 803 * Moves the cursor for this rowset's <code>ResultSet</code> 804 * object down one row from its current position. 805 * A <code>ResultSet</code> cursor is initially positioned 806 * before the first row; the first call to the method 807 * <code>next</code> makes the first row the current row; the 808 * second call makes the second row the current row, and so on. 809 * 810 * <P>If an input stream is open for the current row, a call 811 * to the method <code>next</code> will 812 * implicitly close it. A <code>ResultSet</code> object's 813 * warning chain is cleared when a new row is read. 814 * 815 * @return <code>true</code> if the new current row is valid; 816 * <code>false</code> if there are no more rows 817 * @throws SQLException if a database access error occurs 818 * or this rowset does not currently have a valid connection, 819 * prepared statement, and result set 820 */ 821 public boolean next() throws SQLException { 822 checkState(); 823 824 boolean b = rs.next(); 825 notifyCursorMoved(); 826 return b; 827 } 828 829 /** 830 * Releases this rowset's <code>ResultSet</code> object's database and 831 * JDBC resources immediately instead of waiting for 832 * this to happen when it is automatically closed. 833 * 834 * <P><B>Note:</B> A <code>ResultSet</code> object 835 * is automatically closed by the 836 * <code>Statement</code> object that generated it when 837 * that <code>Statement</code> object is closed, 838 * re-executed, or is used to retrieve the next result from a 839 * sequence of multiple results. A <code>ResultSet</code> object 840 * is also automatically closed when it is garbage collected. 841 * 842 * @throws SQLException if a database access error occurs 843 */ 844 public void close() throws SQLException { 845 if (rs != null) 846 rs.close(); 847 if (ps != null) 848 ps.close(); 849 if (conn != null) 850 conn.close(); 851 } 852 853 /** 854 * Reports whether the last column read from this rowset's 855 * <code>ResultSet</code> object had a value of SQL <code>NULL</code>. 856 * Note that you must first call one of the <code>getXXX</code> methods 857 * on a column to try to read its value and then call 858 * the method <code>wasNull</code> to see if the value read was 859 * SQL <code>NULL</code>. 860 * 861 * @return <code>true</code> if the last column value read was SQL 862 * <code>NULL</code> and <code>false</code> otherwise 863 * @throws SQLException if a database access error occurs 864 * or this rowset does not have a currently valid connection, 865 * prepared statement, and result set 866 */ 867 public boolean wasNull() throws SQLException { 868 checkState(); 869 870 return rs.wasNull(); 871 } 872 873 //====================================================================== 874 // Methods for accessing results by column index 875 //====================================================================== 876 877 /** 878 * Gets the value of the designated column in the current row 879 * of this rowset's <code>ResultSet</code> object as 880 * a <code>String</code>. 881 * 882 * @param columnIndex the first column is 1, the second is 2, and so on 883 * @return the column value; if the value is SQL <code>NULL</code>, the 884 * value returned is <code>null</code> 885 * @throws SQLException if (1) a database access error occurs 886 * or (2) this rowset does not currently have a valid connection, 887 * prepared statement, and result set 888 */ 889 public String getString(int columnIndex) throws SQLException { 890 checkState(); 891 892 return rs.getString(columnIndex); 893 } 894 895 /** 896 * Gets the value of the designated column in the current row 897 * of this rowset's <code>ResultSet</code> object as 898 * a <code>boolean</code>. 899 * 900 * @param columnIndex the first column is 1, the second is 2, and so on 901 * @return the column value; if the value is SQL <code>NULL</code>, the 902 * value returned is <code>false</code> 903 * @throws SQLException if (1) a database access error occurs 904 * or (2) this rowset does not have a currently valid connection, 905 * prepared statement, and result set 906 */ 907 public boolean getBoolean(int columnIndex) throws SQLException { 908 checkState(); 909 910 return rs.getBoolean(columnIndex); 911 } 912 913 /** 914 * Gets the value of the designated column in the current row 915 * of this rowset's <code>ResultSet</code> object as 916 * a <code>byte</code>. 917 * 918 * @param columnIndex the first column is 1, the second is 2, and so on 919 * @return the column value; if the value is SQL <code>NULL</code>, the 920 * value returned is <code>0</code> 921 * @throws SQLException if (1) a database access error occurs 922 * or (2) this rowset does not have a currently valid connection, 923 * prepared statement, and result set 924 */ 925 public byte getByte(int columnIndex) throws SQLException { 926 checkState(); 927 928 return rs.getByte(columnIndex); 929 } 930 931 /** 932 * Gets the value of the designated column in the current row 933 * of this rowset's <code>ResultSet</code> object as 934 * a <code>short</code>. 935 * 936 * @param columnIndex the first column is 1, the second is 2, and so on 937 * @return the column value; if the value is SQL <code>NULL</code>, the 938 * value returned is <code>0</code> 939 * @throws SQLException if (1) a database access error occurs 940 * or (2) this rowset does not have a currently valid connection, 941 * prepared statement, and result set 942 */ 943 public short getShort(int columnIndex) throws SQLException { 944 checkState(); 945 946 return rs.getShort(columnIndex); 947 } 948 949 /** 950 * Gets the value of the designated column in the current row 951 * of this rowset's <code>ResultSet</code> object as 952 * an <code>int</code>. 953 * 954 * @param columnIndex the first column is 1, the second is 2, and so on 955 * @return the column value; if the value is SQL <code>NULL</code>, the 956 * value returned is <code>0</code> 957 * @throws SQLException if (1) a database access error occurs 958 * or (2) this rowset does not have a currently valid connection, 959 * prepared statement, and result set 960 */ 961 public int getInt(int columnIndex) throws SQLException { 962 checkState(); 963 964 return rs.getInt(columnIndex); 965 } 966 967 /** 968 * Gets the value of the designated column in the current row 969 * of this rowset's <code>ResultSet</code> object as 970 * a <code>long</code>. 971 * 972 * @param columnIndex the first column is 1, the second is 2, and so on 973 * @return the column value; if the value is SQL <code>NULL</code>, the 974 * value returned is <code>0</code> 975 * @throws SQLException if (1) a database access error occurs 976 * or (2) this rowset does not have a currently valid connection, 977 * prepared statement, and result set 978 */ 979 public long getLong(int columnIndex) throws SQLException { 980 checkState(); 981 982 return rs.getLong(columnIndex); 983 } 984 985 /** 986 * Gets the value of the designated column in the current row 987 * of this rowset's <code>ResultSet</code> object as 988 * a <code>float</code>. 989 * 990 * @param columnIndex the first column is 1, the second is 2, and so on 991 * @return the column value; if the value is SQL <code>NULL</code>, the 992 * value returned is <code>0</code> 993 * @throws SQLException if (1) a database access error occurs 994 * or (2) this rowset does not have a currently valid connection, 995 * prepared statement, and result set 996 */ 997 public float getFloat(int columnIndex) throws SQLException { 998 checkState(); 999 1000 return rs.getFloat(columnIndex); 1001 } 1002 1003 /** 1004 * Gets the value of the designated column in the current row 1005 * of this rowset's <code>ResultSet</code> object as 1006 * a <code>double</code>. 1007 * 1008 * @param columnIndex the first column is 1, the second is 2, and so on 1009 * @return the column value; if the value is SQL <code>NULL</code>, the 1010 * value returned is <code>0</code> 1011 * @throws SQLException if (1) a database access error occurs 1012 * or (2) this rowset does not have a currently valid connection, 1013 * prepared statement, and result set 1014 */ 1015 public double getDouble(int columnIndex) throws SQLException { 1016 checkState(); 1017 1018 return rs.getDouble(columnIndex); 1019 } 1020 1021 /** 1022 * Gets the value of the designated column in the current row 1023 * of this rowset's <code>ResultSet</code> object as 1024 * a <code>java.sql.BigDecimal</code>. 1025 * 1026 * @param columnIndex the first column is 1, the second is 2, and so on 1027 * @param scale the number of digits to the right of the decimal point 1028 * @return the column value; if the value is SQL <code>NULL</code>, the 1029 * value returned is <code>null</code> 1030 * @throws SQLException if (1) database access error occurs 1031 * or (2) this rowset does not have a currently valid connection, 1032 * prepared statement, and result set 1033 * @deprecated 1034 */ 1035 public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException { 1036 checkState(); 1037 1038 return rs.getBigDecimal(columnIndex, scale); 1039 } 1040 1041 /** 1042 * Gets the value of the designated column in the current row 1043 * of this rowset's <code>ResultSet</code> object as 1044 * a <code>byte</code> array in the Java programming language. 1045 * The bytes represent the raw values returned by the driver. 1046 * 1047 * @param columnIndex the first column is 1, the second is 2, and so on 1048 * @return the column value; if the value is SQL <code>NULL</code>, the 1049 * value returned is <code>null</code> 1050 * @throws SQLException if (1) a database access error occurs 1051 * or (2) this rowset does not have a currently valid connection, 1052 * prepared statement, and result set 1053 */ 1054 public byte[] getBytes(int columnIndex) throws SQLException { 1055 checkState(); 1056 1057 return rs.getBytes(columnIndex); 1058 } 1059 1060 /** 1061 * Gets the value of the designated column in the current row 1062 * of this rowset's <code>ResultSet</code> object as 1063 * a <code>java.sql.Date</code> object in the Java programming language. 1064 * 1065 * @param columnIndex the first column is 1, the second is 2, and so on 1066 * @return the column value; if the value is SQL <code>NULL</code>, the 1067 * value returned is <code>null</code> 1068 * @throws SQLException if (1) a database access error occurs 1069 * or (2) this rowset does not have a currently valid connection, 1070 * prepared statement, and result set 1071 */ 1072 public java.sql.Date getDate(int columnIndex) throws SQLException { 1073 checkState(); 1074 1075 return rs.getDate(columnIndex); 1076 } 1077 1078 /** 1079 * Gets the value of the designated column in the current row 1080 * of this rowset's <code>ResultSet</code> object as 1081 * a <code>java.sql.Time</code> object in the Java programming language. 1082 * 1083 * @param columnIndex the first column is 1, the second is 2, and so on 1084 * @return the column value; if the value is SQL <code>NULL</code>, the 1085 * value returned is <code>null</code> 1086 * @throws SQLException if (1) a database access error occurs 1087 * or (2) this rowset does not have a currently valid connection, 1088 * prepared statement, and result set 1089 */ 1090 public java.sql.Time getTime(int columnIndex) throws SQLException { 1091 checkState(); 1092 1093 return rs.getTime(columnIndex); 1094 } 1095 1096 /** 1097 * Gets the value of the designated column in the current row 1098 * of this rowset's <code>ResultSet</code> object as 1099 * a <code>java.sql.Timestamp</code> object in the Java programming language. 1100 * 1101 * @param columnIndex the first column is 1, the second is 2, and so on 1102 * @return the column value; if the value is SQL <code>NULL</code>, the 1103 * value returned is <code>null</code> 1104 * @throws SQLException if (1) a database access error occurs 1105 * or (2) this rowset does not have a currently valid connection, 1106 * prepared statement, and result set 1107 */ 1108 public java.sql.Timestamp getTimestamp(int columnIndex) throws SQLException { 1109 checkState(); 1110 1111 return rs.getTimestamp(columnIndex); 1112 } 1113 1114 /** 1115 * Gets the value of the designated column in the current row 1116 * of this rowset's <code>ResultSet</code> object as 1117 * a stream of ASCII characters. The value can then be read in chunks from the 1118 * stream. This method is particularly 1119 * suitable for retrieving large <code>LONGVARCHAR</code> values. 1120 * The JDBC driver will 1121 * do any necessary conversion from the database format into ASCII. 1122 * 1123 * <P><B>Note:</B> All the data in the returned stream must be 1124 * read prior to getting the value of any other column. The next 1125 * call to a <code>getXXX</code> method implicitly closes the stream. Also, a 1126 * stream may return <code>0</code> when the method 1127 * <code>InputStream.available</code> 1128 * is called whether there is data available or not. 1129 * 1130 * @param columnIndex the first column is 1, the second is 2, and so on 1131 * @return a Java input stream that delivers the database column value 1132 * as a stream of one-byte ASCII characters; 1133 * if the value is SQL <code>NULL</code>, the 1134 * value returned is <code>null</code> 1135 * @throws SQLException if (1) database access error occurs 1136 * (2) this rowset does not have a currently valid connection, 1137 * prepared statement, and result set 1138 */ 1139 public java.io.InputStream getAsciiStream(int columnIndex) throws SQLException { 1140 checkState(); 1141 1142 return rs.getAsciiStream(columnIndex); 1143 } 1144 1145 /** 1146 * Gets the value of the designated column in the current row 1147 * of this rowset's <code>ResultSet</code> object as 1148 * as a stream of Unicode characters. 1149 * The value can then be read in chunks from the 1150 * stream. This method is particularly 1151 * suitable for retrieving large<code>LONGVARCHAR</code>values. The JDBC driver will 1152 * do any necessary conversion from the database format into Unicode. 1153 * The byte format of the Unicode stream must be Java UTF-8, 1154 * as specified in the Java virtual machine specification. 1155 * 1156 * <P><B>Note:</B> All the data in the returned stream must be 1157 * read prior to getting the value of any other column. The next 1158 * call to a <code>getXXX</code> method implicitly closes the stream. Also, a 1159 * stream may return <code>0</code> when the method 1160 * <code>InputStream.available</code> 1161 * is called whether there is data available or not. 1162 * 1163 * @param columnIndex the first column is 1, the second is 2, and so on 1164 * @return a Java input stream that delivers the database column value 1165 * as a stream in Java UTF-8 byte format; 1166 * if the value is SQL <code>NULL</code>, the value returned is <code>null</code> 1167 * @throws SQLException if (1) a database access error occurs 1168 * or (2) this rowset does not have a currently valid connection, 1169 * prepared statement, and result set 1170 * @deprecated use <code>getCharacterStream</code> in place of 1171 * <code>getUnicodeStream</code> 1172 */ 1173 public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException { 1174 checkState(); 1175 1176 return rs.getUnicodeStream(columnIndex); 1177 } 1178 1179 /** 1180 * Gets the value of a column in the current row as a stream of 1181 * the value of the designated column in the current row 1182 * of this rowset's <code>ResultSet</code> object as a binary stream of 1183 * uninterpreted bytes. The value can then be read in chunks from the 1184 * stream. This method is particularly 1185 * suitable for retrieving large <code>LONGVARBINARY</code> values. 1186 * 1187 * <P><B>Note:</B> All the data in the returned stream must be 1188 * read prior to getting the value of any other column. The next 1189 * call to a <code>getXXX</code> method implicitly closes the stream. Also, a 1190 * stream may return <code>0</code> when the method 1191 * <code>InputStream.available</code> 1192 * is called whether there is data available or not. 1193 * 1194 * @param columnIndex the first column is 1, the second is 2, and so on 1195 * @return a Java input stream that delivers the database column value 1196 * as a stream of uninterpreted bytes; 1197 * if the value is SQL <code>NULL</code>, the value returned is <code>null</code> 1198 * @throws SQLException if (1) a database access error occurs 1199 * or (2) this rowset does not have a currently valid connection, 1200 * prepared statement, and result set 1201 */ 1202 public java.io.InputStream getBinaryStream(int columnIndex) throws SQLException { 1203 checkState(); 1204 1205 return rs.getBinaryStream(columnIndex); 1206 } 1207 1208 1209 //====================================================================== 1210 // Methods for accessing results by column name 1211 //====================================================================== 1212 1213 /** 1214 * Gets the value of the designated column in the current row 1215 * of this rowset's <code>ResultSet</code> object as 1216 * a <code>String</code>. 1217 * 1218 * @param columnName the SQL name of the column 1219 * @return the column value; if the value is SQL <code>NULL</code>, the 1220 * value returned is <code>null</code> 1221 * @throws SQLException if (1) a database access error occurs 1222 * or (2) this rowset does not have a currently valid connection, 1223 * prepared statement, and result set 1224 */ 1225 public String getString(String columnName) throws SQLException { 1226 return getString(findColumn(columnName)); 1227 } 1228 1229 /** 1230 * Gets the value of the designated column in the current row 1231 * of this rowset's <code>ResultSet</code> object as 1232 * a <code>boolean</code>. 1233 * 1234 * @param columnName the SQL name of the column 1235 * @return the column value; if the value is SQL <code>NULL</code>, the 1236 * value returned is <code>false</code> 1237 * @throws SQLException if (1) a database access error occurs 1238 * or (2) this rowset does not have a currently valid connection, 1239 * prepared statement, and result set 1240 */ 1241 public boolean getBoolean(String columnName) throws SQLException { 1242 return getBoolean(findColumn(columnName)); 1243 } 1244 1245 /** 1246 * Gets the value of the designated column in the current row 1247 * of this rowset's <code>ResultSet</code> object as 1248 * a <code>byte</code>. 1249 * 1250 * @param columnName the SQL name of the column 1251 * @return the column value; if the value is SQL <code>NULL</code>, the 1252 * value returned is <code>0</code> 1253 * @throws SQLException if (1) a database access error occurs 1254 * or (2) this rowset does not have a currently valid connection, 1255 * prepared statement, and result set 1256 */ 1257 public byte getByte(String columnName) throws SQLException { 1258 return getByte(findColumn(columnName)); 1259 } 1260 1261 /** 1262 * Gets the value of the designated column in the current row 1263 * of this rowset's <code>ResultSet</code> object as 1264 * a <code>short</code>. 1265 * 1266 * @param columnName the SQL name of the column 1267 * @return the column value; if the value is SQL <code>NULL</code>, the 1268 * value returned is <code>0</code> 1269 * @throws SQLException if (1) a database access error occurs 1270 * or (2) this rowset does not have a currently valid connection, 1271 * prepared statement, and result set 1272 */ 1273 public short getShort(String columnName) throws SQLException { 1274 return getShort(findColumn(columnName)); 1275 } 1276 1277 /** 1278 * Gets the value of the designated column in the current row 1279 * of this rowset's <code>ResultSet</code> object as 1280 * an <code>int</code>. 1281 * 1282 * @param columnName the SQL name of the column 1283 * @return the column value; if the value is SQL <code>NULL</code>, the 1284 * value returned is <code>0</code> 1285 * @throws SQLException if (1) a database access error occurs 1286 * or (2) this rowset does not have a currently valid connection, 1287 * prepared statement, and result set 1288 */ 1289 public int getInt(String columnName) throws SQLException { 1290 return getInt(findColumn(columnName)); 1291 } 1292 1293 /** 1294 * Gets the value of the designated column in the current row 1295 * of this rowset's <code>ResultSet</code> object as 1296 * a <code>long</code>. 1297 * 1298 * @param columnName the SQL name of the column 1299 * @return the column value; if the value is SQL <code>NULL</code>, the 1300 * value returned is <code>0</code> 1301 * @throws SQLException if a database access error occurs 1302 * or this rowset does not have a currently valid connection, 1303 * prepared statement, and result set 1304 */ 1305 public long getLong(String columnName) throws SQLException { 1306 return getLong(findColumn(columnName)); 1307 } 1308 1309 /** 1310 * Gets the value of the designated column in the current row 1311 * of this rowset's <code>ResultSet</code> object as 1312 * a <code>float</code>. 1313 * 1314 * @param columnName the SQL name of the column 1315 * @return the column value; if the value is SQL <code>NULL</code>, the 1316 * value returned is <code>0</code> 1317 * @throws SQLException if (1) a database access error occurs 1318 * or (2) this rowset does not have a currently valid connection, 1319 * prepared statement, and result set 1320 */ 1321 public float getFloat(String columnName) throws SQLException { 1322 return getFloat(findColumn(columnName)); 1323 } 1324 1325 /** 1326 * Gets the value of the designated column in the current row 1327 * of this rowset's <code>ResultSet</code> object as 1328 * a <code>double</code>. 1329 * 1330 * @param columnName the SQL name of the column 1331 * @return the column value; if the value is SQL <code>NULL</code>, the 1332 * value returned is <code>0</code> 1333 * @throws SQLException if (1) a database access error occurs 1334 * or (2) this rowset does not have a currently valid connection, 1335 * prepared statement, and result set 1336 */ 1337 public double getDouble(String columnName) throws SQLException { 1338 return getDouble(findColumn(columnName)); 1339 } 1340 1341 /** 1342 * Gets the value of the designated column in the current row 1343 * of this rowset's <code>ResultSet</code> object as 1344 * a <code>java.math.BigDecimal</code>. 1345 * 1346 * @param columnName the SQL name of the column 1347 * @param scale the number of digits to the right of the decimal point 1348 * @return the column value; if the value is SQL <code>NULL</code>, the 1349 * value returned is <code>null</code> 1350 * @throws SQLException if (1) adatabase access error occurs 1351 * or (2) this rowset does not have a currently valid connection, 1352 * prepared statement, and result set 1353 * @deprecated 1354 */ 1355 public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException { 1356 return getBigDecimal(findColumn(columnName), scale); 1357 } 1358 1359 /** 1360 * Gets the value of the designated column in the current row 1361 * of this rowset's <code>ResultSet</code> object as 1362 * a <code>byte</code> array in the Java programming language. 1363 * The bytes represent the raw values returned by the driver. 1364 * 1365 * @param columnName the SQL name of the column 1366 * @return the column value; if the value is SQL <code>NULL</code>, the 1367 * value returned is <code>null</code> 1368 * @throws SQLException if (1) a database access error occurs 1369 * or (2) this rowset does not have a currently valid connection, 1370 * prepared statement, and result set 1371 */ 1372 public byte[] getBytes(String columnName) throws SQLException { 1373 return getBytes(findColumn(columnName)); 1374 } 1375 1376 /** 1377 * Gets the value of the designated column in the current row 1378 * of this rowset's <code>ResultSet</code> object as 1379 * a <code>java.sql.Date</code> object in the Java programming language. 1380 * 1381 * @param columnName the SQL name of the column 1382 * @return the column value; if the value is SQL <code>NULL</code>, the 1383 * value returned is <code>null</code> 1384 * @throws SQLException if (1) a database access error occurs 1385 * or (2) this rowset does not have a currently valid connection, 1386 * prepared statement, and result set 1387 */ 1388 public java.sql.Date getDate(String columnName) throws SQLException { 1389 return getDate(findColumn(columnName)); 1390 } 1391 1392 /** 1393 * Gets the value of the designated column in the current row 1394 * of this rowset's <code>ResultSet</code> object as 1395 * a <code>java.sql.Time</code> object in the Java programming language. 1396 * 1397 * @param columnName the SQL name of the column 1398 * @return the column value; 1399 * if the value is SQL <code>NULL</code>, 1400 * the value returned is <code>null</code> 1401 * @throws SQLException if (1) a database access error occurs 1402 * or (2) this rowset does not have a currently valid connection, 1403 * prepared statement, and result set 1404 */ 1405 public java.sql.Time getTime(String columnName) throws SQLException { 1406 return getTime(findColumn(columnName)); 1407 } 1408 1409 /** 1410 * Gets the value of the designated column in the current row 1411 * of this rowset's <code>ResultSet</code> object as 1412 * a <code>java.sql.Timestamp</code> object. 1413 * 1414 * @param columnName the SQL name of the column 1415 * @return the column value; if the value is SQL <code>NULL</code>, the 1416 * value returned is <code>null</code> 1417 * @throws SQLException if (1) a database access error occurs 1418 * or (2) this rowset does not have a currently valid connection, 1419 * prepared statement, and result set 1420 */ 1421 public java.sql.Timestamp getTimestamp(String columnName) throws SQLException { 1422 return getTimestamp(findColumn(columnName)); 1423 } 1424 1425 /** 1426 * Gets the value of the designated column in the current row 1427 * of this rowset's <code>ResultSet</code> object as a stream of 1428 * ASCII characters. The value can then be read in chunks from the 1429 * stream. This method is particularly 1430 * suitable for retrieving large <code>LONGVARCHAR</code> values. 1431 * The JDBC driver will 1432 * do any necessary conversion from the database format into ASCII. 1433 * 1434 * <P><B>Note:</B> All the data in the returned stream must be 1435 * read prior to getting the value of any other column. The next 1436 * call to a <code>getXXX</code> method implicitly closes the stream. Also, a 1437 * stream may return <code>0</code> when the method <code>available</code> 1438 * is called whether there is data available or not. 1439 * 1440 * @param columnName the SQL name of the column 1441 * @return a Java input stream that delivers the database column value 1442 * as a stream of one-byte ASCII characters. 1443 * If the value is SQL <code>NULL</code>, 1444 * the value returned is <code>null</code>. 1445 * @throws SQLException if (1) a database access error occurs 1446 * or (2) this rowset does not have a currently valid connection, 1447 * prepared statement, and result set 1448 */ 1449 public java.io.InputStream getAsciiStream(String columnName) throws SQLException { 1450 return getAsciiStream(findColumn(columnName)); 1451 } 1452 1453 /** 1454 * Gets the value of the designated column in the current row 1455 * of this rowset's <code>ResultSet</code> object as a stream of 1456 * Unicode characters. The value can then be read in chunks from the 1457 * stream. This method is particularly 1458 * suitable for retrieving large <code>LONGVARCHAR</code> values. 1459 * The JDBC driver will 1460 * do any necessary conversion from the database format into Unicode. 1461 * The byte format of the Unicode stream must be Java UTF-8, 1462 * as defined in the Java virtual machine specification. 1463 * 1464 * <P><B>Note:</B> All the data in the returned stream must be 1465 * read prior to getting the value of any other column. The next 1466 * call to a <code>getXXX</code> method implicitly closes the stream. Also, a 1467 * stream may return <code>0</code> when the method <code>available</code> 1468 * is called whether there is data available or not. 1469 * 1470 * @param columnName the SQL name of the column 1471 * @return a Java input stream that delivers the database column value 1472 * as a stream of two-byte Unicode characters. 1473 * If the value is SQL <code>NULL</code>, 1474 * the value returned is <code>null</code>. 1475 * @throws SQLException if (1) a database access error occurs 1476 * or (2) this rowset does not have a currently valid connection, 1477 * prepared statement, and result set 1478 * @deprecated 1479 */ 1480 public java.io.InputStream getUnicodeStream(String columnName) throws SQLException { 1481 return getUnicodeStream(findColumn(columnName)); 1482 } 1483 1484 /** 1485 * Gets the value of the designated column in the current row 1486 * of this rowset's <code>ResultSet</code> object as a stream of uninterpreted 1487 * <code>byte</code>s. 1488 * The value can then be read in chunks from the 1489 * stream. This method is particularly 1490 * suitable for retrieving large <code>LONGVARBINARY</code> 1491 * values. 1492 * 1493 * <P><B>Note:</B> All the data in the returned stream must be 1494 * read prior to getting the value of any other column. The next 1495 * call to a <code>getXXX</code> method implicitly closes the stream. Also, a 1496 * stream may return <code>0</code> when the method <code>available</code> 1497 * is called whether there is data available or not. 1498 * 1499 * @param columnName the SQL name of the column 1500 * @return a Java input stream that delivers the database column value 1501 * as a stream of uninterpreted bytes; 1502 * if the value is SQL <code>NULL</code>, the result is <code>null</code> 1503 * @throws SQLException if (1) a database access error occurs 1504 * or (2) this rowset does not have a currently valid connection, 1505 * prepared statement, and result set 1506 */ 1507 public java.io.InputStream getBinaryStream(String columnName) throws SQLException { 1508 return getBinaryStream(findColumn(columnName)); 1509 } 1510 1511 1512 //===================================================================== 1513 // Advanced features: 1514 //===================================================================== 1515 1516 /** 1517 * Returns the first warning reported by calls on this rowset's 1518 * <code>ResultSet</code> object. 1519 * Subsequent warnings on this rowset's <code>ResultSet</code> object 1520 * will be chained to the <code>SQLWarning</code> object that 1521 * this method returns. 1522 * 1523 * <P>The warning chain is automatically cleared each time a new 1524 * row is read. 1525 * 1526 * <P><B>Note:</B> This warning chain only covers warnings caused 1527 * by <code>ResultSet</code> methods. Any warning caused by 1528 * <code>Statement</code> methods 1529 * (such as reading OUT parameters) will be chained on the 1530 * <code>Statement</code> object. 1531 * 1532 * @return the first <code>SQLWarning</code> object reported or <code>null</code> 1533 * @throws SQLException if (1) a database access error occurs 1534 * or (2) this rowset does not have a currently valid connection, 1535 * prepared statement, and result set 1536 */ 1537 public SQLWarning getWarnings() throws SQLException { 1538 checkState(); 1539 1540 return rs.getWarnings(); 1541 } 1542 1543 /** 1544 * Clears all warnings reported on this rowset's <code>ResultSet</code> object. 1545 * After this method is called, the method <code>getWarnings</code> 1546 * returns <code>null</code> until a new warning is 1547 * reported for this rowset's <code>ResultSet</code> object. 1548 * 1549 * @throws SQLException if (1) a database access error occurs 1550 * or (2) this rowset does not have a currently valid connection, 1551 * prepared statement, and result set 1552 */ 1553 public void clearWarnings() throws SQLException { 1554 checkState(); 1555 1556 rs.clearWarnings(); 1557 } 1558 1559 /** 1560 * Gets the name of the SQL cursor used by this rowset's <code>ResultSet</code> 1561 * object. 1562 * 1563 * <P>In SQL, a result table is retrieved through a cursor that is 1564 * named. The current row of a result set can be updated or deleted 1565 * using a positioned update/delete statement that references the 1566 * cursor name. To insure that the cursor has the proper isolation 1567 * level to support update, the cursor's <code>select</code> statement should be 1568 * of the form 'select for update'. If the 'for update' clause is 1569 * omitted, the positioned updates may fail. 1570 * 1571 * <P>The JDBC API supports this SQL feature by providing the name of the 1572 * SQL cursor used by a <code>ResultSet</code> object. 1573 * The current row of a <code>ResultSet</code> object 1574 * is also the current row of this SQL cursor. 1575 * 1576 * <P><B>Note:</B> If positioned update is not supported, a 1577 * <code>SQLException</code> is thrown. 1578 * 1579 * @return the SQL name for this rowset's <code>ResultSet</code> object's cursor 1580 * @throws SQLException if (1) a database access error occurs 1581 * or (2) xthis rowset does not have a currently valid connection, 1582 * prepared statement, and result set 1583 */ 1584 public String getCursorName() throws SQLException { 1585 checkState(); 1586 1587 return rs.getCursorName(); 1588 } 1589 1590 /** 1591 * Retrieves the number, types and properties of 1592 * this rowset's <code>ResultSet</code> object's columns. 1593 * 1594 * @return the description of this rowset's <code>ResultSet</code> 1595 * object's columns 1596 * @throws SQLException if (1) a database access error occurs 1597 * or (2) this rowset does not have a currently valid connection, 1598 * prepared statement, and result set 1599 */ 1600 public ResultSetMetaData getMetaData() throws SQLException { 1601 1602 checkState(); 1603 1604 // It may be the case that JdbcRowSet might not have been 1605 // initialized with ResultSet handle and may be by PreparedStatement 1606 // internally when we set JdbcRowSet.setCommand(). 1607 // We may require all the basic properties of setEscapeProcessing 1608 // setMaxFieldSize etc. which an application can use before we call 1609 // execute. 1610 try { 1611 checkState(); 1612 } catch(SQLException sqle) { 1613 prepare(); 1614 // will return ResultSetMetaData 1615 return ps.getMetaData(); 1616 } 1617 return rs.getMetaData(); 1618 } 1619 1620 /** 1621 * <p>Gets the value of the designated column in the current row 1622 * of this rowset's <code>ResultSet</code> object as 1623 * an <code>Object</code>. 1624 * 1625 * <p>This method will return the value of the given column as a 1626 * Java object. The type of the Java object will be the default 1627 * Java object type corresponding to the column's SQL type, 1628 * following the mapping for built-in types specified in the JDBC 1629 * specification. 1630 * 1631 * <p>This method may also be used to read datatabase-specific 1632 * abstract data types. 1633 * 1634 * In the JDBC 3.0 API, the behavior of method 1635 * <code>getObject</code> is extended to materialize 1636 * data of SQL user-defined types. When a column contains 1637 * a structured or distinct value, the behavior of this method is as 1638 * if it were a call to: <code>getObject(columnIndex, 1639 * this.getStatement().getConnection().getTypeMap())</code>. 1640 * 1641 * @param columnIndex the first column is 1, the second is 2, and so on 1642 * @return a <code>java.lang.Object</code> holding the column value 1643 * @throws SQLException if (1) a database access error occurs 1644 * or (2) this rowset does not currently have a valid connection, 1645 * prepared statement, and result set 1646 */ 1647 public Object getObject(int columnIndex) throws SQLException { 1648 checkState(); 1649 1650 return rs.getObject(columnIndex); 1651 } 1652 1653 /** 1654 * <p>Gets the value of the designated column in the current row 1655 * of this rowset's <code>ResultSet</code> object as 1656 * an <code>Object</code>. 1657 * 1658 * <p>This method will return the value of the given column as a 1659 * Java object. The type of the Java object will be the default 1660 * Java object type corresponding to the column's SQL type, 1661 * following the mapping for built-in types specified in the JDBC 1662 * specification. 1663 * 1664 * <p>This method may also be used to read datatabase-specific 1665 * abstract data types. 1666 * 1667 * In the JDBC 3.0 API, the behavior of the method 1668 * <code>getObject</code> is extended to materialize 1669 * data of SQL user-defined types. When a column contains 1670 * a structured or distinct value, the behavior of this method is as 1671 * if it were a call to: <code>getObject(columnIndex, 1672 * this.getStatement().getConnection().getTypeMap())</code>. 1673 * 1674 * @param columnName the SQL name of the column 1675 * @return a <code>java.lang.Object</code> holding the column value 1676 * @throws SQLException if (1) a database access error occurs 1677 * or (2) this rowset does not currently have a valid connection, 1678 * prepared statement, and result set 1679 */ 1680 public Object getObject(String columnName) throws SQLException { 1681 return getObject(findColumn(columnName)); 1682 } 1683 1684 //---------------------------------------------------------------- 1685 1686 /** 1687 * Maps the given <code>JdbcRowSetImpl</code> column name to its 1688 * <code>JdbcRowSetImpl</code> column index and reflects this on 1689 * the internal <code>ResultSet</code> object. 1690 * 1691 * @param columnName the name of the column 1692 * @return the column index of the given column name 1693 * @throws SQLException if (1) a database access error occurs 1694 * (2) this rowset does not have a currently valid connection, 1695 * prepared statement, and result set 1696 */ 1697 public int findColumn(String columnName) throws SQLException { 1698 checkState(); 1699 1700 return rs.findColumn(columnName); 1701 } 1702 1703 1704 //--------------------------JDBC 2.0----------------------------------- 1705 1706 //--------------------------------------------------------------------- 1707 // Getters and Setters 1708 //--------------------------------------------------------------------- 1709 1710 /** 1711 * Gets the value of the designated column in the current row 1712 * of this rowset's <code>ResultSet</code> object as a 1713 * <code>java.io.Reader</code> object. 1714 * @return a <code>java.io.Reader</code> object that contains the column 1715 * value; if the value is SQL <code>NULL</code>, the value returned is 1716 * <code>null</code>. 1717 * @param columnIndex the first column is 1, the second is 2, and so on 1718 * 1719 */ 1720 public java.io.Reader getCharacterStream(int columnIndex) throws SQLException { 1721 checkState(); 1722 1723 return rs.getCharacterStream(columnIndex); 1724 } 1725 1726 /** 1727 * Gets the value of the designated column in the current row 1728 * of this rowset's <code>ResultSet</code> object as a 1729 * <code>java.io.Reader</code> object. 1730 * 1731 * @return a <code>java.io.Reader</code> object that contains the column 1732 * value; if the value is SQL <code>NULL</code>, the value returned is 1733 * <code>null</code>. 1734 * @param columnName the name of the column 1735 * @return the value in the specified column as a <code>java.io.Reader</code> 1736 * 1737 */ 1738 public java.io.Reader getCharacterStream(String columnName) throws SQLException { 1739 return getCharacterStream(findColumn(columnName)); 1740 } 1741 1742 /** 1743 * Gets the value of the designated column in the current row 1744 * of this rowset's <code>ResultSet</code> object as a 1745 * <code>java.math.BigDecimal</code> with full precision. 1746 * 1747 * @param columnIndex the first column is 1, the second is 2, and so on 1748 * @return the column value (full precision); 1749 * if the value is SQL <code>NULL</code>, the value returned is 1750 * <code>null</code>. 1751 * @throws SQLException if a database access error occurs 1752 * or this rowset does not currently have a valid 1753 * connection, prepared statement, and result set 1754 */ 1755 public BigDecimal getBigDecimal(int columnIndex) throws SQLException { 1756 checkState(); 1757 1758 return rs.getBigDecimal(columnIndex); 1759 } 1760 1761 /** 1762 * Gets the value of the designated column in the current row 1763 * of this rowset's <code>ResultSet</code> object as a 1764 * <code>java.math.BigDecimal</code> with full precision. 1765 * 1766 * @param columnName the column name 1767 * @return the column value (full precision); 1768 * if the value is SQL <code>NULL</code>, the value returned is 1769 * <code>null</code>. 1770 * @throws SQLException if a database access error occurs 1771 * or this rowset does not currently have a valid 1772 * connection, prepared statement, and result set 1773 */ 1774 public BigDecimal getBigDecimal(String columnName) throws SQLException { 1775 return getBigDecimal(findColumn(columnName)); 1776 } 1777 1778 //--------------------------------------------------------------------- 1779 // Traversal/Positioning 1780 //--------------------------------------------------------------------- 1781 1782 /** 1783 * Indicates whether the cursor is before the first row in 1784 * this rowset's <code>ResultSet</code> object. 1785 * 1786 * @return <code>true</code> if the cursor is before the first row; 1787 * <code>false</code> if the cursor is at any other position or the 1788 * result set contains no rows 1789 * @throws SQLException if a database access error occurs 1790 * or this rowset does not currently have a valid 1791 * connection, prepared statement, and result set 1792 */ 1793 public boolean isBeforeFirst() throws SQLException { 1794 checkState(); 1795 1796 return rs.isBeforeFirst(); 1797 } 1798 1799 /** 1800 * Indicates whether the cursor is after the last row in 1801 * this rowset's <code>ResultSet</code> object. 1802 * 1803 * @return <code>true</code> if the cursor is after the last row; 1804 * <code>false</code> if the cursor is at any other position or the 1805 * result set contains no rows 1806 * @throws SQLException if a database access error occurs 1807 * or this rowset does not currently have a valid 1808 * connection, prepared statement, and result set 1809 */ 1810 public boolean isAfterLast() throws SQLException { 1811 checkState(); 1812 1813 return rs.isAfterLast(); 1814 } 1815 1816 /** 1817 * Indicates whether the cursor is on the first row of 1818 * this rowset's <code>ResultSet</code> object. 1819 * 1820 * @return <code>true</code> if the cursor is on the first row; 1821 * <code>false</code> otherwise 1822 * @throws SQLException if a database access error occurs 1823 * or this rowset does not currently have a valid 1824 * connection, prepared statement, and result set 1825 */ 1826 public boolean isFirst() throws SQLException { 1827 checkState(); 1828 1829 return rs.isFirst(); 1830 } 1831 1832 /** 1833 * Indicates whether the cursor is on the last row of 1834 * this rowset's <code>ResultSet</code> object. 1835 * Note: Calling the method <code>isLast</code> may be expensive 1836 * because the JDBC driver 1837 * might need to fetch ahead one row in order to determine 1838 * whether the current row is the last row in the result set. 1839 * 1840 * @return <code>true</code> if the cursor is on the last row; 1841 * <code>false</code> otherwise 1842 * @throws SQLException if a database access error occurs 1843 * or this rowset does not currently have a valid 1844 * connection, prepared statement, and result set 1845 * 1846 */ 1847 public boolean isLast() throws SQLException { 1848 checkState(); 1849 1850 return rs.isLast(); 1851 } 1852 1853 /** 1854 * Moves the cursor to the front of 1855 * this rowset's <code>ResultSet</code> object, just before the 1856 * first row. This method has no effect if the result set contains no rows. 1857 * 1858 * @throws SQLException if (1) a database access error occurs, 1859 * (2) the result set type is <code>TYPE_FORWARD_ONLY</code>, 1860 * or (3) this rowset does not currently have a valid 1861 * connection, prepared statement, and result set 1862 */ 1863 public void beforeFirst() throws SQLException { 1864 checkState(); 1865 1866 rs.beforeFirst(); 1867 notifyCursorMoved(); 1868 } 1869 1870 /** 1871 * Moves the cursor to the end of 1872 * this rowset's <code>ResultSet</code> object, just after the 1873 * last row. This method has no effect if the result set contains no rows. 1874 * @throws SQLException if (1) a database access error occurs, 1875 * (2) the result set type is <code>TYPE_FORWARD_ONLY</code>, 1876 * or (3) this rowset does not currently have a valid 1877 * connection, prepared statement, and result set 1878 */ 1879 public void afterLast() throws SQLException { 1880 checkState(); 1881 1882 rs.afterLast(); 1883 notifyCursorMoved(); 1884 } 1885 1886 /** 1887 * Moves the cursor to the first row in 1888 * this rowset's <code>ResultSet</code> object. 1889 * 1890 * @return <code>true</code> if the cursor is on a valid row; 1891 * <code>false</code> if there are no rows in the result set 1892 * @throws SQLException if (1) a database access error occurs, 1893 * (2) the result set type is <code>TYPE_FORWARD_ONLY</code>, 1894 * or (3) this rowset does not currently have a valid 1895 * connection, prepared statement, and result set 1896 */ 1897 public boolean first() throws SQLException { 1898 checkState(); 1899 1900 boolean b = rs.first(); 1901 notifyCursorMoved(); 1902 return b; 1903 1904 } 1905 1906 /** 1907 * Moves the cursor to the last row in 1908 * this rowset's <code>ResultSet</code> object. 1909 * 1910 * @return <code>true</code> if the cursor is on a valid row; 1911 * <code>false</code> if there are no rows in the result set 1912 * @throws SQLException if (1) a database access error occurs, 1913 * (2) the result set type is <code>TYPE_FORWARD_ONLY</code>, 1914 * or (3) this rowset does not currently have a valid 1915 * connection, prepared statement, and result set 1916 */ 1917 public boolean last() throws SQLException { 1918 checkState(); 1919 1920 boolean b = rs.last(); 1921 notifyCursorMoved(); 1922 return b; 1923 } 1924 1925 /** 1926 * Retrieves the current row number. The first row is number 1, the 1927 * second is number 2, and so on. 1928 * 1929 * @return the current row number; <code>0</code> if there is no current row 1930 * @throws SQLException if a database access error occurs 1931 * or this rowset does not currently have a valid connection, 1932 * prepared statement, and result set 1933 */ 1934 public int getRow() throws SQLException { 1935 checkState(); 1936 1937 return rs.getRow(); 1938 } 1939 1940 /** 1941 * Moves the cursor to the given row number in 1942 * this rowset's internal <code>ResultSet</code> object. 1943 * 1944 * <p>If the row number is positive, the cursor moves to 1945 * the given row number with respect to the 1946 * beginning of the result set. The first row is row 1, the second 1947 * is row 2, and so on. 1948 * 1949 * <p>If the given row number is negative, the cursor moves to 1950 * an absolute row position with respect to 1951 * the end of the result set. For example, calling the method 1952 * <code>absolute(-1)</code> positions the 1953 * cursor on the last row, calling the method <code>absolute(-2)</code> 1954 * moves the cursor to the next-to-last row, and so on. 1955 * 1956 * <p>An attempt to position the cursor beyond the first/last row in 1957 * the result set leaves the cursor before the first row or after 1958 * the last row. 1959 * 1960 * <p><B>Note:</B> Calling <code>absolute(1)</code> is the same 1961 * as calling <code>first()</code>. Calling <code>absolute(-1)</code> 1962 * is the same as calling <code>last()</code>. 1963 * 1964 * @return <code>true</code> if the cursor is on the result set; 1965 * <code>false</code> otherwise 1966 * @throws SQLException if (1) a database access error occurs, 1967 * (2) the row is <code>0</code>, (3) the result set 1968 * type is <code>TYPE_FORWARD_ONLY</code>, or (4) this 1969 * rowset does not currently have a valid connection, 1970 * prepared statement, and result set 1971 */ 1972 public boolean absolute(int row) throws SQLException { 1973 checkState(); 1974 1975 boolean b = rs.absolute(row); 1976 notifyCursorMoved(); 1977 return b; 1978 } 1979 1980 /** 1981 * Moves the cursor a relative number of rows, either positive or negative. 1982 * Attempting to move beyond the first/last row in the 1983 * result set positions the cursor before/after the 1984 * the first/last row. Calling <code>relative(0)</code> is valid, but does 1985 * not change the cursor position. 1986 * 1987 * <p>Note: Calling the method <code>relative(1)</code> 1988 * is different from calling the method <code>next()</code> 1989 * because is makes sense to call <code>next()</code> when there 1990 * is no current row, 1991 * for example, when the cursor is positioned before the first row 1992 * or after the last row of the result set. 1993 * 1994 * @return <code>true</code> if the cursor is on a row; 1995 * <code>false</code> otherwise 1996 * @throws SQLException if (1) a database access error occurs, 1997 * (2) there is no current row, (3) the result set 1998 * type is <code>TYPE_FORWARD_ONLY</code>, or (4) this 1999 * rowset does not currently have a valid connection, 2000 * prepared statement, and result set 2001 */ 2002 public boolean relative(int rows) throws SQLException { 2003 checkState(); 2004 2005 boolean b = rs.relative(rows); 2006 notifyCursorMoved(); 2007 return b; 2008 } 2009 2010 /** 2011 * Moves the cursor to the previous row in this 2012 * <code>ResultSet</code> object. 2013 * 2014 * <p><B>Note:</B> Calling the method <code>previous()</code> is not the same as 2015 * calling the method <code>relative(-1)</code> because it 2016 * makes sense to call <code>previous()</code> when there is no current row. 2017 * 2018 * @return <code>true</code> if the cursor is on a valid row; 2019 * <code>false</code> if it is off the result set 2020 * @throws SQLException if (1) a database access error occurs, 2021 * (2) the result set type is <code>TYPE_FORWARD_ONLY</code>, 2022 * or (3) this rowset does not currently have a valid 2023 * connection, prepared statement, and result set 2024 */ 2025 public boolean previous() throws SQLException { 2026 checkState(); 2027 2028 boolean b = rs.previous(); 2029 notifyCursorMoved(); 2030 return b; 2031 } 2032 2033 /** 2034 * Gives a hint as to the direction in which the rows in this 2035 * <code>ResultSet</code> object will be processed. 2036 * The initial value is determined by the 2037 * <code>Statement</code> object 2038 * that produced this rowset's <code>ResultSet</code> object. 2039 * The fetch direction may be changed at any time. 2040 * 2041 * @throws SQLException if (1) a database access error occurs, 2042 * (2) the result set type is <code>TYPE_FORWARD_ONLY</code> 2043 * and the fetch direction is not <code>FETCH_FORWARD</code>, 2044 * or (3) this rowset does not currently have a valid 2045 * connection, prepared statement, and result set 2046 * @see java.sql.Statement#setFetchDirection 2047 */ 2048 public void setFetchDirection(int direction) throws SQLException { 2049 checkState(); 2050 2051 rs.setFetchDirection(direction); 2052 } 2053 2054 /** 2055 * Returns the fetch direction for this 2056 * <code>ResultSet</code> object. 2057 * 2058 * @return the current fetch direction for this rowset's 2059 * <code>ResultSet</code> object 2060 * @throws SQLException if a database access error occurs 2061 * or this rowset does not currently have a valid connection, 2062 * prepared statement, and result set 2063 */ 2064 public int getFetchDirection() throws SQLException { 2065 try { 2066 checkState(); 2067 } catch(SQLException sqle) { 2068 super.getFetchDirection(); 2069 } 2070 return rs.getFetchDirection(); 2071 } 2072 2073 /** 2074 * Gives the JDBC driver a hint as to the number of rows that should 2075 * be fetched from the database when more rows are needed for this 2076 * <code>ResultSet</code> object. 2077 * If the fetch size specified is zero, the JDBC driver 2078 * ignores the value and is free to make its own best guess as to what 2079 * the fetch size should be. The default value is set by the 2080 * <code>Statement</code> object 2081 * that created the result set. The fetch size may be changed at any time. 2082 * 2083 * @param rows the number of rows to fetch 2084 * @throws SQLException if (1) a database access error occurs, (2) the 2085 * condition <code>0 <= rows <= this.getMaxRows()</code> is not 2086 * satisfied, or (3) this rowset does not currently have a valid 2087 * connection, prepared statement, and result set 2088 * 2089 */ 2090 public void setFetchSize(int rows) throws SQLException { 2091 checkState(); 2092 2093 rs.setFetchSize(rows); 2094 } 2095 2096 /** 2097 * 2098 * Returns the fetch size for this 2099 * <code>ResultSet</code> object. 2100 * 2101 * @return the current fetch size for this rowset's <code>ResultSet</code> object 2102 * @throws SQLException if a database access error occurs 2103 * or this rowset does not currently have a valid connection, 2104 * prepared statement, and result set 2105 */ 2106 public int getType() throws SQLException { 2107 try { 2108 checkState(); 2109 } catch(SQLException sqle) { 2110 return super.getType(); 2111 } 2112 2113 // If the ResultSet has not been created, then return the default type 2114 // otherwise return the type from the ResultSet. 2115 if(rs == null) { 2116 return super.getType(); 2117 } else { 2118 int rstype = rs.getType(); 2119 return rstype; 2120 } 2121 2122 2123 } 2124 2125 /** 2126 * Returns the concurrency mode of this rowset's <code>ResultSet</code> object. 2127 * The concurrency used is determined by the 2128 * <code>Statement</code> object that created the result set. 2129 * 2130 * @return the concurrency type, either <code>CONCUR_READ_ONLY</code> 2131 * or <code>CONCUR_UPDATABLE</code> 2132 * @throws SQLException if (1) a database access error occurs 2133 * or (2) this rowset does not currently have a valid connection, 2134 * prepared statement, and result set 2135 */ 2136 public int getConcurrency() throws SQLException { 2137 try { 2138 checkState(); 2139 } catch(SQLException sqle) { 2140 super.getConcurrency(); 2141 } 2142 return rs.getConcurrency(); 2143 } 2144 2145 //--------------------------------------------------------------------- 2146 // Updates 2147 //--------------------------------------------------------------------- 2148 2149 /** 2150 * Indicates whether the current row has been updated. The value returned 2151 * depends on whether or not the result set can detect updates. 2152 * 2153 * @return <code>true</code> if the row has been visibly updated 2154 * by the owner or another, and updates are detected 2155 * @throws SQLException if a database access error occurs 2156 * or this rowset does not currently have a valid connection, 2157 * prepared statement, and result set 2158 * @see java.sql.DatabaseMetaData#updatesAreDetected 2159 */ 2160 public boolean rowUpdated() throws SQLException { 2161 checkState(); 2162 2163 return rs.rowUpdated(); 2164 } 2165 2166 /** 2167 * Indicates whether the current row has had an insertion. 2168 * The value returned depends on whether or not this 2169 * <code>ResultSet</code> object can detect visible inserts. 2170 * 2171 * @return <code>true</code> if a row has had an insertion 2172 * and insertions are detected; <code>false</code> otherwise 2173 * @throws SQLException if a database access error occurs 2174 * or this rowset does not currently have a valid connection, 2175 * prepared statement, and result set 2176 * @see java.sql.DatabaseMetaData#insertsAreDetected 2177 * 2178 */ 2179 public boolean rowInserted() throws SQLException { 2180 checkState(); 2181 2182 return rs.rowInserted(); 2183 } 2184 2185 /** 2186 * Indicates whether a row has been deleted. A deleted row may leave 2187 * a visible "hole" in a result set. This method can be used to 2188 * detect holes in a result set. The value returned depends on whether 2189 * or not this rowset's <code>ResultSet</code> object can detect deletions. 2190 * 2191 * @return <code>true</code> if a row was deleted and deletions are detected; 2192 * <code>false</code> otherwise 2193 * @throws SQLException if a database access error occurs 2194 * or this rowset does not currently have a valid connection, 2195 * prepared statement, and result set 2196 * @see java.sql.DatabaseMetaData#deletesAreDetected 2197 */ 2198 public boolean rowDeleted() throws SQLException { 2199 checkState(); 2200 2201 return rs.rowDeleted(); 2202 } 2203 2204 /** 2205 * Gives a nullable column a null value. 2206 * 2207 * The <code>updateXXX</code> methods are used to update column values in the 2208 * current row or the insert row. The <code>updateXXX</code> methods do not 2209 * update the underlying database; instead the <code>updateRow</code> 2210 * or <code>insertRow</code> methods are called to update the database. 2211 * 2212 * @param columnIndex the first column is 1, the second is 2, and so on 2213 * @throws SQLException if a database access error occurs 2214 * or this rowset does not currently have a valid connection, 2215 * prepared statement, and result set 2216 */ 2217 public void updateNull(int columnIndex) throws SQLException { 2218 checkState(); 2219 2220 // To check the type and concurrency of the ResultSet 2221 // to verify whether updates are possible or not 2222 checkTypeConcurrency(); 2223 2224 rs.updateNull(columnIndex); 2225 } 2226 2227 /** 2228 * Updates the designated column with a <code>boolean</code> value. 2229 * The <code>updateXXX</code> methods are used to update column values in the 2230 * current row or the insert row. The <code>updateXXX</code> methods do not 2231 * update the underlying database; instead the <code>updateRow</code> or 2232 * <code>insertRow</code> methods are called to update the database. 2233 * 2234 * @param columnIndex the first column is 1, the second is 2, and so on 2235 * @param x the new column value 2236 * @throws SQLException if a database access error occurs 2237 * or this rowset does not currently have a valid connection, 2238 * prepared statement, and result set 2239 * 2240 */ 2241 public void updateBoolean(int columnIndex, boolean x) throws SQLException { 2242 checkState(); 2243 2244 // To check the type and concurrency of the ResultSet 2245 // to verify whether updates are possible or not 2246 checkTypeConcurrency(); 2247 2248 rs.updateBoolean(columnIndex, x); 2249 } 2250 2251 /** 2252 * Updates the designated column with a <code>byte</code> value. 2253 * The <code>updateXXX</code> methods are used to update column values in the 2254 * current row or the insert row. The <code>updateXXX</code> methods do not 2255 * update the underlying database; instead the <code>updateRow</code> or 2256 * <code>insertRow</code> methods are called to update the database. 2257 * 2258 * 2259 * @param columnIndex the first column is 1, the second is 2, and so on 2260 * @param x the new column value 2261 * @throws SQLException if a database access error occurs 2262 * or this rowset does not currently have a valid connection, 2263 * prepared statement, and result set 2264 * 2265 */ 2266 public void updateByte(int columnIndex, byte x) throws SQLException { 2267 checkState(); 2268 2269 // To check the type and concurrency of the ResultSet 2270 // to verify whether updates are possible or not 2271 checkTypeConcurrency(); 2272 2273 rs.updateByte(columnIndex, x); 2274 } 2275 2276 /** 2277 * Updates the designated column with a <code>short</code> value. 2278 * The <code>updateXXX</code> methods are used to update column values in the 2279 * current row or the insert row. The <code>updateXXX</code> methods do not 2280 * update the underlying database; instead the <code>updateRow</code> or 2281 * <code>insertRow</code> methods are called to update the database. 2282 * 2283 * @param columnIndex the first column is 1, the second is 2, and so on 2284 * @param x the new column value 2285 * @throws SQLException if a database access error occurs 2286 * or this rowset does not currently have a valid connection, 2287 * prepared statement, and result set 2288 * 2289 */ 2290 public void updateShort(int columnIndex, short x) throws SQLException { 2291 checkState(); 2292 2293 // To check the type and concurrency of the ResultSet 2294 // to verify whether updates are possible or not 2295 checkTypeConcurrency(); 2296 2297 rs.updateShort(columnIndex, x); 2298 } 2299 2300 /** 2301 * Updates the designated column with an <code>int</code> value. 2302 * The <code>updateXXX</code> methods are used to update column values in the 2303 * current row or the insert row. The <code>updateXXX</code> methods do not 2304 * update the underlying database; instead the <code>updateRow</code> or 2305 * <code>insertRow</code> methods are called to update the database. 2306 * 2307 * @param columnIndex the first column is 1, the second is 2, and so on 2308 * @param x the new column value 2309 * @throws SQLException if a database access error occurs 2310 * or this rowset does not currently have a valid connection, 2311 * prepared statement, and result set 2312 */ 2313 public void updateInt(int columnIndex, int x) throws SQLException { 2314 checkState(); 2315 2316 // To check the type and concurrency of the ResultSet 2317 // to verify whether updates are possible or not 2318 checkTypeConcurrency(); 2319 2320 rs.updateInt(columnIndex, x); 2321 } 2322 2323 /** 2324 * Updates the designated column with a <code>long</code> value. 2325 * The <code>updateXXX</code> methods are used to update column values in the 2326 * current row or the insert row. The <code>updateXXX</code> methods do not 2327 * update the underlying database; instead the <code>updateRow</code> or 2328 * <code>insertRow</code> methods are called to update the database. 2329 * 2330 * @param columnIndex the first column is 1, the second is 2, and so on 2331 * @param x the new column value 2332 * @throws SQLException if a database access error occurs 2333 * or this rowset does not currently have a valid connection, 2334 * prepared statement, and result set 2335 * 2336 */ 2337 public void updateLong(int columnIndex, long x) throws SQLException { 2338 checkState(); 2339 2340 // To check the type and concurrency of the ResultSet 2341 // to verify whether updates are possible or not 2342 checkTypeConcurrency(); 2343 2344 rs.updateLong(columnIndex, x); 2345 } 2346 2347 /** 2348 * Updates the designated column with a <code>float</code> value. 2349 * The <code>updateXXX</code> methods are used to update column values in the 2350 * current row or the insert row. The <code>updateXXX</code> methods do not 2351 * update the underlying database; instead the <code>updateRow</code> or 2352 * <code>insertRow</code> methods are called to update the database. 2353 * 2354 * @param columnIndex the first column is 1, the second is 2, and so on 2355 * @param x the new column value 2356 * @throws SQLException if a database access error occurs 2357 * or this rowset does not currently have a valid connection, 2358 * prepared statement, and result set 2359 * 2360 */ 2361 public void updateFloat(int columnIndex, float x) throws SQLException { 2362 checkState(); 2363 2364 // To check the type and concurrency of the ResultSet 2365 // to verify whether updates are possible or not 2366 checkTypeConcurrency(); 2367 2368 rs.updateFloat(columnIndex, x); 2369 } 2370 2371 /** 2372 * Updates the designated column with a <code>double</code> value. 2373 * The <code>updateXXX</code> methods are used to update column values in the 2374 * current row or the insert row. The <code>updateXXX</code> methods do not 2375 * update the underlying database; instead the <code>updateRow</code> or 2376 * <code>insertRow</code> methods are called to update the database. 2377 * 2378 * @param columnIndex the first column is 1, the second is 2, and so on 2379 * @param x the new column value 2380 * @throws SQLException if a database access error occurs 2381 * or this rowset does not currently have a valid connection, 2382 * prepared statement, and result set 2383 * 2384 */ 2385 public void updateDouble(int columnIndex, double x) throws SQLException { 2386 checkState(); 2387 2388 // To check the type and concurrency of the ResultSet 2389 // to verify whether updates are possible or not 2390 checkTypeConcurrency(); 2391 2392 rs.updateDouble(columnIndex, x); 2393 } 2394 2395 /** 2396 * Updates the designated column with a <code>java.math.BigDecimal</code> 2397 * value. 2398 * The <code>updateXXX</code> methods are used to update column values in the 2399 * current row or the insert row. The <code>updateXXX</code> methods do not 2400 * update the underlying database; instead the <code>updateRow</code> or 2401 * <code>insertRow</code> methods are called to update the database. 2402 * 2403 * @param columnIndex the first column is 1, the second is 2, and so on 2404 * @param x the new column value 2405 * @throws SQLException if a database access error occurs 2406 * or this rowset does not currently have a valid connection, 2407 * prepared statement, and result set 2408 * 2409 */ 2410 public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException { 2411 checkState(); 2412 2413 // To check the type and concurrency of the ResultSet 2414 // to verify whether updates are possible or not 2415 checkTypeConcurrency(); 2416 2417 rs.updateBigDecimal(columnIndex, x); 2418 } 2419 2420 /** 2421 * Updates the designated column with a <code>String</code> value. 2422 * The <code>updateXXX</code> methods are used to update column values in the 2423 * current row or the insert row. The <code>updateXXX</code> methods do not 2424 * update the underlying database; instead the <code>updateRow</code> or 2425 * <code>insertRow</code> methods are called to update the database. 2426 * 2427 * @param columnIndex the first column is 1, the second is 2, and so on 2428 * @param x the new column value 2429 * @throws SQLException if a database access error occurs 2430 * or this rowset does not currently have a valid connection, 2431 * prepared statement, and result set 2432 * 2433 */ 2434 public void updateString(int columnIndex, String x) throws SQLException { 2435 checkState(); 2436 2437 // To check the type and concurrency of the ResultSet 2438 // to verify whether updates are possible or not 2439 checkTypeConcurrency(); 2440 2441 rs.updateString(columnIndex, x); 2442 } 2443 2444 /** 2445 * Updates the designated column with a <code>byte</code> array value. 2446 * The <code>updateXXX</code> methods are used to update column values in the 2447 * current row or the insert row. The <code>updateXXX</code> methods do not 2448 * update the underlying database; instead the <code>updateRow</code> or 2449 * <code>insertRow</code> methods are called to update the database. 2450 * 2451 * @param columnIndex the first column is 1, the second is 2, and so on 2452 * @param x the new column value 2453 * @throws SQLException if a database access error occurs 2454 * or this rowset does not currently have a valid connection, 2455 * prepared statement, and result set 2456 * 2457 */ 2458 public void updateBytes(int columnIndex, byte x[]) throws SQLException { 2459 checkState(); 2460 2461 // To check the type and concurrency of the ResultSet 2462 // to verify whether updates are possible or not 2463 checkTypeConcurrency(); 2464 2465 rs.updateBytes(columnIndex, x); 2466 } 2467 2468 /** 2469 * Updates the designated column with a <code>java.sql.Date</code> value. 2470 * The <code>updateXXX</code> methods are used to update column values in the 2471 * current row or the insert row. The <code>updateXXX</code> methods do not 2472 * update the underlying database; instead the <code>updateRow</code> or 2473 * <code>insertRow</code> methods are called to update the database. 2474 * 2475 * @param columnIndex the first column is 1, the second is 2, and so on 2476 * @param x the new column value 2477 * @throws SQLException if a database access error occurs 2478 * or this rowset does not currently have a valid connection, 2479 * prepared statement, and result set 2480 * 2481 */ 2482 public void updateDate(int columnIndex, java.sql.Date x) throws SQLException { 2483 checkState(); 2484 2485 // To check the type and concurrency of the ResultSet 2486 // to verify whether updates are possible or not 2487 checkTypeConcurrency(); 2488 2489 rs.updateDate(columnIndex, x); 2490 } 2491 2492 2493 /** 2494 * Updates the designated column with a <code>java.sql.Time</code> value. 2495 * The <code>updateXXX</code> methods are used to update column values in the 2496 * current row or the insert row. The <code>updateXXX</code> methods do not 2497 * update the underlying database; instead the <code>updateRow</code> or 2498 * <code>insertRow</code> methods are called to update the database. 2499 * 2500 * @param columnIndex the first column is 1, the second is 2, and so on 2501 * @param x the new column value 2502 * @throws SQLException if a database access error occurs 2503 * or this rowset does not currently have a valid connection, 2504 * prepared statement, and result set 2505 * 2506 */ 2507 public void updateTime(int columnIndex, java.sql.Time x) throws SQLException { 2508 checkState(); 2509 2510 // To check the type and concurrency of the ResultSet 2511 // to verify whether updates are possible or not 2512 checkTypeConcurrency(); 2513 2514 rs.updateTime(columnIndex, x); 2515 } 2516 2517 /** 2518 * Updates the designated column with a <code>java.sql.Timestamp</code> 2519 * value. 2520 * The <code>updateXXX</code> methods are used to update column values in the 2521 * current row or the insert row. The <code>updateXXX</code> methods do not 2522 * update the underlying database; instead the <code>updateRow</code> or 2523 * <code>insertRow</code> methods are called to update the database. 2524 * 2525 * @param columnIndex the first column is 1, the second is 2, and so on 2526 * @param x the new column value 2527 * @throws SQLException if a database access error occurs 2528 * or this rowset does not currently have a valid connection, 2529 * prepared statement, and result set 2530 * 2531 */ 2532 public void updateTimestamp(int columnIndex, java.sql.Timestamp x) throws SQLException { 2533 checkState(); 2534 2535 // To check the type and concurrency of the ResultSet 2536 // to verify whether updates are possible or not 2537 checkTypeConcurrency(); 2538 2539 rs.updateTimestamp(columnIndex, x); 2540 } 2541 2542 /** 2543 * Updates the designated column with an ascii stream value. 2544 * The <code>updateXXX</code> methods are used to update column values in the 2545 * current row or the insert row. The <code>updateXXX</code> methods do not 2546 * update the underlying database; instead the <code>updateRow</code> or 2547 * <code>insertRow</code> methods are called to update the database. 2548 * 2549 * @param columnIndex the first column is 1, the second is 2, and so on 2550 * @param x the new column value 2551 * @param length the length of the stream 2552 * @throws SQLException if (1) a database access error occurs 2553 * (2) or this rowset does not currently have a valid connection, 2554 * prepared statement, and result set 2555 * 2556 */ 2557 public void updateAsciiStream(int columnIndex, java.io.InputStream x, int length) throws SQLException { 2558 checkState(); 2559 2560 // To check the type and concurrency of the ResultSet 2561 // to verify whether updates are possible or not 2562 checkTypeConcurrency(); 2563 2564 rs.updateAsciiStream(columnIndex, x, length); 2565 } 2566 2567 /** 2568 * Updates the designated column with a binary stream value. 2569 * The <code>updateXXX</code> methods are used to update column values in the 2570 * current row or the insert row. The <code>updateXXX</code> methods do not 2571 * update the underlying database; instead the <code>updateRow</code> or 2572 * <code>insertRow</code> methods are called to update the database. 2573 * 2574 * @param columnIndex the first column is 1, the second is 2, and so on 2575 * @param x the new column value 2576 * @param length the length of the stream 2577 * @throws SQLException if a database access error occurs 2578 * or this rowset does not currently have a valid connection, 2579 * prepared statement, and result set 2580 * 2581 */ 2582 public void updateBinaryStream(int columnIndex, java.io.InputStream x, int length) throws SQLException { 2583 checkState(); 2584 2585 // To check the type and concurrency of the ResultSet 2586 // to verify whether updates are possible or not 2587 checkTypeConcurrency(); 2588 2589 rs.updateBinaryStream(columnIndex, x, length); 2590 } 2591 2592 /** 2593 * Updates the designated column with a character stream value. 2594 * The <code>updateXXX</code> methods are used to update column values in the 2595 * current row or the insert row. The <code>updateXXX</code> methods do not 2596 * update the underlying database; instead the <code>updateRow</code> or 2597 * <code>insertRow</code> methods are called to update the database. 2598 * 2599 * @param columnIndex the first column is 1, the second is 2, and so on 2600 * @param x the new column value 2601 * @param length the length of the stream 2602 * @throws SQLException if a database access error occurs 2603 * or this rowset does not currently have a valid connection, 2604 * prepared statement, and result set 2605 * 2606 */ 2607 public void updateCharacterStream(int columnIndex, java.io.Reader x, int length) throws SQLException { 2608 checkState(); 2609 2610 // To check the type and concurrency of the ResultSet 2611 // to verify whether updates are possible or not 2612 checkTypeConcurrency(); 2613 2614 rs.updateCharacterStream(columnIndex, x, length); 2615 } 2616 2617 /** 2618 * Updates the designated column with an <code>Object</code> value. 2619 * The <code>updateXXX</code> methods are used to update column values in the 2620 * current row or the insert row. The <code>updateXXX</code> methods do not 2621 * update the underlying database; instead the <code>updateRow</code> or 2622 * <code>insertRow</code> methods are called to update the database. 2623 * 2624 * @param columnIndex the first column is 1, the second is 2, and so on 2625 * @param x the new column value 2626 * @param scale for <code>java.sql.Types.DECIMAl</code> 2627 * or <code>java.sql.Types.NUMERIC</code> types, 2628 * this is the number of digits after the decimal point. For all other 2629 * types this value will be ignored. 2630 * @throws SQLException if a database access error occurs 2631 * or this rowset does not currently have a valid connection, 2632 * prepared statement, and result set 2633 * 2634 */ 2635 public void updateObject(int columnIndex, Object x, int scale) throws SQLException { 2636 checkState(); 2637 2638 // To check the type and concurrency of the ResultSet 2639 // to verify whether updates are possible or not 2640 checkTypeConcurrency(); 2641 2642 rs.updateObject(columnIndex, x, scale); 2643 } 2644 2645 /** 2646 * Updates the designated column with an <code>Object</code> value. 2647 * The <code>updateXXX</code> methods are used to update column values in the 2648 * current row or the insert row. The <code>updateXXX</code> methods do not 2649 * update the underlying database; instead the <code>updateRow</code> or 2650 * <code>insertRow</code> methods are called to update the database. 2651 * 2652 * @param columnIndex the first column is 1, the second is 2, and so on 2653 * @param x the new column value 2654 * @throws SQLException if a database access error occurs 2655 * or this rowset does not currently have a valid connection, 2656 * prepared statement, and result set 2657 * 2658 */ 2659 public void updateObject(int columnIndex, Object x) throws SQLException { 2660 checkState(); 2661 2662 // To check the type and concurrency of the ResultSet 2663 // to verify whether updates are possible or not 2664 checkTypeConcurrency(); 2665 2666 rs.updateObject(columnIndex, x); 2667 } 2668 2669 /** 2670 * Updates the designated column with a <code>null</code> value. 2671 * The <code>updateXXX</code> methods are used to update column values in the 2672 * current row or the insert row. The <code>updateXXX</code> methods do not 2673 * update the underlying database; instead the <code>updateRow</code> or 2674 * <code>insertRow</code> methods are called to update the database. 2675 * 2676 * @param columnName the name of the column 2677 * @throws SQLException if a database access error occurs 2678 * or this rowset does not currently have a valid connection, 2679 * prepared statement, and result set 2680 * 2681 */ 2682 public void updateNull(String columnName) throws SQLException { 2683 updateNull(findColumn(columnName)); 2684 } 2685 2686 /** 2687 * Updates the designated column with a <code>boolean</code> value. 2688 * The <code>updateXXX</code> methods are used to update column values in the 2689 * current row or the insert row. The <code>updateXXX</code> methods do not 2690 * update the underlying database; instead the <code>updateRow</code> or 2691 * <code>insertRow</code> methods are called to update the database. 2692 * 2693 * @param columnName the name of the column 2694 * @param x the new column value 2695 * @throws SQLException if a database access error occurs 2696 * 2697 */ 2698 public void updateBoolean(String columnName, boolean x) throws SQLException { 2699 updateBoolean(findColumn(columnName), x); 2700 } 2701 2702 /** 2703 * Updates the designated column with a <code>byte</code> value. 2704 * The <code>updateXXX</code> methods are used to update column values in the 2705 * current row or the insert row. The <code>updateXXX</code> methods do not 2706 * update the underlying database; instead the <code>updateRow</code> or 2707 * <code>insertRow</code> methods are called to update the database. 2708 * 2709 * @param columnName the name of the column 2710 * @param x the new column value 2711 * @throws SQLException if a database access error occurs 2712 * 2713 */ 2714 public void updateByte(String columnName, byte x) throws SQLException { 2715 updateByte(findColumn(columnName), x); 2716 } 2717 2718 /** 2719 * Updates the designated column with a <code>short</code> value. 2720 * The <code>updateXXX</code> methods are used to update column values in the 2721 * current row or the insert row. The <code>updateXXX</code> methods do not 2722 * update the underlying database; instead the <code>updateRow</code> or 2723 * <code>insertRow</code> methods are called to update the database. 2724 * 2725 * @param columnName the name of the column 2726 * @param x the new column value 2727 * @throws SQLException if a database access error occurs 2728 * 2729 */ 2730 public void updateShort(String columnName, short x) throws SQLException { 2731 updateShort(findColumn(columnName), x); 2732 } 2733 2734 /** 2735 * Updates the designated column with an <code>int</code> value. 2736 * The <code>updateXXX</code> methods are used to update column values in the 2737 * current row or the insert row. The <code>updateXXX</code> methods do not 2738 * update the underlying database; instead the <code>updateRow</code> or 2739 * <code>insertRow</code> methods are called to update the database. 2740 * 2741 * @param columnName the name of the column 2742 * @param x the new column value 2743 * @throws SQLException if a database access error occurs 2744 * 2745 */ 2746 public void updateInt(String columnName, int x) throws SQLException { 2747 updateInt(findColumn(columnName), x); 2748 } 2749 2750 /** 2751 * Updates the designated column with a <code>long</code> value. 2752 * The <code>updateXXX</code> methods are used to update column values in the 2753 * current row or the insert row. The <code>updateXXX</code> methods do not 2754 * update the underlying database; instead the <code>updateRow</code> or 2755 * <code>insertRow</code> methods are called to update the database. 2756 * 2757 * @param columnName the name of the column 2758 * @param x the new column value 2759 * @throws SQLException if a database access error occurs 2760 * 2761 */ 2762 public void updateLong(String columnName, long x) throws SQLException { 2763 updateLong(findColumn(columnName), x); 2764 } 2765 2766 /** 2767 * Updates the designated column with a <code>float </code> value. 2768 * The <code>updateXXX</code> methods are used to update column values in the 2769 * current row or the insert row. The <code>updateXXX</code> methods do not 2770 * update the underlying database; instead the <code>updateRow</code> or 2771 * <code>insertRow</code> methods are called to update the database. 2772 * 2773 * @param columnName the name of the column 2774 * @param x the new column value 2775 * @throws SQLException if a database access error occurs 2776 * 2777 */ 2778 public void updateFloat(String columnName, float x) throws SQLException { 2779 updateFloat(findColumn(columnName), x); 2780 } 2781 2782 /** 2783 * Updates the designated column with a <code>double</code> value. 2784 * The <code>updateXXX</code> methods are used to update column values in the 2785 * current row or the insert row. The <code>updateXXX</code> methods do not 2786 * update the underlying database; instead the <code>updateRow</code> or 2787 * <code>insertRow</code> methods are called to update the database. 2788 * 2789 * @param columnName the name of the column 2790 * @param x the new column value 2791 * @throws SQLException if a database access error occurs 2792 * 2793 */ 2794 public void updateDouble(String columnName, double x) throws SQLException { 2795 updateDouble(findColumn(columnName), x); 2796 } 2797 2798 /** 2799 * Updates the designated column with a <code>java.sql.BigDecimal</code> 2800 * value. 2801 * The <code>updateXXX</code> methods are used to update column values in the 2802 * current row or the insert row. The <code>updateXXX</code> methods do not 2803 * update the underlying database; instead the <code>updateRow</code> or 2804 * <code>insertRow</code> methods are called to update the database. 2805 * 2806 * @param columnName the name of the column 2807 * @param x the new column value 2808 * @throws SQLException if a database access error occurs 2809 * 2810 */ 2811 public void updateBigDecimal(String columnName, BigDecimal x) throws SQLException { 2812 updateBigDecimal(findColumn(columnName), x); 2813 } 2814 2815 /** 2816 * Updates the designated column with a <code>String</code> value. 2817 * The <code>updateXXX</code> methods are used to update column values in the 2818 * current row or the insert row. The <code>updateXXX</code> methods do not 2819 * update the underlying database; instead the <code>updateRow</code> or 2820 * <code>insertRow</code> methods are called to update the database. 2821 * 2822 * @param columnName the name of the column 2823 * @param x the new column value 2824 * @throws SQLException if a database access error occurs 2825 * 2826 */ 2827 public void updateString(String columnName, String x) throws SQLException { 2828 updateString(findColumn(columnName), x); 2829 } 2830 2831 /** 2832 * Updates the designated column with a <code>boolean</code> value. 2833 * The <code>updateXXX</code> methods are used to update column values in the 2834 * current row or the insert row. The <code>updateXXX</code> methods do not 2835 * update the underlying database; instead the <code>updateRow</code> or 2836 * <code>insertRow</code> methods are called to update the database. 2837 * 2838 * JDBC 2.0 2839 * 2840 * Updates a column with a byte array value. 2841 * 2842 * The <code>updateXXX</code> methods are used to update column values in the 2843 * current row, or the insert row. The <code>updateXXX</code> methods do not 2844 * update the underlying database; instead the <code>updateRow</code> or <code>insertRow</code> 2845 * methods are called to update the database. 2846 * 2847 * @param columnName the name of the column 2848 * @param x the new column value 2849 * @throws SQLException if a database access error occurs 2850 * 2851 */ 2852 public void updateBytes(String columnName, byte x[]) throws SQLException { 2853 updateBytes(findColumn(columnName), x); 2854 } 2855 2856 /** 2857 * Updates the designated column with a <code>java.sql.Date</code> value. 2858 * The <code>updateXXX</code> methods are used to update column values in the 2859 * current row or the insert row. The <code>updateXXX</code> methods do not 2860 * update the underlying database; instead the <code>updateRow</code> or 2861 * <code>insertRow</code> methods are called to update the database. 2862 * 2863 * @param columnName the name of the column 2864 * @param x the new column value 2865 * @throws SQLException if a database access error occurs 2866 * 2867 */ 2868 public void updateDate(String columnName, java.sql.Date x) throws SQLException { 2869 updateDate(findColumn(columnName), x); 2870 } 2871 2872 /** 2873 * Updates the designated column with a <code>java.sql.Time</code> value. 2874 * The <code>updateXXX</code> methods are used to update column values in the 2875 * current row or the insert row. The <code>updateXXX</code> methods do not 2876 * update the underlying database; instead the <code>updateRow</code> or 2877 * <code>insertRow</code> methods are called to update the database. 2878 * 2879 * @param columnName the name of the column 2880 * @param x the new column value 2881 * @throws SQLException if a database access error occurs 2882 * 2883 */ 2884 public void updateTime(String columnName, java.sql.Time x) throws SQLException { 2885 updateTime(findColumn(columnName), x); 2886 } 2887 2888 /** 2889 * Updates the designated column with a <code>java.sql.Timestamp</code> 2890 * value. 2891 * The <code>updateXXX</code> methods are used to update column values in the 2892 * current row or the insert row. The <code>updateXXX</code> methods do not 2893 * update the underlying database; instead the <code>updateRow</code> or 2894 * <code>insertRow</code> methods are called to update the database. 2895 * 2896 * @param columnName the name of the column 2897 * @param x the new column value 2898 * @throws SQLException if a database access error occurs 2899 * 2900 */ 2901 public void updateTimestamp(String columnName, java.sql.Timestamp x) throws SQLException { 2902 updateTimestamp(findColumn(columnName), x); 2903 } 2904 2905 /** 2906 * Updates the designated column with an ascii stream value. 2907 * The <code>updateXXX</code> methods are used to update column values in the 2908 * current row or the insert row. The <code>updateXXX</code> methods do not 2909 * update the underlying database; instead the <code>updateRow</code> or 2910 * <code>insertRow</code> methods are called to update the database. 2911 * 2912 * @param columnName the name of the column 2913 * @param x the new column value 2914 * @param length the length of the stream 2915 * @throws SQLException if a database access error occurs 2916 * 2917 */ 2918 public void updateAsciiStream(String columnName, java.io.InputStream x, int length) throws SQLException { 2919 updateAsciiStream(findColumn(columnName), x, length); 2920 } 2921 2922 /** 2923 * Updates the designated column with a binary stream value. 2924 * The <code>updateXXX</code> methods are used to update column values in the 2925 * current row or the insert row. The <code>updateXXX</code> methods do not 2926 * update the underlying database; instead the <code>updateRow</code> or 2927 * <code>insertRow</code> methods are called to update the database. 2928 * 2929 * @param columnName the name of the column 2930 * @param x the new column value 2931 * @param length the length of the stream 2932 * @throws SQLException if a database access error occurs 2933 * 2934 */ 2935 public void updateBinaryStream(String columnName, java.io.InputStream x, int length) throws SQLException { 2936 updateBinaryStream(findColumn(columnName), x, length); 2937 } 2938 2939 /** 2940 * Updates the designated column with a character stream value. 2941 * The <code>updateXXX</code> methods are used to update column values 2942 * in the current row or the insert row. The <code>updateXXX</code> 2943 * methods do not update the underlying database; instead the 2944 * <code>updateRow</code> or <code>insertRow</code> methods are called 2945 * to update the database. 2946 * 2947 * @param columnName the name of the column 2948 * @param reader the new column <code>Reader</code> stream value 2949 * @param length the length of the stream 2950 * @throws SQLException if a database access error occurs 2951 * 2952 */ 2953 public void updateCharacterStream(String columnName, java.io.Reader reader, int length) throws SQLException { 2954 updateCharacterStream(findColumn(columnName), reader, length); 2955 } 2956 2957 /** 2958 * Updates the designated column with an <code>Object</code> value. 2959 * The <code>updateXXX</code> methods are used to update column values in the 2960 * current row or the insert row. The <code>updateXXX</code> methods do not 2961 * update the underlying database; instead the <code>updateRow</code> or 2962 * <code>insertRow</code> methods are called to update the database. 2963 * 2964 * @param columnName the name of the column 2965 * @param x the new column value 2966 * @param scale for <code>java.sql.Types.DECIMAL</code> 2967 * or <code>java.sql.Types.NUMERIC</code> types, 2968 * this is the number of digits after the decimal point. For all other 2969 * types this value will be ignored. 2970 * @throws SQLException if a database access error occurs 2971 * 2972 */ 2973 public void updateObject(String columnName, Object x, int scale) throws SQLException { 2974 updateObject(findColumn(columnName), x, scale); 2975 } 2976 2977 /** 2978 * Updates the designated column with an <code>Object</code> value. 2979 * The <code>updateXXX</code> methods are used to update column values in the 2980 * current row or the insert row. The <code>updateXXX</code> methods do not 2981 * update the underlying database; instead the <code>updateRow</code> or 2982 * <code>insertRow</code> methods are called to update the database. 2983 * 2984 * @param columnName the name of the column 2985 * @param x the new column value 2986 * @throws SQLException if a database access error occurs 2987 * 2988 */ 2989 public void updateObject(String columnName, Object x) throws SQLException { 2990 updateObject(findColumn(columnName), x); 2991 } 2992 2993 /** 2994 * Inserts the contents of the insert row into this 2995 * <code>ResultSet</code> object and into the database 2996 * and also notifies listeners that a row has changed. 2997 * The cursor must be on the insert row when this method is called. 2998 * 2999 * @throws SQLException if (1) a database access error occurs, 3000 * (2) this method is called when the cursor is not 3001 * on the insert row, (3) not all non-nullable columns in 3002 * the insert row have been given a value, or (4) this 3003 * rowset does not currently have a valid connection, 3004 * prepared statement, and result set 3005 */ 3006 public void insertRow() throws SQLException { 3007 checkState(); 3008 3009 rs.insertRow(); 3010 notifyRowChanged(); 3011 } 3012 3013 /** 3014 * Updates the underlying database with the new contents of the 3015 * current row of this rowset's <code>ResultSet</code> object 3016 * and notifies listeners that a row has changed. 3017 * This method cannot be called when the cursor is on the insert row. 3018 * 3019 * @throws SQLException if (1) a database access error occurs, 3020 * (2) this method is called when the cursor is 3021 * on the insert row, (3) the concurrency of the result 3022 * set is <code>ResultSet.CONCUR_READ_ONLY</code>, or 3023 * (4) this rowset does not currently have a valid connection, 3024 * prepared statement, and result set 3025 */ 3026 public void updateRow() throws SQLException { 3027 checkState(); 3028 3029 rs.updateRow(); 3030 notifyRowChanged(); 3031 } 3032 3033 /** 3034 * Deletes the current row from this rowset's <code>ResultSet</code> object 3035 * and from the underlying database and also notifies listeners that a row 3036 * has changed. This method cannot be called when the cursor is on the insert 3037 * row. 3038 * 3039 * @throws SQLException if a database access error occurs 3040 * or if this method is called when the cursor is on the insert row 3041 * @throws SQLException if (1) a database access error occurs, 3042 * (2) this method is called when the cursor is before the 3043 * first row, after the last row, or on the insert row, 3044 * (3) the concurrency of this rowset's result 3045 * set is <code>ResultSet.CONCUR_READ_ONLY</code>, or 3046 * (4) this rowset does not currently have a valid connection, 3047 * prepared statement, and result set 3048 */ 3049 public void deleteRow() throws SQLException { 3050 checkState(); 3051 3052 rs.deleteRow(); 3053 notifyRowChanged(); 3054 } 3055 3056 /** 3057 * Refreshes the current row of this rowset's <code>ResultSet</code> 3058 * object with its most recent value in the database. This method 3059 * cannot be called when the cursor is on the insert row. 3060 * 3061 * <P>The <code>refreshRow</code> method provides a way for an 3062 * application to explicitly tell the JDBC driver to refetch 3063 * a row(s) from the database. An application may want to call 3064 * <code>refreshRow</code> when caching or prefetching is being 3065 * done by the JDBC driver to fetch the latest value of a row 3066 * from the database. The JDBC driver may actually refresh multiple 3067 * rows at once if the fetch size is greater than one. 3068 * 3069 * <P> All values are refetched subject to the transaction isolation 3070 * level and cursor sensitivity. If <code>refreshRow</code> is called after 3071 * calling an <code>updateXXX</code> method, but before calling 3072 * the method <code>updateRow</code>, then the 3073 * updates made to the row are lost. Calling the method 3074 * <code>refreshRow</code> frequently will likely slow performance. 3075 * 3076 * @throws SQLException if (1) a database access error occurs, 3077 * (2) this method is called when the cursor is 3078 * on the insert row, or (3) this rowset does not 3079 * currently have a valid connection, prepared statement, 3080 * and result set 3081 * 3082 */ 3083 public void refreshRow() throws SQLException { 3084 checkState(); 3085 3086 rs.refreshRow(); 3087 } 3088 3089 /** 3090 * Cancels the updates made to the current row in this 3091 * <code>ResultSet</code> object and notifies listeners that a row 3092 * has changed. This method may be called after calling an 3093 * <code>updateXXX</code> method(s) and before calling 3094 * the method <code>updateRow</code> to roll back 3095 * the updates made to a row. If no updates have been made or 3096 * <code>updateRow</code> has already been called, this method has no 3097 * effect. 3098 * 3099 * @throws SQLException if (1) a database access error occurs, 3100 * (2) this method is called when the cursor is 3101 * on the insert row, or (3) this rowset does not 3102 * currently have a valid connection, prepared statement, 3103 * and result set 3104 */ 3105 public void cancelRowUpdates() throws SQLException { 3106 checkState(); 3107 3108 rs.cancelRowUpdates(); 3109 3110 notifyRowChanged(); 3111 } 3112 3113 /** 3114 * Moves the cursor to the insert row. The current cursor position is 3115 * remembered while the cursor is positioned on the insert row. 3116 * 3117 * The insert row is a special row associated with an updatable 3118 * result set. It is essentially a buffer where a new row may 3119 * be constructed by calling the <code>updateXXX</code> methods prior to 3120 * inserting the row into the result set. 3121 * 3122 * Only the <code>updateXXX</code>, <code>getXXX</code>, 3123 * and <code>insertRow</code> methods may be 3124 * called when the cursor is on the insert row. All of the columns in 3125 * a result set must be given a value each time this method is 3126 * called before calling <code>insertRow</code>. 3127 * An <code>updateXXX</code> method must be called before a 3128 * <code>getXXX</code> method can be called on a column value. 3129 * 3130 * @throws SQLException if (1) a database access error occurs, 3131 * (2) this rowset's <code>ResultSet</code> object is 3132 * not updatable, or (3) this rowset does not 3133 * currently have a valid connection, prepared statement, 3134 * and result set 3135 * 3136 */ 3137 public void moveToInsertRow() throws SQLException { 3138 checkState(); 3139 3140 rs.moveToInsertRow(); 3141 } 3142 3143 /** 3144 * Moves the cursor to the remembered cursor position, usually the 3145 * current row. This method has no effect if the cursor is not on 3146 * the insert row. 3147 * 3148 * @throws SQLException if (1) a database access error occurs, 3149 * (2) this rowset's <code>ResultSet</code> object is 3150 * not updatable, or (3) this rowset does not 3151 * currently have a valid connection, prepared statement, 3152 * and result set 3153 */ 3154 public void moveToCurrentRow() throws SQLException { 3155 checkState(); 3156 3157 rs.moveToCurrentRow(); 3158 } 3159 3160 /** 3161 * Returns the <code>Statement</code> object that produced this 3162 * <code>ResultSet</code> object. 3163 * If the result set was generated some other way, such as by a 3164 * <code>DatabaseMetaData</code> method, this method returns 3165 * <code>null</code>. 3166 * 3167 * @return the <code>Statment</code> object that produced 3168 * this rowset's <code>ResultSet</code> object or <code>null</code> 3169 * if the result set was produced some other way 3170 * @throws SQLException if a database access error occurs 3171 */ 3172 public java.sql.Statement getStatement() throws SQLException { 3173 3174 if(rs != null) 3175 { 3176 return rs.getStatement(); 3177 } else { 3178 return null; 3179 } 3180 } 3181 3182 /** 3183 * Returns the value of the designated column in the current row 3184 * of this rowset's <code>ResultSet</code> object as an <code>Object</code>. 3185 * This method uses the given <code>Map</code> object 3186 * for the custom mapping of the 3187 * SQL structured or distinct type that is being retrieved. 3188 * 3189 * @param i the first column is 1, the second is 2, and so on 3190 * @param map a <code>java.util.Map</code> object that contains the mapping 3191 * from SQL type names to classes in the Java programming language 3192 * @return an <code>Object</code> in the Java programming language 3193 * representing the SQL value 3194 * @throws SQLException if (1) a database access error occurs 3195 * or (2) this rowset does not currently have a valid connection, 3196 * prepared statement, and result set 3197 */ 3198 public Object getObject(int i, java.util.Map<String,Class<?>> map) 3199 throws SQLException 3200 { 3201 checkState(); 3202 3203 return rs.getObject(i, map); 3204 } 3205 3206 /** 3207 * Returns the value of the designated column in the current row 3208 * of this rowset's <code>ResultSet</code> object as a <code>Ref</code> object. 3209 * 3210 * @param i the first column is 1, the second is 2, and so on 3211 * @return a <code>Ref</code> object representing an SQL <code>REF</code> value 3212 * @throws SQLException if (1) a database access error occurs 3213 * or (2) this rowset does not currently have a valid connection, 3214 * prepared statement, and result set 3215 */ 3216 public Ref getRef(int i) throws SQLException { 3217 checkState(); 3218 3219 return rs.getRef(i); 3220 } 3221 3222 3223 /** 3224 * Returns the value of the designated column in the current row 3225 * of this rowset's <code>ResultSet</code> object as a <code>Blob</code> object. 3226 * 3227 * @param i the first column is 1, the second is 2, and so on 3228 * @return a <code>Blob</code> object representing the SQL <code>BLOB</code> 3229 * value in the specified column 3230 * @throws SQLException if (1) a database access error occurs 3231 * or (2) this rowset does not currently have a valid connection, 3232 * prepared statement, and result set 3233 */ 3234 public Blob getBlob(int i) throws SQLException { 3235 checkState(); 3236 3237 return rs.getBlob(i); 3238 } 3239 3240 /** 3241 * Returns the value of the designated column in the current row 3242 * of this rowset's <code>ResultSet</code> object as a <code>Clob</code> object. 3243 * 3244 * @param i the first column is 1, the second is 2, and so on 3245 * @return a <code>Clob</code> object representing the SQL <code>CLOB</code> 3246 * value in the specified column 3247 * @throws SQLException if (1) a database access error occurs 3248 * or (2) this rowset does not currently have a valid connection, 3249 * prepared statement, and result set 3250 */ 3251 public Clob getClob(int i) throws SQLException { 3252 checkState(); 3253 3254 return rs.getClob(i); 3255 } 3256 3257 /** 3258 * Returns the value of the designated column in the current row 3259 * of this rowset's <code>ResultSet</code> object as an <code>Array</code> object. 3260 * 3261 * @param i the first column is 1, the second is 2, and so on. 3262 * @return an <code>Array</code> object representing the SQL <code>ARRAY</code> 3263 * value in the specified column 3264 * @throws SQLException if (1) a database access error occurs 3265 * or (2) this rowset does not currently have a valid connection, 3266 * prepared statement, and result set 3267 */ 3268 public Array getArray(int i) throws SQLException { 3269 checkState(); 3270 3271 return rs.getArray(i); 3272 } 3273 3274 /** 3275 * Returns the value of the designated column in the current row 3276 * of this rowset's <code>ResultSet</code> object as an <code>Object</code>. 3277 * This method uses the specified <code>Map</code> object for 3278 * custom mapping if appropriate. 3279 * 3280 * @param colName the name of the column from which to retrieve the value 3281 * @param map a <code>java.util.Map</code> object that contains the mapping 3282 * from SQL type names to classes in the Java programming language 3283 * @return an <code>Object</code> representing the SQL 3284 * value in the specified column 3285 * @throws SQLException if (1) a database access error occurs 3286 * or (2) this rowset does not currently have a valid connection, 3287 * prepared statement, and result set 3288 */ 3289 public Object getObject(String colName, java.util.Map<String,Class<?>> map) 3290 throws SQLException 3291 { 3292 return getObject(findColumn(colName), map); 3293 } 3294 3295 /** 3296 * Returns the value of the designated column in the current row 3297 * of this rowset's <code>ResultSet</code> object as a <code>Ref</code> object. 3298 * 3299 * @param colName the column name 3300 * @return a <code>Ref</code> object representing the SQL <code>REF</code> value in 3301 * the specified column 3302 * @throws SQLException if (1) a database access error occurs 3303 * or (2) this rowset does not currently have a valid connection, 3304 * prepared statement, and result set 3305 */ 3306 public Ref getRef(String colName) throws SQLException { 3307 return getRef(findColumn(colName)); 3308 } 3309 3310 /** 3311 * Returns the value of the designated column in the current row 3312 * of this rowset's <code>ResultSet</code> object as a <code>Blob</code> object. 3313 * 3314 * @param colName the name of the column from which to retrieve the value 3315 * @return a <code>Blob</code> object representing the SQL <code>BLOB</code> 3316 * value in the specified column 3317 * @throws SQLException if (1) a database access error occurs 3318 * or (2) this rowset does not currently have a valid connection, 3319 * prepared statement, and result set 3320 */ 3321 public Blob getBlob(String colName) throws SQLException { 3322 return getBlob(findColumn(colName)); 3323 } 3324 3325 /** 3326 * Returns the value of the designated column in the current row 3327 * of this rowset's <code>ResultSet</code> object as a <code>Clob</code> object. 3328 * 3329 * @param colName the name of the column from which to retrieve the value 3330 * @return a <code>Clob</code> object representing the SQL <code>CLOB</code> 3331 * value in the specified column 3332 * @throws SQLException if (1) a database access error occurs 3333 * or (2) this rowset does not currently have a valid connection, 3334 * prepared statement, and result set 3335 */ 3336 public Clob getClob(String colName) throws SQLException { 3337 return getClob(findColumn(colName)); 3338 } 3339 3340 /** 3341 * Returns the value of the designated column in the current row 3342 * of this rowset's <code>ResultSet</code> object as an <code>Array</code> object. 3343 * 3344 * @param colName the name of the column from which to retrieve the value 3345 * @return an <code>Array</code> object representing the SQL <code>ARRAY</code> 3346 * value in the specified column 3347 * @throws SQLException if (1) a database access error occurs 3348 * or (2) this rowset does not currently have a valid connection, 3349 * prepared statement, and result set 3350 */ 3351 public Array getArray(String colName) throws SQLException { 3352 return getArray(findColumn(colName)); 3353 } 3354 3355 /** 3356 * Returns the value of the designated column in the current row 3357 * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Date</code> 3358 * object. This method uses the given calendar to construct an appropriate 3359 * millisecond value for the date if the underlying database does not store 3360 * timezone information. 3361 * 3362 * @param columnIndex the first column is 1, the second is 2, and so on 3363 * @param cal the <code>java.util.Calendar</code> object 3364 * to use in constructing the date 3365 * @return the column value as a <code>java.sql.Date</code> object; 3366 * if the value is SQL <code>NULL</code>, 3367 * the value returned is <code>null</code> 3368 * @throws SQLException if (1) a database access error occurs 3369 * or (2) this rowset does not currently have a valid connection, 3370 * prepared statement, and result set 3371 */ 3372 public java.sql.Date getDate(int columnIndex, Calendar cal) throws SQLException { 3373 checkState(); 3374 3375 return rs.getDate(columnIndex, cal); 3376 } 3377 3378 /** 3379 * Returns the value of the designated column in the current row 3380 * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Date</code> 3381 * object. This method uses the given calendar to construct an appropriate 3382 * millisecond value for the date if the underlying database does not store 3383 * timezone information. 3384 * 3385 * @param columnName the SQL name of the column from which to retrieve the value 3386 * @param cal the <code>java.util.Calendar</code> object 3387 * to use in constructing the date 3388 * @return the column value as a <code>java.sql.Date</code> object; 3389 * if the value is SQL <code>NULL</code>, 3390 * the value returned is <code>null</code> 3391 * @throws SQLException if a database access error occurs 3392 * or this rowset does not currently have a valid connection, 3393 * prepared statement, and result set 3394 * 3395 */ 3396 public java.sql.Date getDate(String columnName, Calendar cal) throws SQLException { 3397 return getDate(findColumn(columnName), cal); 3398 } 3399 3400 /** 3401 * Returns the value of the designated column in the current row 3402 * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Time</code> 3403 * object. This method uses the given calendar to construct an appropriate 3404 * millisecond value for the date if the underlying database does not store 3405 * timezone information. 3406 * 3407 * @param columnIndex the first column is 1, the second is 2, and so on 3408 * @param cal the <code>java.util.Calendar</code> object 3409 * to use in constructing the time 3410 * @return the column value as a <code>java.sql.Time</code> object; 3411 * if the value is SQL <code>NULL</code>, 3412 * the value returned is <code>null</code> in the Java programming language 3413 * @throws SQLException if a database access error occurs 3414 * or this rowset does not currently have a valid connection, 3415 * prepared statement, and result set 3416 */ 3417 public java.sql.Time getTime(int columnIndex, Calendar cal) throws SQLException { 3418 checkState(); 3419 3420 return rs.getTime(columnIndex, cal); 3421 } 3422 3423 /** 3424 * Returns the value of the designated column in the current row 3425 * of this rowset's <code>ResultSet</code> object as a <code>java.sql.Time</code> 3426 * object. This method uses the given calendar to construct an appropriate 3427 * millisecond value for the date if the underlying database does not store 3428 * timezone information. 3429 * 3430 * @param columnName the SQL name of the column 3431 * @param cal the <code>java.util.Calendar</code> object 3432 * to use in constructing the time 3433 * @return the column value as a <code>java.sql.Time</code> object; 3434 * if the value is SQL <code>NULL</code>, 3435 * the value returned is <code>null</code> in the Java programming language 3436 * @throws SQLException if a database access error occurs 3437 * or this rowset does not currently have a valid connection, 3438 * prepared statement, and result set 3439 */ 3440 public java.sql.Time getTime(String columnName, Calendar cal) throws SQLException { 3441 return getTime(findColumn(columnName), cal); 3442 } 3443 3444 /** 3445 * Returns the value of the designated column in the current row 3446 * of this rowset's <code>ResultSet</code> object as a 3447 * <code>java.sql.Timestamp</code> object. 3448 * This method uses the given calendar to construct an appropriate millisecond 3449 * value for the timestamp if the underlying database does not store 3450 * timezone information. 3451 * 3452 * @param columnIndex the first column is 1, the second is 2, and so on 3453 * @param cal the <code>java.util.Calendar</code> object 3454 * to use in constructing the timestamp 3455 * @return the column value as a <code>java.sql.Timestamp</code> object; 3456 * if the value is SQL <code>NULL</code>, 3457 * the value returned is <code>null</code> 3458 * @throws SQLException if a database access error occurs 3459 * or this rowset does not currently have a valid connection, 3460 * prepared statement, and result set 3461 */ 3462 public java.sql.Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException { 3463 checkState(); 3464 3465 return rs.getTimestamp(columnIndex, cal); 3466 } 3467 3468 /** 3469 * Returns the value of the designated column in the current row 3470 * of this rowset's <code>ResultSet</code> object as a 3471 * <code>java.sql.Timestamp</code> object. 3472 * This method uses the given calendar to construct an appropriate millisecond 3473 * value for the timestamp if the underlying database does not store 3474 * timezone information. 3475 * 3476 * @param columnName the SQL name of the column 3477 * @param cal the <code>java.util.Calendar</code> object 3478 * to use in constructing the timestamp 3479 * @return the column value as a <code>java.sql.Timestamp</code> object; 3480 * if the value is SQL <code>NULL</code>, 3481 * the value returned is <code>null</code> 3482 * @throws SQLException if a database access error occurs 3483 * or this rowset does not currently have a valid connection, 3484 * prepared statement, and result set 3485 */ 3486 public java.sql.Timestamp getTimestamp(String columnName, Calendar cal) throws SQLException { 3487 return getTimestamp(findColumn(columnName), cal); 3488 } 3489 3490 3491 /** 3492 * Sets the designated column in either the current row or the insert 3493 * row of this <code>JdbcRowSetImpl</code> object with the given 3494 * <code>double</code> value. 3495 * 3496 * This method updates a column value in either the current row or 3497 * the insert row of this rowset, but it does not update the 3498 * database. If the cursor is on a row in the rowset, the 3499 * method {@link #updateRow} must be called to update the database. 3500 * If the cursor is on the insert row, the method {@link #insertRow} 3501 * must be called, which will insert the new row into both this rowset 3502 * and the database. Both of these methods must be called before the 3503 * cursor moves to another row. 3504 * 3505 * @param columnIndex the first column is <code>1</code>, the second 3506 * is <code>2</code>, and so on; must be <code>1</code> or larger 3507 * and equal to or less than the number of columns in this rowset 3508 * @param ref the new <code>Ref</code> column value 3509 * @throws SQLException if (1) the given column index is out of bounds, 3510 * (2) the cursor is not on one of this rowset's rows or its 3511 * insert row, or (3) this rowset is 3512 * <code>ResultSet.CONCUR_READ_ONLY</code> 3513 */ 3514 public void updateRef(int columnIndex, java.sql.Ref ref) 3515 throws SQLException { 3516 checkState(); 3517 rs.updateRef(columnIndex, ref); 3518 } 3519 3520 /** 3521 * Sets the designated column in either the current row or the insert 3522 * row of this <code>JdbcRowSetImpl</code> object with the given 3523 * <code>double</code> value. 3524 * 3525 * This method updates a column value in either the current row or 3526 * the insert row of this rowset, but it does not update the 3527 * database. If the cursor is on a row in the rowset, the 3528 * method {@link #updateRow} must be called to update the database. 3529 * If the cursor is on the insert row, the method {@link #insertRow} 3530 * must be called, which will insert the new row into both this rowset 3531 * and the database. Both of these methods must be called before the 3532 * cursor moves to another row. 3533 * 3534 * @param columnName a <code>String</code> object that must match the 3535 * SQL name of a column in this rowset, ignoring case 3536 * @param ref the new column value 3537 * @throws SQLException if (1) the given column name does not match the 3538 * name of a column in this rowset, (2) the cursor is not on 3539 * one of this rowset's rows or its insert row, or (3) this 3540 * rowset is <code>ResultSet.CONCUR_READ_ONLY</code> 3541 */ 3542 public void updateRef(String columnName, java.sql.Ref ref) 3543 throws SQLException { 3544 updateRef(findColumn(columnName), ref); 3545 } 3546 3547 /** 3548 * Sets the designated column in either the current row or the insert 3549 * row of this <code>JdbcRowSetImpl</code> object with the given 3550 * <code>double</code> value. 3551 * 3552 * This method updates a column value in either the current row or 3553 * the insert row of this rowset, but it does not update the 3554 * database. If the cursor is on a row in the rowset, the 3555 * method {@link #updateRow} must be called to update the database. 3556 * If the cursor is on the insert row, the method {@link #insertRow} 3557 * must be called, which will insert the new row into both this rowset 3558 * and the database. Both of these methods must be called before the 3559 * cursor moves to another row. 3560 * 3561 * @param columnIndex the first column is <code>1</code>, the second 3562 * is <code>2</code>, and so on; must be <code>1</code> or larger 3563 * and equal to or less than the number of columns in this rowset 3564 * @param c the new column <code>Clob</code> value 3565 * @throws SQLException if (1) the given column index is out of bounds, 3566 * (2) the cursor is not on one of this rowset's rows or its 3567 * insert row, or (3) this rowset is 3568 * <code>ResultSet.CONCUR_READ_ONLY</code> 3569 */ 3570 public void updateClob(int columnIndex, Clob c) throws SQLException { 3571 checkState(); 3572 rs.updateClob(columnIndex, c); 3573 } 3574 3575 3576 /** 3577 * Sets the designated column in either the current row or the insert 3578 * row of this <code>JdbcRowSetImpl</code> object with the given 3579 * <code>double</code> value. 3580 * 3581 * This method updates a column value in either the current row or 3582 * the insert row of this rowset, but it does not update the 3583 * database. If the cursor is on a row in the rowset, the 3584 * method {@link #updateRow} must be called to update the database. 3585 * If the cursor is on the insert row, the method {@link #insertRow} 3586 * must be called, which will insert the new row into both this rowset 3587 * and the database. Both of these methods must be called before the 3588 * cursor moves to another row. 3589 * 3590 * @param columnName a <code>String</code> object that must match the 3591 * SQL name of a column in this rowset, ignoring case 3592 * @param c the new column <code>Clob</code> value 3593 * @throws SQLException if (1) the given column name does not match the 3594 * name of a column in this rowset, (2) the cursor is not on 3595 * one of this rowset's rows or its insert row, or (3) this 3596 * rowset is <code>ResultSet.CONCUR_READ_ONLY</code> 3597 */ 3598 public void updateClob(String columnName, Clob c) throws SQLException { 3599 updateClob(findColumn(columnName), c); 3600 } 3601 3602 /** 3603 * Sets the designated column in either the current row or the insert 3604 * row of this <code>JdbcRowSetImpl</code> object with the given 3605 * <code>java.sql.Blob</code> value. 3606 * 3607 * This method updates a column value in either the current row or 3608 * the insert row of this rowset, but it does not update the 3609 * database. If the cursor is on a row in the rowset, the 3610 * method {@link #updateRow} must be called to update the database. 3611 * If the cursor is on the insert row, the method {@link #insertRow} 3612 * must be called, which will insert the new row into both this rowset 3613 * and the database. Both of these methods must be called before the 3614 * cursor moves to another row. 3615 * 3616 * @param columnIndex the first column is <code>1</code>, the second 3617 * is <code>2</code>, and so on; must be <code>1</code> or larger 3618 * and equal to or less than the number of columns in this rowset 3619 * @param b the new column <code>Blob</code> value 3620 * @throws SQLException if (1) the given column index is out of bounds, 3621 * (2) the cursor is not on one of this rowset's rows or its 3622 * insert row, or (3) this rowset is 3623 * <code>ResultSet.CONCUR_READ_ONLY</code> 3624 */ 3625 public void updateBlob(int columnIndex, Blob b) throws SQLException { 3626 checkState(); 3627 rs.updateBlob(columnIndex, b); 3628 } 3629 3630 /** 3631 * Sets the designated column in either the current row or the insert 3632 * row of this <code>JdbcRowSetImpl</code> object with the given 3633 * <code>java.sql.Blob </code> value. 3634 * 3635 * This method updates a column value in either the current row or 3636 * the insert row of this rowset, but it does not update the 3637 * database. If the cursor is on a row in the rowset, the 3638 * method {@link #updateRow} must be called to update the database. 3639 * If the cursor is on the insert row, the method {@link #insertRow} 3640 * must be called, which will insert the new row into both this rowset 3641 * and the database. Both of these methods must be called before the 3642 * cursor moves to another row. 3643 * 3644 * @param columnName a <code>String</code> object that must match the 3645 * SQL name of a column in this rowset, ignoring case 3646 * @param b the new column <code>Blob</code> value 3647 * @throws SQLException if (1) the given column name does not match the 3648 * name of a column in this rowset, (2) the cursor is not on 3649 * one of this rowset's rows or its insert row, or (3) this 3650 * rowset is <code>ResultSet.CONCUR_READ_ONLY</code> 3651 */ 3652 public void updateBlob(String columnName, Blob b) throws SQLException { 3653 updateBlob(findColumn(columnName), b); 3654 } 3655 3656 /** 3657 * Sets the designated column in either the current row or the insert 3658 * row of this <code>JdbcRowSetImpl</code> object with the given 3659 * <code>java.sql.Array</code> values. 3660 * 3661 * This method updates a column value in either the current row or 3662 * the insert row of this rowset, but it does not update the 3663 * database. If the cursor is on a row in the rowset, the 3664 * method {@link #updateRow} must be called to update the database. 3665 * If the cursor is on the insert row, the method {@link #insertRow} 3666 * must be called, which will insert the new row into both this rowset 3667 * and the database. Both of these methods must be called before the 3668 * cursor moves to another row. 3669 * 3670 * @param columnIndex the first column is <code>1</code>, the second 3671 * is <code>2</code>, and so on; must be <code>1</code> or larger 3672 * and equal to or less than the number of columns in this rowset 3673 * @param a the new column <code>Array</code> value 3674 * @throws SQLException if (1) the given column index is out of bounds, 3675 * (2) the cursor is not on one of this rowset's rows or its 3676 * insert row, or (3) this rowset is 3677 * <code>ResultSet.CONCUR_READ_ONLY</code> 3678 */ 3679 public void updateArray(int columnIndex, Array a) throws SQLException { 3680 checkState(); 3681 rs.updateArray(columnIndex, a); 3682 } 3683 3684 /** 3685 * Sets the designated column in either the current row or the insert 3686 * row of this <code>JdbcRowSetImpl</code> object with the given 3687 * <code>java.sql.Array</code> value. 3688 * 3689 * This method updates a column value in either the current row or 3690 * the insert row of this rowset, but it does not update the 3691 * database. If the cursor is on a row in the rowset, the 3692 * method {@link #updateRow} must be called to update the database. 3693 * If the cursor is on the insert row, the method {@link #insertRow} 3694 * must be called, which will insert the new row into both this rowset 3695 * and the database. Both of these methods must be called before the 3696 * cursor moves to another row. 3697 * 3698 * @param columnName a <code>String</code> object that must match the 3699 * SQL name of a column in this rowset, ignoring case 3700 * @param a the new column <code>Array</code> value 3701 * @throws SQLException if (1) the given column name does not match the 3702 * name of a column in this rowset, (2) the cursor is not on 3703 * one of this rowset's rows or its insert row, or (3) this 3704 * rowset is <code>ResultSet.CONCUR_READ_ONLY</code> 3705 */ 3706 public void updateArray(String columnName, Array a) throws SQLException { 3707 updateArray(findColumn(columnName), a); 3708 } 3709 3710 /** 3711 * Provide interface coverage for getURL(int) in ResultSet->RowSet 3712 */ 3713 public java.net.URL getURL(int columnIndex) throws SQLException { 3714 checkState(); 3715 return rs.getURL(columnIndex); 3716 } 3717 3718 /** 3719 * Provide interface coverage for getURL(String) in ResultSet->RowSet 3720 */ 3721 public java.net.URL getURL(String columnName) throws SQLException { 3722 return getURL(findColumn(columnName)); 3723 } 3724 3725 /** 3726 * Return the RowSetWarning object for the current row of a 3727 * <code>JdbcRowSetImpl</code> 3728 */ 3729 public RowSetWarning getRowSetWarnings() throws SQLException { 3730 return null; 3731 } 3732 /** 3733 * Unsets the designated parameter to the given int array. 3734 * This was set using <code>setMatchColumn</code> 3735 * as the column which will form the basis of the join. 3736 * <P> 3737 * The parameter value unset by this method should be same 3738 * as was set. 3739 * 3740 * @param columnIdxes the index into this rowset 3741 * object's internal representation of parameter values 3742 * @throws SQLException if an error occurs or the 3743 * parameter index is out of bounds or if the columnIdx is 3744 * not the same as set using <code>setMatchColumn(int [])</code> 3745 */ 3746 public void unsetMatchColumn(int[] columnIdxes) throws SQLException { 3747 3748 int i_val; 3749 for( int j= 0 ;j < columnIdxes.length; j++) { 3750 i_val = (Integer.parseInt(iMatchColumns.get(j).toString())); 3751 if(columnIdxes[j] != i_val) { 3752 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); 3753 } 3754 } 3755 3756 for( int i = 0;i < columnIdxes.length ;i++) { 3757 iMatchColumns.set(i,Integer.valueOf(-1)); 3758 } 3759 } 3760 3761 /** 3762 * Unsets the designated parameter to the given String array. 3763 * This was set using <code>setMatchColumn</code> 3764 * as the column which will form the basis of the join. 3765 * <P> 3766 * The parameter value unset by this method should be same 3767 * as was set. 3768 * 3769 * @param columnIdxes the index into this rowset 3770 * object's internal representation of parameter values 3771 * @throws SQLException if an error occurs or the 3772 * parameter index is out of bounds or if the columnName is 3773 * not the same as set using <code>setMatchColumn(String [])</code> 3774 */ 3775 public void unsetMatchColumn(String[] columnIdxes) throws SQLException { 3776 3777 for(int j = 0 ;j < columnIdxes.length; j++) { 3778 if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){ 3779 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); 3780 } 3781 } 3782 3783 for(int i = 0 ; i < columnIdxes.length; i++) { 3784 strMatchColumns.set(i,null); 3785 } 3786 } 3787 3788 /** 3789 * Retrieves the column name as <code>String</code> array 3790 * that was set using <code>setMatchColumn(String [])</code> 3791 * for this rowset. 3792 * 3793 * @return a <code>String</code> array object that contains the column names 3794 * for the rowset which has this the match columns 3795 * 3796 * @throws SQLException if an error occurs or column name is not set 3797 */ 3798 public String[] getMatchColumnNames() throws SQLException { 3799 3800 String []str_temp = new String[strMatchColumns.size()]; 3801 3802 if( strMatchColumns.get(0) == null) { 3803 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); 3804 } 3805 3806 strMatchColumns.copyInto(str_temp); 3807 return str_temp; 3808 } 3809 3810 /** 3811 * Retrieves the column id as <code>int</code> array that was set using 3812 * <code>setMatchColumn(int [])</code> for this rowset. 3813 * 3814 * @return a <code>int</code> array object that contains the column ids 3815 * for the rowset which has this as the match columns. 3816 * 3817 * @throws SQLException if an error occurs or column index is not set 3818 */ 3819 public int[] getMatchColumnIndexes() throws SQLException { 3820 3821 Integer []int_temp = new Integer[iMatchColumns.size()]; 3822 int [] i_temp = new int[iMatchColumns.size()]; 3823 int i_val; 3824 3825 i_val = ((Integer)iMatchColumns.get(0)).intValue(); 3826 3827 if( i_val == -1 ) { 3828 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); 3829 } 3830 3831 3832 iMatchColumns.copyInto(int_temp); 3833 3834 for(int i = 0; i < int_temp.length; i++) { 3835 i_temp[i] = (int_temp[i]).intValue(); 3836 } 3837 3838 return i_temp; 3839 } 3840 3841 /** 3842 * Sets the designated parameter to the given int array. 3843 * This forms the basis of the join for the 3844 * <code>JoinRowSet</code> as the column which will form the basis of the 3845 * join. 3846 * <P> 3847 * The parameter value set by this method is stored internally and 3848 * will be supplied as the appropriate parameter in this rowset's 3849 * command when the method <code>getMatchColumnIndexes</code> is called. 3850 * 3851 * @param columnIdxes the indexes into this rowset 3852 * object's internal representation of parameter values; the 3853 * first parameter is 0, the second is 1, and so on; must be 3854 * <code>0</code> or greater 3855 * @throws SQLException if an error occurs or the 3856 * parameter index is out of bounds 3857 */ 3858 public void setMatchColumn(int[] columnIdxes) throws SQLException { 3859 3860 for(int j = 0 ; j < columnIdxes.length; j++) { 3861 if( columnIdxes[j] < 0 ) { 3862 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); 3863 } 3864 } 3865 for(int i = 0 ;i < columnIdxes.length; i++) { 3866 iMatchColumns.add(i,Integer.valueOf(columnIdxes[i])); 3867 } 3868 } 3869 3870 /** 3871 * Sets the designated parameter to the given String array. 3872 * This forms the basis of the join for the 3873 * <code>JoinRowSet</code> as the column which will form the basis of the 3874 * join. 3875 * <P> 3876 * The parameter value set by this method is stored internally and 3877 * will be supplied as the appropriate parameter in this rowset's 3878 * command when the method <code>getMatchColumn</code> is called. 3879 * 3880 * @param columnNames the name of the column into this rowset 3881 * object's internal representation of parameter values 3882 * @throws SQLException if an error occurs or the 3883 * parameter index is out of bounds 3884 */ 3885 public void setMatchColumn(String[] columnNames) throws SQLException { 3886 3887 for(int j = 0; j < columnNames.length; j++) { 3888 if( columnNames[j] == null || columnNames[j].equals("")) { 3889 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); 3890 } 3891 } 3892 for( int i = 0; i < columnNames.length; i++) { 3893 strMatchColumns.add(i,columnNames[i]); 3894 } 3895 } 3896 3897 3898 /** 3899 * Sets the designated parameter to the given <code>int</code> 3900 * object. This forms the basis of the join for the 3901 * <code>JoinRowSet</code> as the column which will form the basis of the 3902 * join. 3903 * <P> 3904 * The parameter value set by this method is stored internally and 3905 * will be supplied as the appropriate parameter in this rowset's 3906 * command when the method <code>getMatchColumn</code> is called. 3907 * 3908 * @param columnIdx the index into this rowset 3909 * object's internal representation of parameter values; the 3910 * first parameter is 0, the second is 1, and so on; must be 3911 * <code>0</code> or greater 3912 * @throws SQLException if an error occurs or the 3913 * parameter index is out of bounds 3914 */ 3915 public void setMatchColumn(int columnIdx) throws SQLException { 3916 // validate, if col is ok to be set 3917 if(columnIdx < 0) { 3918 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); 3919 } else { 3920 // set iMatchColumn 3921 iMatchColumns.set(0, Integer.valueOf(columnIdx)); 3922 //strMatchColumn = null; 3923 } 3924 } 3925 3926 /** 3927 * Sets the designated parameter to the given <code>String</code> 3928 * object. This forms the basis of the join for the 3929 * <code>JoinRowSet</code> as the column which will form the basis of the 3930 * join. 3931 * <P> 3932 * The parameter value set by this method is stored internally and 3933 * will be supplied as the appropriate parameter in this rowset's 3934 * command when the method <code>getMatchColumn</code> is called. 3935 * 3936 * @param columnName the name of the column into this rowset 3937 * object's internal representation of parameter values 3938 * @throws SQLException if an error occurs or the 3939 * parameter index is out of bounds 3940 */ 3941 public void setMatchColumn(String columnName) throws SQLException { 3942 // validate, if col is ok to be set 3943 if(columnName == null || (columnName= columnName.trim()).equals("")) { 3944 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); 3945 } else { 3946 // set strMatchColumn 3947 strMatchColumns.set(0, columnName); 3948 //iMatchColumn = -1; 3949 } 3950 } 3951 3952 /** 3953 * Unsets the designated parameter to the given <code>int</code> 3954 * object. This was set using <code>setMatchColumn</code> 3955 * as the column which will form the basis of the join. 3956 * <P> 3957 * The parameter value unset by this method should be same 3958 * as was set. 3959 * 3960 * @param columnIdx the index into this rowset 3961 * object's internal representation of parameter values 3962 * @throws SQLException if an error occurs or the 3963 * parameter index is out of bounds or if the columnIdx is 3964 * not the same as set using <code>setMatchColumn(int)</code> 3965 */ 3966 public void unsetMatchColumn(int columnIdx) throws SQLException { 3967 // check if we are unsetting the SAME column 3968 if(! iMatchColumns.get(0).equals(Integer.valueOf(columnIdx) ) ) { 3969 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); 3970 } else if(strMatchColumns.get(0) != null) { 3971 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString()); 3972 } else { 3973 // that is, we are unsetting it. 3974 iMatchColumns.set(0, Integer.valueOf(-1)); 3975 } 3976 } 3977 3978 /** 3979 * Unsets the designated parameter to the given <code>String</code> 3980 * object. This was set using <code>setMatchColumn</code> 3981 * as the column which will form the basis of the join. 3982 * <P> 3983 * The parameter value unset by this method should be same 3984 * as was set. 3985 * 3986 * @param columnName the index into this rowset 3987 * object's internal representation of parameter values 3988 * @throws SQLException if an error occurs or the 3989 * parameter index is out of bounds or if the columnName is 3990 * not the same as set using <code>setMatchColumn(String)</code> 3991 * 3992 */ 3993 public void unsetMatchColumn(String columnName) throws SQLException { 3994 // check if we are unsetting the same column 3995 columnName = columnName.trim(); 3996 3997 if(!((strMatchColumns.get(0)).equals(columnName))) { 3998 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); 3999 } else if( ((Integer)(iMatchColumns.get(0))).intValue() > 0) { 4000 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolid").toString()); 4001 } else { 4002 strMatchColumns.set(0, null); // that is, we are unsetting it. 4003 } 4004 } 4005 4006 /** 4007 * Retrieves the <code>DatabaseMetaData</code> associated with 4008 * the connection handle associated this this 4009 * <code>JdbcRowSet</code> object. 4010 * 4011 * @return the <code>DatabaseMetadata</code> associated 4012 * with the rowset's connection. 4013 * @throws SQLException if a database access error occurs 4014 */ 4015 public DatabaseMetaData getDatabaseMetaData() throws SQLException { 4016 Connection con = connect(); 4017 return con.getMetaData(); 4018 } 4019 4020 /** 4021 * Retrieves the <code>ParameterMetaData</code> associated with 4022 * the connection handle associated this this 4023 * <code>JdbcRowSet</code> object. 4024 * 4025 * @return the <code>ParameterMetadata</code> associated 4026 * with the rowset's connection. 4027 * @throws SQLException if a database access error occurs 4028 */ 4029 public ParameterMetaData getParameterMetaData() throws SQLException { 4030 prepare(); 4031 return (ps.getParameterMetaData()); 4032 } 4033 4034 /** 4035 * Commits all updates in this <code>JdbcRowSet</code> object by 4036 * wrapping the internal <code>Connection</code> object and calling 4037 * its <code>commit</code> method. 4038 * This method sets this <code>JdbcRowSet</code> object's private field 4039 * <code>rs</code> to <code>null</code> after saving its value to another 4040 * object, but only if the <code>ResultSet</code> 4041 * constant <code>HOLD_CURSORS_OVER_COMMIT</code> has not been set. 4042 * (The field <code>rs</code> is this <code>JdbcRowSet</code> object's 4043 * <code>ResultSet</code> object.) 4044 * 4045 * @throws SQLException if autoCommit is set to true or if a database 4046 * access error occurs 4047 */ 4048 public void commit() throws SQLException { 4049 conn.commit(); 4050 4051 // Checking the holadbility value and making the result set handle null 4052 // Added as per Rave requirements 4053 4054 if( conn.getHoldability() != HOLD_CURSORS_OVER_COMMIT) { 4055 ResultSet oldVal = rs; 4056 rs = null; 4057 // propertyChangeSupport.firePropertyChange("ResultSet",oldVal,rs); 4058 } 4059 } 4060 4061 /** 4062 * Sets auto-commit on the internal <code>Connection</code> object with this 4063 * <code>JdbcRowSet</code> 4064 * 4065 * @throws SQLException if a database access error occurs 4066 */ 4067 public void setAutoCommit(boolean autoCommit) throws SQLException { 4068 // The connection object should be there 4069 // in order to commit the connection handle on or off. 4070 4071 if(conn != null) { 4072 conn.setAutoCommit(autoCommit); 4073 } else { 4074 // Coming here means the connection object is null. 4075 // So generate a connection handle internally, since 4076 // a JdbcRowSet is always connected to a db, it is fine 4077 // to get a handle to the connection. 4078 4079 // Get hold of a connection handle 4080 // and change the autcommit as passesd. 4081 conn = connect(); 4082 4083 // After setting the below the conn.getAutoCommit() 4084 // should return the same value. 4085 conn.setAutoCommit(autoCommit); 4086 4087 } 4088 } 4089 4090 /** 4091 * Returns the auto-commit status with this <code>JdbcRowSet</code>. 4092 * 4093 * @return true if auto commit is true; false otherwise 4094 * @throws SQLException if a database access error occurs 4095 */ 4096 public boolean getAutoCommit() throws SQLException { 4097 return conn.getAutoCommit(); 4098 } 4099 4100 /** 4101 * Rolls back all the updates in this <code>JdbcRowSet</code> object by 4102 * wrapping the internal <code>Connection</code> object and calling its 4103 * <code>rollback</code> method. 4104 * This method sets this <code>JdbcRowSet</code> object's private field 4105 * <code>rs</code> to <code>null</code> after saving its value to another object. 4106 * (The field <code>rs</code> is this <code>JdbcRowSet</code> object's 4107 * internal <code>ResultSet</code> object.) 4108 * 4109 * @throws SQLException if autoCommit is set to true or a database 4110 * access error occurs 4111 */ 4112 public void rollback() throws SQLException { 4113 conn.rollback(); 4114 4115 // Makes the result ste handle null after rollback 4116 // Added as per Rave requirements 4117 4118 ResultSet oldVal = rs; 4119 rs = null; 4120 // propertyChangeSupport.firePropertyChange("ResultSet", oldVal,rs); 4121 } 4122 4123 4124 /** 4125 * Rollbacks all the updates in the <code>JdbcRowSet</code> back to the 4126 * last <code>Savepoint</code> transaction marker. Wraps the internal 4127 * <code>Connection</code> object and call it's rollback method 4128 * 4129 * @param s the <code>Savepoint</code> transaction marker to roll the 4130 * transaction to. 4131 * @throws SQLException if autoCommit is set to true; or ia a database 4132 * access error occurs 4133 */ 4134 public void rollback(Savepoint s) throws SQLException { 4135 conn.rollback(s); 4136 } 4137 4138 // Setting the ResultSet Type and Concurrency 4139 protected void setParams() throws SQLException { 4140 if(rs == null) { 4141 setType(ResultSet.TYPE_SCROLL_INSENSITIVE); 4142 setConcurrency(ResultSet.CONCUR_UPDATABLE); 4143 } 4144 else { 4145 setType(rs.getType()); 4146 setConcurrency(rs.getConcurrency()); 4147 } 4148 } 4149 4150 4151 // Checking ResultSet Type and Concurrency 4152 private void checkTypeConcurrency() throws SQLException { 4153 if(rs.getType() == TYPE_FORWARD_ONLY || 4154 rs.getConcurrency() == CONCUR_READ_ONLY) { 4155 throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.resnotupd").toString()); 4156 } 4157 } 4158 4159 // Returns a Connection Handle 4160 // Added as per Rave requirements 4161 4162 /** 4163 * Gets this <code>JdbcRowSet</code> object's Connection property 4164 * 4165 * 4166 * @return the <code>Connection</code> object associated with this rowset; 4167 */ 4168 4169 protected Connection getConnection() { 4170 return conn; 4171 } 4172 4173 // Sets the connection handle with the parameter 4174 // Added as per rave requirements 4175 4176 /** 4177 * Sets this <code>JdbcRowSet</code> object's connection property 4178 * to the given <code>Connection</code> object. 4179 * 4180 * @param connection the <code>Connection</code> object. 4181 */ 4182 4183 protected void setConnection(Connection connection) { 4184 conn = connection; 4185 } 4186 4187 // Returns a PreparedStatement Handle 4188 // Added as per Rave requirements 4189 4190 /** 4191 * Gets this <code>JdbcRowSet</code> object's PreparedStatement property 4192 * 4193 * 4194 * @return the <code>PreparedStatement</code> object associated with this rowset; 4195 */ 4196 4197 protected PreparedStatement getPreparedStatement() { 4198 return ps; 4199 } 4200 4201 //Sets the prepared statement handle to the parameter 4202 // Added as per Rave requirements 4203 4204 /** 4205 * Sets this <code>JdbcRowSet</code> object's preparedtsatement property 4206 * to the given <code>PreparedStatemennt</code> object. 4207 * 4208 * @param preparedStatement the <code>PreparedStatement</code> object 4209 * 4210 */ 4211 protected void setPreparedStatement(PreparedStatement preparedStatement) { 4212 ps = preparedStatement; 4213 } 4214 4215 // Returns a ResultSet handle 4216 // Added as per Rave requirements 4217 4218 /** 4219 * Gets this <code>JdbcRowSet</code> object's ResultSet property 4220 * 4221 * 4222 * @return the <code>ResultSet</code> object associated with this rowset; 4223 */ 4224 4225 protected ResultSet getResultSet() throws SQLException { 4226 4227 checkState(); 4228 4229 return rs; 4230 } 4231 4232 // Sets the result set handle to the parameter 4233 // Added as per Rave requirements 4234 4235 /** 4236 * Sets this <code>JdbcRowSet</code> object's resultset property 4237 * to the given <code>ResultSet</code> object. 4238 * 4239 * @param resultSet the <code>ResultSet</code> object 4240 * 4241 */ 4242 protected void setResultSet(ResultSet resultSet) { 4243 rs = resultSet; 4244 } 4245 4246 4247 // Over riding the setCommand from BaseRowSet for 4248 // firing the propertyChangeSupport Event for 4249 // Rave requirements when this property's value 4250 // changes. 4251 4252 /** 4253 * Sets this <code>JdbcRowSet</code> object's <code>command</code> property to 4254 * the given <code>String</code> object and clears the parameters, if any, 4255 * that were set for the previous command. In addition, 4256 * if the <code>command</code> property has previously been set to a 4257 * non-null value and it is 4258 * different from the <code>String</code> object supplied, 4259 * this method sets this <code>JdbcRowSet</code> object's private fields 4260 * <code>ps</code> and <code>rs</code> to <code>null</code>. 4261 * (The field <code>ps</code> is its <code>PreparedStatement</code> object, and 4262 * the field <code>rs</code> is its <code>ResultSet</code> object.) 4263 * <P> 4264 * The <code>command</code> property may not be needed if the <code>RowSet</code> 4265 * object gets its data from a source that does not support commands, 4266 * such as a spreadsheet or other tabular file. 4267 * Thus, this property is optional and may be <code>null</code>. 4268 * 4269 * @param command a <code>String</code> object containing an SQL query 4270 * that will be set as this <code>RowSet</code> object's command 4271 * property; may be <code>null</code> but may not be an empty string 4272 * @throws SQLException if an empty string is provided as the command value 4273 * @see #getCommand 4274 */ 4275 public void setCommand(String command) throws SQLException { 4276 String oldVal; 4277 4278 if (getCommand() != null) { 4279 if(!getCommand().equals(command)) { 4280 oldVal = getCommand(); 4281 super.setCommand(command); 4282 ps = null; 4283 rs = null; 4284 propertyChangeSupport.firePropertyChange("command", oldVal,command); 4285 } 4286 } 4287 else { 4288 super.setCommand(command); 4289 propertyChangeSupport.firePropertyChange("command", null,command); 4290 } 4291 } 4292 4293 // Over riding the setDataSourceName from BaseRowSet for 4294 // firing the propertyChangeSupport Event for 4295 // Rave requirements when this property's values 4296 // changes. 4297 4298 /** 4299 * Sets the <code>dataSourceName</code> property for this <code>JdbcRowSet</code> 4300 * object to the given logical name and sets this <code>JdbcRowSet</code> object's 4301 * Url property to <code>null</code>. In addition, if the <code>dataSourceName</code> 4302 * property has previously been set and is different from the one supplied, 4303 * this method sets this <code>JdbcRowSet</code> object's private fields 4304 * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>. 4305 * (The field <code>ps</code> is its <code>PreparedStatement</code> object, 4306 * the field <code>rs</code> is its <code>ResultSet</code> object, and 4307 * the field <code>conn</code> is its <code>Connection</code> object.) 4308 * <P> 4309 * The name supplied to this method must have been bound to a 4310 * <code>DataSource</code> object in a JNDI naming service so that an 4311 * application can do a lookup using that name to retrieve the 4312 * <code>DataSource</code> object bound to it. The <code>DataSource</code> 4313 * object can then be used to establish a connection to the data source it 4314 * represents. 4315 * <P> 4316 * Users should set either the Url property or the dataSourceName property. 4317 * If both properties are set, the driver will use the property set most recently. 4318 * 4319 * @param dsName a <code>String</code> object with the name that can be supplied 4320 * to a naming service based on JNDI technology to retrieve the 4321 * <code>DataSource</code> object that can be used to get a connection; 4322 * may be <code>null</code> 4323 * @throws SQLException if there is a problem setting the 4324 * <code>dataSourceName</code> property 4325 * @see #getDataSourceName 4326 */ 4327 public void setDataSourceName(String dsName) throws SQLException{ 4328 String oldVal; 4329 4330 if(getDataSourceName() != null) { 4331 if(!getDataSourceName().equals(dsName)) { 4332 oldVal = getDataSourceName(); 4333 super.setDataSourceName(dsName); 4334 conn = null; 4335 ps = null; 4336 rs = null; 4337 propertyChangeSupport.firePropertyChange("dataSourceName",oldVal,dsName); 4338 } 4339 } 4340 else { 4341 super.setDataSourceName(dsName); 4342 propertyChangeSupport.firePropertyChange("dataSourceName",null,dsName); 4343 } 4344 } 4345 4346 // Over riding the setUrl from BaseRowSet for 4347 // firing the propertyChangeSupport Event for 4348 // Rave requirements when this property's values 4349 // changes. 4350 4351 /** 4352 * Sets the Url property for this <code>JdbcRowSet</code> object 4353 * to the given <code>String</code> object and sets the dataSource name 4354 * property to <code>null</code>. In addition, if the Url property has 4355 * previously been set to a non <code>null</code> value and its value 4356 * is different from the value to be set, 4357 * this method sets this <code>JdbcRowSet</code> object's private fields 4358 * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>. 4359 * (The field <code>ps</code> is its <code>PreparedStatement</code> object, 4360 * the field <code>rs</code> is its <code>ResultSet</code> object, and 4361 * the field <code>conn</code> is its <code>Connection</code> object.) 4362 * <P> 4363 * The Url property is a JDBC URL that is used when 4364 * the connection is created using a JDBC technology-enabled driver 4365 * ("JDBC driver") and the <code>DriverManager</code>. 4366 * The correct JDBC URL for the specific driver to be used can be found 4367 * in the driver documentation. Although there are guidelines for for how 4368 * a JDBC URL is formed, 4369 * a driver vendor can specify any <code>String</code> object except 4370 * one with a length of <code>0</code> (an empty string). 4371 * <P> 4372 * Setting the Url property is optional if connections are established using 4373 * a <code>DataSource</code> object instead of the <code>DriverManager</code>. 4374 * The driver will use either the URL property or the 4375 * dataSourceName property to create a connection, whichever was 4376 * specified most recently. If an application uses a JDBC URL, it 4377 * must load a JDBC driver that accepts the JDBC URL before it uses the 4378 * <code>RowSet</code> object to connect to a database. The <code>RowSet</code> 4379 * object will use the URL internally to create a database connection in order 4380 * to read or write data. 4381 * 4382 * @param url a <code>String</code> object that contains the JDBC URL 4383 * that will be used to establish the connection to a database for this 4384 * <code>RowSet</code> object; may be <code>null</code> but must not 4385 * be an empty string 4386 * @throws SQLException if an error occurs setting the Url property or the 4387 * parameter supplied is a string with a length of <code>0</code> (an 4388 * empty string) 4389 * @see #getUrl 4390 */ 4391 4392 public void setUrl(String url) throws SQLException { 4393 String oldVal; 4394 4395 if(getUrl() != null) { 4396 if(!getUrl().equals(url)) { 4397 oldVal = getUrl(); 4398 super.setUrl(url); 4399 conn = null; 4400 ps = null; 4401 rs = null; 4402 propertyChangeSupport.firePropertyChange("url", oldVal, url); 4403 } 4404 } 4405 else { 4406 super.setUrl(url); 4407 propertyChangeSupport.firePropertyChange("url", null, url); 4408 } 4409 } 4410 4411 // Over riding the setUsername from BaseRowSet for 4412 // firing the propertyChangeSupport Event for 4413 // Rave requirements when this property's values 4414 // changes. 4415 4416 /** 4417 * Sets the username property for this <code>JdbcRowSet</code> object 4418 * to the given user name. Because it 4419 * is not serialized, the username property is set at run time before 4420 * calling the method <code>execute</code>. In addition, 4421 * if the <code>username</code> property is already set with a 4422 * non-null value and that value is different from the <code>String</code> 4423 * object to be set, 4424 * this method sets this <code>JdbcRowSet</code> object's private fields 4425 * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>. 4426 * (The field <code>ps</code> is its <code>PreparedStatement</code> object, 4427 * <code>rs</code> is its <code>ResultSet</code> object, and 4428 * <code>conn</code> is its <code>Connection</code> object.) 4429 * Setting these fields to <code>null</code> ensures that only current 4430 * values will be used. 4431 * 4432 * @param uname the <code>String</code> object containing the user name that 4433 * is supplied to the data source to create a connection. It may be null. 4434 * @see #getUsername 4435 */ 4436 public void setUsername(String uname) { 4437 String oldVal; 4438 4439 if( getUsername() != null) { 4440 if(!getUsername().equals(uname)) { 4441 oldVal = getUsername(); 4442 super.setUsername(uname); 4443 conn = null; 4444 ps = null; 4445 rs = null; 4446 propertyChangeSupport.firePropertyChange("username",oldVal,uname); 4447 } 4448 } 4449 else{ 4450 super.setUsername(uname); 4451 propertyChangeSupport.firePropertyChange("username",null,uname); 4452 } 4453 } 4454 4455 // Over riding the setPassword from BaseRowSet for 4456 // firing the propertyChangeSupport Event for 4457 // Rave requirements when this property's values 4458 // changes. 4459 4460 /** 4461 * Sets the password property for this <code>JdbcRowSet</code> object 4462 * to the given <code>String</code> object. Because it 4463 * is not serialized, the password property is set at run time before 4464 * calling the method <code>execute</code>. Its default valus is 4465 * <code>null</code>. In addition, 4466 * if the <code>password</code> property is already set with a 4467 * non-null value and that value is different from the one being set, 4468 * this method sets this <code>JdbcRowSet</code> object's private fields 4469 * <code>ps</code>, <code>rs</code>, and <code>conn</code> to <code>null</code>. 4470 * (The field <code>ps</code> is its <code>PreparedStatement</code> object, 4471 * <code>rs</code> is its <code>ResultSet</code> object, and 4472 * <code>conn</code> is its <code>Connection</code> object.) 4473 * Setting these fields to <code>null</code> ensures that only current 4474 * values will be used. 4475 * 4476 * @param password the <code>String</code> object that represents the password 4477 * that must be supplied to the database to create a connection 4478 */ 4479 public void setPassword(String password) { 4480 String oldVal; 4481 4482 if ( getPassword() != null) { 4483 if(!getPassword().equals(password)) { 4484 oldVal = getPassword(); 4485 super.setPassword(password); 4486 conn = null; 4487 ps = null; 4488 rs = null; 4489 propertyChangeSupport.firePropertyChange("password",oldVal,password); 4490 } 4491 } 4492 else{ 4493 super.setPassword(password); 4494 propertyChangeSupport.firePropertyChange("password",null,password); 4495 } 4496 } 4497 4498 /** 4499 * Sets the type for this <code>RowSet</code> object to the specified type. 4500 * The default type is <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>. 4501 * 4502 * @param type one of the following constants: 4503 * <code>ResultSet.TYPE_FORWARD_ONLY</code>, 4504 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or 4505 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code> 4506 * @throws SQLException if the parameter supplied is not one of the 4507 * following constants: 4508 * <code>ResultSet.TYPE_FORWARD_ONLY</code> or 4509 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code> 4510 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code> 4511 * @see #getConcurrency 4512 * @see #getType 4513 */ 4514 4515 public void setType(int type) throws SQLException { 4516 4517 int oldVal; 4518 4519 try { 4520 oldVal = getType(); 4521 }catch(SQLException ex) { 4522 oldVal = 0; 4523 } 4524 4525 if(oldVal != type) { 4526 super.setType(type); 4527 propertyChangeSupport.firePropertyChange("type",oldVal,type); 4528 } 4529 4530 } 4531 4532 /** 4533 * Sets the concurrency for this <code>RowSet</code> object to 4534 * the specified concurrency. The default concurrency for any <code>RowSet</code> 4535 * object (connected or disconnected) is <code>ResultSet.CONCUR_UPDATABLE</code>, 4536 * but this method may be called at any time to change the concurrency. 4537 * 4538 * @param concur one of the following constants: 4539 * <code>ResultSet.CONCUR_READ_ONLY</code> or 4540 * <code>ResultSet.CONCUR_UPDATABLE</code> 4541 * @throws SQLException if the parameter supplied is not one of the 4542 * following constants: 4543 * <code>ResultSet.CONCUR_UPDATABLE</code> or 4544 * <code>ResultSet.CONCUR_READ_ONLY</code> 4545 * @see #getConcurrency 4546 * @see #isReadOnly 4547 */ 4548 public void setConcurrency(int concur) throws SQLException { 4549 4550 int oldVal; 4551 4552 try { 4553 oldVal = getConcurrency(); 4554 }catch(NullPointerException ex) { 4555 oldVal = 0; 4556 } 4557 4558 if(oldVal != concur) { 4559 super.setConcurrency(concur); 4560 propertyChangeSupport.firePropertyChange("concurrency",oldVal,concur); 4561 } 4562 4563 } 4564 4565 /** 4566 * Sets the transaction isolation property for this JDBC <code>RowSet</code> object to the given 4567 * constant. The DBMS will use this transaction isolation level for 4568 * transactions if it can. 4569 * <p> 4570 * For <code>RowSet</code> implementations such as 4571 * the <code>CachedRowSet</code> that operate in a disconnected environment, 4572 * the <code>SyncProvider</code> object being used 4573 * offers complementary locking and data integrity options. The 4574 * options described below are pertinent only to connected <code>RowSet</code> 4575 * objects (<code>JdbcRowSet</code> objects). 4576 * 4577 * @param transIso one of the following constants, listed in ascending order: 4578 * <code>Connection.TRANSACTION_NONE</code>, 4579 * <code>Connection.TRANSACTION_READ_UNCOMMITTED</code>, 4580 * <code>Connection.TRANSACTION_READ_COMMITTED</code>, 4581 * <code>Connection.TRANSACTION_REPEATABLE_READ</code>, or 4582 * <code>Connection.TRANSACTION_SERIALIZABLE</code> 4583 * @throws SQLException if the given parameter is not one of the Connection 4584 * constants 4585 * @see javax.sql.rowset.spi.SyncFactory 4586 * @see javax.sql.rowset.spi.SyncProvider 4587 * @see #getTransactionIsolation 4588 */ 4589 public void setTransactionIsolation(int transIso) throws SQLException { 4590 4591 int oldVal; 4592 4593 try { 4594 oldVal = getTransactionIsolation(); 4595 }catch(NullPointerException ex) { 4596 oldVal = 0; 4597 } 4598 4599 if(oldVal != transIso) { 4600 super.setTransactionIsolation(transIso); 4601 propertyChangeSupport.firePropertyChange("transactionIsolation",oldVal,transIso); 4602 } 4603 4604 } 4605 4606 /** 4607 * Sets the maximum number of rows that this <code>RowSet</code> object may contain to 4608 * the given number. If this limit is exceeded, the excess rows are 4609 * silently dropped. 4610 * 4611 * @param mRows an <code>int</code> indicating the current maximum number 4612 * of rows; zero means that there is no limit 4613 * @throws SQLException if an error occurs internally setting the 4614 * maximum limit on the number of rows that a JDBC <code>RowSet</code> object 4615 * can contain; or if <i>max</i> is less than <code>0</code>; or 4616 * if <i>max</i> is less than the <code>fetchSize</code> of the 4617 * <code>RowSet</code> 4618 */ 4619 public void setMaxRows(int mRows) throws SQLException { 4620 4621 int oldVal; 4622 4623 try { 4624 oldVal = getMaxRows(); 4625 }catch(NullPointerException ex) { 4626 oldVal = 0; 4627 } 4628 4629 if(oldVal != mRows) { 4630 super.setMaxRows(mRows); 4631 propertyChangeSupport.firePropertyChange("maxRows",oldVal,mRows); 4632 } 4633 4634 } 4635 4636 /** 4637 * Retrieves the value of the designated <code>SQL XML</code> parameter as a 4638 * <code>SQLXML</code> object in the Java programming language. 4639 * @param columnIndex the first column is 1, the second is 2, ... 4640 * @return a SQLXML object that maps an SQL XML value 4641 * @throws SQLException if a database access error occurs 4642 * @since 6.0 4643 */ 4644 public SQLXML getSQLXML(int columnIndex) throws SQLException { 4645 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4646 } 4647 4648 /** 4649 * Retrieves the value of the designated <code>SQL XML</code> parameter as a 4650 * <code>SQLXML</code> object in the Java programming language. 4651 * @param colName the name of the column from which to retrieve the value 4652 * @return a SQLXML object that maps an SQL XML value 4653 * @throws SQLException if a database access error occurs 4654 */ 4655 public SQLXML getSQLXML(String colName) throws SQLException { 4656 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4657 } 4658 4659 /** 4660 * Retrieves the value of the designated column in the current row of this 4661 * <code>ResultSet</code> object as a java.sql.RowId object in the Java 4662 * programming language. 4663 * 4664 * @param columnIndex the first column is 1, the second 2, ... 4665 * @return the column value if the value is a SQL <code>NULL</code> the 4666 * value returned is <code>null</code> 4667 * @throws SQLException if a database access error occurs 4668 * @since 6.0 4669 */ 4670 public RowId getRowId(int columnIndex) throws SQLException { 4671 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4672 } 4673 4674 /** 4675 * Retrieves the value of the designated column in the current row of this 4676 * <code>ResultSet</code> object as a java.sql.RowId object in the Java 4677 * programming language. 4678 * 4679 * @param columnName the name of the column 4680 * @return the column value if the value is a SQL <code>NULL</code> the 4681 * value returned is <code>null</code> 4682 * @throws SQLException if a database access error occurs 4683 * @since 6.0 4684 */ 4685 public RowId getRowId(String columnName) throws SQLException { 4686 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4687 } 4688 4689 /** 4690 * Updates the designated column with a <code>RowId</code> value. The updater 4691 * methods are used to update column values in the current row or the insert 4692 * row. The updater methods do not update the underlying database; instead 4693 * the <code>updateRow<code> or <code>insertRow</code> methods are called 4694 * to update the database. 4695 * 4696 * @param columnIndex the first column is 1, the second 2, ... 4697 * @param x the column value 4698 * @throws SQLException if a database access occurs 4699 * @since 6.0 4700 */ 4701 public void updateRowId(int columnIndex, RowId x) throws SQLException { 4702 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4703 } 4704 4705 /** 4706 * Updates the designated column with a <code>RowId</code> value. The updater 4707 * methods are used to update column values in the current row or the insert 4708 * row. The updater methods do not update the underlying database; instead 4709 * the <code>updateRow<code> or <code>insertRow</code> methods are called 4710 * to update the database. 4711 * 4712 * @param columnName the name of the column 4713 * @param x the column value 4714 * @throws SQLException if a database access occurs 4715 * @since 6.0 4716 */ 4717 public void updateRowId(String columnName, RowId x) throws SQLException { 4718 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4719 } 4720 4721 /** 4722 * Retrieves the holdability of this ResultSet object 4723 * @return either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT 4724 * @throws SQLException if a database error occurs 4725 * @since 6.0 4726 */ 4727 public int getHoldability() throws SQLException { 4728 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4729 } 4730 4731 /** 4732 * Retrieves whether this ResultSet object has been closed. A ResultSet is closed if the 4733 * method close has been called on it, or if it is automatically closed. 4734 * @return true if this ResultSet object is closed; false if it is still open 4735 * @throws SQLException if a database access error occurs 4736 * @since 6.0 4737 */ 4738 public boolean isClosed() throws SQLException { 4739 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4740 } 4741 4742 /** 4743 * This method is used for updating columns that support National Character sets. 4744 * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns. 4745 * @param columnIndex the first column is 1, the second 2, ... 4746 * @param nString the value for the column to be updated 4747 * @throws SQLException if a database access error occurs 4748 * @since 6.0 4749 */ 4750 public void updateNString(int columnIndex, String nString) throws SQLException { 4751 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4752 } 4753 4754 /** 4755 * This method is used for updating columns that support National Character sets. 4756 * It can be used for updating NCHAR,NVARCHAR and LONGNVARCHAR columns. 4757 * @param columnName name of the Column 4758 * @param nString the value for the column to be updated 4759 * @throws SQLException if a database access error occurs 4760 * @since 6.0 4761 */ 4762 public void updateNString(String columnName, String nString) throws SQLException { 4763 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4764 } 4765 4766 4767 /*o 4768 * This method is used for updating SQL <code>NCLOB</code> type that maps 4769 * to <code>java.sql.Types.NCLOB</code> 4770 * @param columnIndex the first column is 1, the second 2, ... 4771 * @param nClob the value for the column to be updated 4772 * @throws SQLException if a database access error occurs 4773 * @since 6.0 4774 */ 4775 public void updateNClob(int columnIndex, NClob nClob) throws SQLException { 4776 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4777 } 4778 4779 /** 4780 * This method is used for updating SQL <code>NCLOB</code> type that maps 4781 * to <code>java.sql.Types.NCLOB</code> 4782 * @param columnName name of the column 4783 * @param nClob the value for the column to be updated 4784 * @throws SQLException if a database access error occurs 4785 * @since 6.0 4786 */ 4787 public void updateNClob(String columnName, NClob nClob) throws SQLException { 4788 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4789 } 4790 4791 /** 4792 * Retrieves the value of the designated column in the current row 4793 * of this <code>ResultSet</code> object as a <code>NClob</code> object 4794 * in the Java programming language. 4795 * 4796 * @param i the first column is 1, the second is 2, ... 4797 * @return a <code>NClob</code> object representing the SQL 4798 * <code>NCLOB</code> value in the specified column 4799 * @exception SQLException if a database access error occurs 4800 * @since 6.0 4801 */ 4802 public NClob getNClob(int i) throws SQLException { 4803 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4804 } 4805 4806 4807 /** 4808 * Retrieves the value of the designated column in the current row 4809 * of this <code>ResultSet</code> object as a <code>NClob</code> object 4810 * in the Java programming language. 4811 * 4812 * @param colName the name of the column from which to retrieve the value 4813 * @return a <code>NClob</code> object representing the SQL <code>NCLOB</code> 4814 * value in the specified column 4815 * @exception SQLException if a database access error occurs 4816 * @since 6.0 4817 */ 4818 public NClob getNClob(String colName) throws SQLException { 4819 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4820 } 4821 4822 public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException{ 4823 return null; 4824 } 4825 4826 public boolean isWrapperFor(Class<?> interfaces) throws SQLException { 4827 return false; 4828 } 4829 4830 /** 4831 * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an 4832 * SQL <code>XML</code> value when it sends it to the database. 4833 * @param parameterIndex index of the first parameter is 1, the second is 2, ... 4834 * @param xmlObject a <code>SQLXML</code> object that maps an SQL <code>XML</code> value 4835 * @throws SQLException if a database access error occurs 4836 * @since 1.6 4837 */ 4838 public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException { 4839 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4840 } 4841 4842 /** 4843 * Sets the designated parameter to the given <code>java.sql.SQLXML</code> object. The driver converts this to an 4844 * <code>SQL XML</code> value when it sends it to the database. 4845 * @param parameterName the name of the parameter 4846 * @param xmlObject a <code>SQLXML</code> object that maps an <code>SQL XML</code> value 4847 * @throws SQLException if a database access error occurs 4848 * @since 1.6 4849 */ 4850 public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException { 4851 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4852 } 4853 4854 /** 4855 * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The 4856 * driver converts this to a SQL <code>ROWID</code> value when it sends it 4857 * to the database 4858 * 4859 * @param parameterIndex the first parameter is 1, the second is 2, ... 4860 * @param x the parameter value 4861 * @throws SQLException if a database access error occurs 4862 * 4863 * @since 1.6 4864 */ 4865 public void setRowId(int parameterIndex, RowId x) throws SQLException { 4866 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4867 } 4868 4869 /** 4870 * Sets the designated parameter to the given <code>java.sql.RowId</code> object. The 4871 * driver converts this to a SQL <code>ROWID</code> when it sends it to the 4872 * database. 4873 * 4874 * @param parameterName the name of the parameter 4875 * @param x the parameter value 4876 * @throws SQLException if a database access error occurs 4877 * @since 1.6 4878 */ 4879 public void setRowId(String parameterName, RowId x) throws SQLException { 4880 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4881 } 4882 4883 4884 /** 4885 * Sets the designated paramter to the given <code>String</code> object. 4886 * The driver converts this to a SQL <code>NCHAR</code> or 4887 * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> value 4888 * (depending on the argument's 4889 * size relative to the driver's limits on <code>NVARCHAR</code> values) 4890 * when it sends it to the database. 4891 * 4892 * @param parameterIndex of the first parameter is 1, the second is 2, ... 4893 * @param value the parameter value 4894 * @throws SQLException if the driver does not support national 4895 * character sets; if the driver can detect that a data conversion 4896 * error could occur ; or if a database access error occurs 4897 * @since 1.6 4898 */ 4899 public void setNString(int parameterIndex, String value) throws SQLException { 4900 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4901 } 4902 4903 4904 /** 4905 * Sets the designated parameter in this <code>RowSet</code> object's command 4906 * to a <code>Reader</code> object. The 4907 * <code>Reader</code> reads the data till end-of-file is reached. The 4908 * driver does the necessary conversion from Java character format to 4909 * the national character set in the database. 4910 4911 * <P><B>Note:</B> This stream object can either be a standard 4912 * Java stream object or your own subclass that implements the 4913 * standard interface. 4914 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 4915 * it might be more efficient to use a version of 4916 * <code>setNCharacterStream</code> which takes a length parameter. 4917 * 4918 * @param parameterIndex of the first parameter is 1, the second is 2, ... 4919 * @param value the parameter value 4920 * @throws SQLException if the driver does not support national 4921 * character sets; if the driver can detect that a data conversion 4922 * error could occur ; if a database access error occurs; or 4923 * this method is called on a closed <code>PreparedStatement</code> 4924 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 4925 * @since 1.6 4926 */ 4927 public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException { 4928 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4929 } 4930 4931 /** 4932 * Sets the designated parameter to a <code>java.sql.NClob</code> object. The object 4933 * implements the <code>java.sql.NClob</code> interface. This <code>NClob</code> 4934 * object maps to a SQL <code>NCLOB</code>. 4935 * @param parameterName the name of the column to be set 4936 * @param value the parameter value 4937 * @throws SQLException if the driver does not support national 4938 * character sets; if the driver can detect that a data conversion 4939 * error could occur; or if a database access error occurs 4940 * @since 1.6 4941 */ 4942 public void setNClob(String parameterName, NClob value) throws SQLException { 4943 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4944 } 4945 4946 4947 /** 4948 * Retrieves the value of the designated column in the current row 4949 * of this <code>ResultSet</code> object as a 4950 * <code>java.io.Reader</code> object. 4951 * It is intended for use when 4952 * accessing <code>NCHAR</code>,<code>NVARCHAR</code> 4953 * and <code>LONGNVARCHAR</code> columns. 4954 * 4955 * @return a <code>java.io.Reader</code> object that contains the column 4956 * value; if the value is SQL <code>NULL</code>, the value returned is 4957 * <code>null</code> in the Java programming language. 4958 * @param columnIndex the first column is 1, the second is 2, ... 4959 * @exception SQLException if a database access error occurs 4960 * @since 1.6 4961 */ 4962 public java.io.Reader getNCharacterStream(int columnIndex) throws SQLException { 4963 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4964 } 4965 4966 4967 /** 4968 * Retrieves the value of the designated column in the current row 4969 * of this <code>ResultSet</code> object as a 4970 * <code>java.io.Reader</code> object. 4971 * It is intended for use when 4972 * accessing <code>NCHAR</code>,<code>NVARCHAR</code> 4973 * and <code>LONGNVARCHAR</code> columns. 4974 * 4975 * @param columnName the name of the column 4976 * @return a <code>java.io.Reader</code> object that contains the column 4977 * value; if the value is SQL <code>NULL</code>, the value returned is 4978 * <code>null</code> in the Java programming language 4979 * @exception SQLException if a database access error occurs 4980 * @since 1.6 4981 */ 4982 public java.io.Reader getNCharacterStream(String columnName) throws SQLException { 4983 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 4984 } 4985 4986 /** 4987 * Updates the designated column with a <code>java.sql.SQLXML</code> value. 4988 * The updater 4989 * methods are used to update column values in the current row or the insert 4990 * row. The updater methods do not update the underlying database; instead 4991 * the <code>updateRow</code> or <code>insertRow</code> methods are called 4992 * to update the database. 4993 * @param columnIndex the first column is 1, the second 2, ... 4994 * @param xmlObject the value for the column to be updated 4995 * @throws SQLException if a database access error occurs 4996 * @since 1.6 4997 */ 4998 public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException { 4999 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5000 } 5001 5002 /** 5003 * Updates the designated column with a <code>java.sql.SQLXML</code> value. 5004 * The updater 5005 * methods are used to update column values in the current row or the insert 5006 * row. The updater methods do not update the underlying database; instead 5007 * the <code>updateRow</code> or <code>insertRow</code> methods are called 5008 * to update the database. 5009 * 5010 * @param columnName the name of the column 5011 * @param xmlObject the column value 5012 * @throws SQLException if a database access occurs 5013 * @since 1.6 5014 */ 5015 public void updateSQLXML(String columnName, SQLXML xmlObject) throws SQLException { 5016 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5017 } 5018 5019 /** 5020 * Retrieves the value of the designated column in the current row 5021 * of this <code>ResultSet</code> object as 5022 * a <code>String</code> in the Java programming language. 5023 * It is intended for use when 5024 * accessing <code>NCHAR</code>,<code>NVARCHAR</code> 5025 * and <code>LONGNVARCHAR</code> columns. 5026 * 5027 * @param columnIndex the first column is 1, the second is 2, ... 5028 * @return the column value; if the value is SQL <code>NULL</code>, the 5029 * value returned is <code>null</code> 5030 * @exception SQLException if a database access error occurs 5031 * @since 1.6 5032 */ 5033 public String getNString(int columnIndex) throws SQLException { 5034 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5035 } 5036 5037 /** 5038 * Retrieves the value of the designated column in the current row 5039 * of this <code>ResultSet</code> object as 5040 * a <code>String</code> in the Java programming language. 5041 * It is intended for use when 5042 * accessing <code>NCHAR</code>,<code>NVARCHAR</code> 5043 * and <code>LONGNVARCHAR</code> columns. 5044 * 5045 * @param columnName the SQL name of the column 5046 * @return the column value; if the value is SQL <code>NULL</code>, the 5047 * value returned is <code>null</code> 5048 * @exception SQLException if a database access error occurs 5049 * @since 1.6 5050 */ 5051 public String getNString(String columnName) throws SQLException { 5052 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5053 } 5054 5055 /** 5056 * Updates the designated column with a character stream value, which will 5057 * have the specified number of bytes. The driver does the necessary conversion 5058 * from Java character format to the national character set in the database. 5059 * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns. 5060 * The updater methods are used to update column values in the current row or 5061 * the insert row. The updater methods do not update the underlying database; 5062 * instead the updateRow or insertRow methods are called to update the database. 5063 * 5064 * @param columnIndex - the first column is 1, the second is 2, ... 5065 * @param x - the new column value 5066 * @param length - the length of the stream 5067 * @exception SQLException if a database access error occurs 5068 * @since 1.6 5069 */ 5070 public void updateNCharacterStream(int columnIndex, 5071 java.io.Reader x, 5072 long length) 5073 throws SQLException { 5074 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5075 } 5076 5077 /** 5078 * Updates the designated column with a character stream value, which will 5079 * have the specified number of bytes. The driver does the necessary conversion 5080 * from Java character format to the national character set in the database. 5081 * It is intended for use when updating NCHAR,NVARCHAR and LONGNVARCHAR columns. 5082 * The updater methods are used to update column values in the current row or 5083 * the insert row. The updater methods do not update the underlying database; 5084 * instead the updateRow or insertRow methods are called to update the database. 5085 * 5086 * @param columnName - name of the Column 5087 * @param x - the new column value 5088 * @param length - the length of the stream 5089 * @exception SQLException if a database access error occurs 5090 * @since 1.6 5091 */ 5092 public void updateNCharacterStream(String columnName, 5093 java.io.Reader x, 5094 long length) 5095 throws SQLException { 5096 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5097 } 5098 5099 /** 5100 * Updates the designated column with a character stream value. The 5101 * driver does the necessary conversion from Java character format to 5102 * the national character set in the database. 5103 * It is intended for use when 5104 * updating <code>NCHAR</code>,<code>NVARCHAR</code> 5105 * and <code>LONGNVARCHAR</code> columns. 5106 * 5107 * The updater methods are used to update column values in the 5108 * current row or the insert row. The updater methods do not 5109 * update the underlying database; instead the <code>updateRow</code> or 5110 * <code>insertRow</code> methods are called to update the database. 5111 * 5112 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5113 * it might be more efficient to use a version of 5114 * <code>updateNCharacterStream</code> which takes a length parameter. 5115 * 5116 * @param columnIndex the first column is 1, the second is 2, ... 5117 * @param x the new column value 5118 * @exception SQLException if a database access error occurs, 5119 * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set 5120 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5121 * this method 5122 * @since 1.6 5123 */ 5124 public void updateNCharacterStream(int columnIndex, 5125 java.io.Reader x) throws SQLException { 5126 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5127 } 5128 5129 /** 5130 * Updates the designated column with a character stream value. The 5131 * driver does the necessary conversion from Java character format to 5132 * the national character set in the database. 5133 * It is intended for use when 5134 * updating <code>NCHAR</code>,<code>NVARCHAR</code> 5135 * and <code>LONGNVARCHAR</code> columns. 5136 * 5137 * The updater methods are used to update column values in the 5138 * current row or the insert row. The updater methods do not 5139 * update the underlying database; instead the <code>updateRow</code> or 5140 * <code>insertRow</code> methods are called to update the database. 5141 * 5142 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5143 * it might be more efficient to use a version of 5144 * <code>updateNCharacterStream</code> which takes a length parameter. 5145 * 5146 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5147 bel is the name of the column 5148 * @param reader the <code>java.io.Reader</code> object containing 5149 * the new column value 5150 * @exception SQLException if a database access error occurs, 5151 * the result set concurrency is <code>CONCUR_READ_ONLY</code> or this method is called on a closed result set 5152 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5153 * this method 5154 * @since 1.6 5155 */ 5156 public void updateNCharacterStream(String columnLabel, 5157 java.io.Reader reader) throws SQLException { 5158 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5159 } 5160 5161 /** 5162 * Updates the designated column using the given input stream, which 5163 * will have the specified number of bytes. 5164 * When a very large ASCII value is input to a <code>LONGVARCHAR</code> 5165 * parameter, it may be more practical to send it via a 5166 * <code>java.io.InputStream</code>. Data will be read from the stream 5167 * as needed until end-of-file is reached. The JDBC driver will 5168 * do any necessary conversion from ASCII to the database char format. 5169 * 5170 * <P><B>Note:</B> This stream object can either be a standard 5171 * Java stream object or your own subclass that implements the 5172 * standard interface. 5173 * <p> 5174 * The updater methods are used to update column values in the 5175 * current row or the insert row. The updater methods do not 5176 * update the underlying database; instead the <code>updateRow</code> or 5177 * <code>insertRow</code> methods are called to update the database. 5178 * 5179 * @param columnIndex the first column is 1, the second is 2, ... 5180 * @param inputStream An object that contains the data to set the parameter 5181 * value to. 5182 * @param length the number of bytes in the parameter data. 5183 * @exception SQLException if a database access error occurs, 5184 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5185 * or this method is called on a closed result set 5186 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5187 * this method 5188 * @since 1.6 5189 */ 5190 public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{ 5191 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5192 } 5193 5194 /** 5195 * Updates the designated column using the given input stream, which 5196 * will have the specified number of bytes. 5197 * When a very large ASCII value is input to a <code>LONGVARCHAR</code> 5198 * parameter, it may be more practical to send it via a 5199 * <code>java.io.InputStream</code>. Data will be read from the stream 5200 * as needed until end-of-file is reached. The JDBC driver will 5201 * do any necessary conversion from ASCII to the database char format. 5202 * 5203 * <P><B>Note:</B> This stream object can either be a standard 5204 * Java stream object or your own subclass that implements the 5205 * standard interface. 5206 * <p> 5207 * The updater methods are used to update column values in the 5208 * current row or the insert row. The updater methods do not 5209 * update the underlying database; instead the <code>updateRow</code> or 5210 * <code>insertRow</code> methods are called to update the database. 5211 * 5212 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column 5213 * @param inputStream An object that contains the data to set the parameter 5214 * value to. 5215 * @param length the number of bytes in the parameter data. 5216 * @exception SQLException if a database access error occurs, 5217 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5218 * or this method is called on a closed result set 5219 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5220 * this method 5221 * @since 1.6 5222 */ 5223 public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException { 5224 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5225 } 5226 5227 /** 5228 * Updates the designated column using the given input stream. 5229 * When a very large ASCII value is input to a <code>LONGVARCHAR</code> 5230 * parameter, it may be more practical to send it via a 5231 * <code>java.io.InputStream</code>. Data will be read from the stream 5232 * as needed until end-of-file is reached. The JDBC driver will 5233 * do any necessary conversion from ASCII to the database char format. 5234 * 5235 * <P><B>Note:</B> This stream object can either be a standard 5236 * Java stream object or your own subclass that implements the 5237 * standard interface. 5238 * 5239 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5240 * it might be more efficient to use a version of 5241 * <code>updateBlob</code> which takes a length parameter. 5242 * <p> 5243 * The updater methods are used to update column values in the 5244 * current row or the insert row. The updater methods do not 5245 * update the underlying database; instead the <code>updateRow</code> or 5246 * <code>insertRow</code> methods are called to update the database. 5247 * 5248 * @param columnIndex the first column is 1, the second is 2, ... 5249 * @param inputStream An object that contains the data to set the parameter 5250 * value to. 5251 * @exception SQLException if a database access error occurs, 5252 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5253 * or this method is called on a closed result set 5254 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5255 * this method 5256 * @since 1.6 5257 */ 5258 public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException { 5259 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5260 } 5261 5262 /** 5263 * Updates the designated column using the given input stream. 5264 * When a very large ASCII value is input to a <code>LONGVARCHAR</code> 5265 * parameter, it may be more practical to send it via a 5266 * <code>java.io.InputStream</code>. Data will be read from the stream 5267 * as needed until end-of-file is reached. The JDBC driver will 5268 * do any necessary conversion from ASCII to the database char format. 5269 * 5270 * <P><B>Note:</B> This stream object can either be a standard 5271 * Java stream object or your own subclass that implements the 5272 * standard interface. 5273 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5274 * it might be more efficient to use a version of 5275 * <code>updateBlob</code> which takes a length parameter. 5276 * <p> 5277 * The updater methods are used to update column values in the 5278 * current row or the insert row. The updater methods do not 5279 * update the underlying database; instead the <code>updateRow</code> or 5280 * <code>insertRow</code> methods are called to update the database. 5281 * 5282 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5283 bel is the name of the column 5284 * @param inputStream An object that contains the data to set the parameter 5285 * value to. 5286 * @exception SQLException if a database access error occurs, 5287 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5288 * or this method is called on a closed result set 5289 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5290 * this method 5291 * @since 1.6 5292 */ 5293 public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException { 5294 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5295 } 5296 5297 /** 5298 * Updates the designated column using the given <code>Reader</code> 5299 * object, which is the given number of characters long. 5300 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5301 * parameter, it may be more practical to send it via a 5302 * <code>java.io.Reader</code> object. The data will be read from the stream 5303 * as needed until end-of-file is reached. The JDBC driver will 5304 * do any necessary conversion from UNICODE to the database char format. 5305 * 5306 * <P><B>Note:</B> This stream object can either be a standard 5307 * Java stream object or your own subclass that implements the 5308 * standard interface. 5309 * <p> 5310 * The updater methods are used to update column values in the 5311 * current row or the insert row. The updater methods do not 5312 * update the underlying database; instead the <code>updateRow</code> or 5313 * <code>insertRow</code> methods are called to update the database. 5314 * 5315 * @param columnIndex the first column is 1, the second is 2, ... 5316 * @param reader An object that contains the data to set the parameter value to. 5317 * @param length the number of characters in the parameter data. 5318 * @exception SQLException if a database access error occurs, 5319 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5320 * or this method is called on a closed result set 5321 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5322 * this method 5323 * @since 1.6 5324 */ 5325 public void updateClob(int columnIndex, Reader reader, long length) throws SQLException { 5326 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5327 } 5328 5329 /** 5330 * Updates the designated column using the given <code>Reader</code> 5331 * object, which is the given number of characters long. 5332 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5333 * parameter, it may be more practical to send it via a 5334 * <code>java.io.Reader</code> object. The data will be read from the stream 5335 * as needed until end-of-file is reached. The JDBC driver will 5336 * do any necessary conversion from UNICODE to the database char format. 5337 * 5338 * <P><B>Note:</B> This stream object can either be a standard 5339 * Java stream object or your own subclass that implements the 5340 * standard interface. 5341 * <p> 5342 * The updater methods are used to update column values in the 5343 * current row or the insert row. The updater methods do not 5344 * update the underlying database; instead the <code>updateRow</code> or 5345 * <code>insertRow</code> methods are called to update the database. 5346 * 5347 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column 5348 * @param reader An object that contains the data to set the parameter value to. 5349 * @param length the number of characters in the parameter data. 5350 * @exception SQLException if a database access error occurs, 5351 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5352 * or this method is called on a closed result set 5353 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5354 * this method 5355 * @since 1.6 5356 */ 5357 public void updateClob(String columnLabel, Reader reader, long length) throws SQLException { 5358 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5359 } 5360 5361 /** 5362 * Updates the designated column using the given <code>Reader</code> 5363 * object. 5364 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5365 * parameter, it may be more practical to send it via a 5366 * <code>java.io.Reader</code> object. The data will be read from the stream 5367 * as needed until end-of-file is reached. The JDBC driver will 5368 * do any necessary conversion from UNICODE to the database char format. 5369 * 5370 * <P><B>Note:</B> This stream object can either be a standard 5371 * Java stream object or your own subclass that implements the 5372 * standard interface. 5373 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5374 * it might be more efficient to use a version of 5375 * <code>updateClob</code> which takes a length parameter. 5376 * <p> 5377 * The updater methods are used to update column values in the 5378 * current row or the insert row. The updater methods do not 5379 * update the underlying database; instead the <code>updateRow</code> or 5380 * <code>insertRow</code> methods are called to update the database. 5381 * 5382 * @param columnIndex the first column is 1, the second is 2, ... 5383 * @param reader An object that contains the data to set the parameter value to. 5384 * @exception SQLException if a database access error occurs, 5385 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5386 * or this method is called on a closed result set 5387 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5388 * this method 5389 * @since 1.6 5390 */ 5391 public void updateClob(int columnIndex, Reader reader) throws SQLException { 5392 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5393 } 5394 5395 /** 5396 * Updates the designated column using the given <code>Reader</code> 5397 * object. 5398 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5399 * parameter, it may be more practical to send it via a 5400 * <code>java.io.Reader</code> object. The data will be read from the stream 5401 * as needed until end-of-file is reached. The JDBC driver will 5402 * do any necessary conversion from UNICODE to the database char format. 5403 * 5404 * <P><B>Note:</B> This stream object can either be a standard 5405 * Java stream object or your own subclass that implements the 5406 * standard interface. 5407 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5408 * it might be more efficient to use a version of 5409 * <code>updateClob</code> which takes a length parameter. 5410 * <p> 5411 * The updater methods are used to update column values in the 5412 * current row or the insert row. The updater methods do not 5413 * update the underlying database; instead the <code>updateRow</code> or 5414 * <code>insertRow</code> methods are called to update the database. 5415 * 5416 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5417 bel is the name of the column 5418 * @param reader An object that contains the data to set the parameter value to. 5419 * @exception SQLException if a database access error occurs, 5420 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5421 * or this method is called on a closed result set 5422 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5423 * this method 5424 * @since 1.6 5425 */ 5426 public void updateClob(String columnLabel, Reader reader) throws SQLException { 5427 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5428 } 5429 5430 /** 5431 * Updates the designated column using the given <code>Reader</code> 5432 * object, which is the given number of characters long. 5433 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5434 * parameter, it may be more practical to send it via a 5435 * <code>java.io.Reader</code> object. The data will be read from the stream 5436 * as needed until end-of-file is reached. The JDBC driver will 5437 * do any necessary conversion from UNICODE to the database char format. 5438 * 5439 * <P><B>Note:</B> This stream object can either be a standard 5440 * Java stream object or your own subclass that implements the 5441 * standard interface. 5442 * <p> 5443 * The updater methods are used to update column values in the 5444 * current row or the insert row. The updater methods do not 5445 * update the underlying database; instead the <code>updateRow</code> or 5446 * <code>insertRow</code> methods are called to update the database. 5447 * 5448 * @param columnIndex the first column is 1, the second 2, ... 5449 * @param reader An object that contains the data to set the parameter value to. 5450 * @param length the number of characters in the parameter data. 5451 * @throws SQLException if the driver does not support national 5452 * character sets; if the driver can detect that a data conversion 5453 * error could occur; this method is called on a closed result set, 5454 * if a database access error occurs or 5455 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5456 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5457 * this method 5458 * @since 1.6 5459 */ 5460 public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException { 5461 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5462 } 5463 5464 /** 5465 * Updates the designated column using the given <code>Reader</code> 5466 * object, which is the given number of characters long. 5467 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5468 * parameter, it may be more practical to send it via a 5469 * <code>java.io.Reader</code> object. The data will be read from the stream 5470 * as needed until end-of-file is reached. The JDBC driver will 5471 * do any necessary conversion from UNICODE to the database char format. 5472 * 5473 * <P><B>Note:</B> This stream object can either be a standard 5474 * Java stream object or your own subclass that implements the 5475 * standard interface. 5476 * <p> 5477 * The updater methods are used to update column values in the 5478 * current row or the insert row. The updater methods do not 5479 * update the underlying database; instead the <code>updateRow</code> or 5480 * <code>insertRow</code> methods are called to update the database. 5481 * 5482 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column 5483 * @param reader An object that contains the data to set the parameter value to. 5484 * @param length the number of characters in the parameter data. 5485 * @throws SQLException if the driver does not support national 5486 * character sets; if the driver can detect that a data conversion 5487 * error could occur; this method is called on a closed result set; 5488 * if a database access error occurs or 5489 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5490 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5491 * this method 5492 * @since 1.6 5493 */ 5494 public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException { 5495 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5496 } 5497 5498 /** 5499 * Updates the designated column using the given <code>Reader</code> 5500 * object. 5501 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5502 * parameter, it may be more practical to send it via a 5503 * <code>java.io.Reader</code> object. The data will be read from the stream 5504 * as needed until end-of-file is reached. The JDBC driver will 5505 * do any necessary conversion from UNICODE to the database char format. 5506 * 5507 * <P><B>Note:</B> This stream object can either be a standard 5508 * Java stream object or your own subclass that implements the 5509 * standard interface. 5510 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5511 * it might be more efficient to use a version of 5512 * <code>updateNClob</code> which takes a length parameter. 5513 * <p> 5514 * The updater methods are used to update column values in the 5515 * current row or the insert row. The updater methods do not 5516 * update the underlying database; instead the <code>updateRow</code> or 5517 * <code>insertRow</code> methods are called to update the database. 5518 * 5519 * @param columnIndex the first column is 1, the second 2, ... 5520 * @param reader An object that contains the data to set the parameter value to. 5521 * @throws SQLException if the driver does not support national 5522 * character sets; if the driver can detect that a data conversion 5523 * error could occur; this method is called on a closed result set, 5524 * if a database access error occurs or 5525 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5526 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5527 * this method 5528 * @since 1.6 5529 */ 5530 public void updateNClob(int columnIndex, Reader reader) throws SQLException { 5531 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5532 } 5533 5534 /** 5535 * Updates the designated column using the given <code>Reader</code> 5536 * object. 5537 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 5538 * parameter, it may be more practical to send it via a 5539 * <code>java.io.Reader</code> object. The data will be read from the stream 5540 * as needed until end-of-file is reached. The JDBC driver will 5541 * do any necessary conversion from UNICODE to the database char format. 5542 * 5543 * <P><B>Note:</B> This stream object can either be a standard 5544 * Java stream object or your own subclass that implements the 5545 * standard interface. 5546 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5547 * it might be more efficient to use a version of 5548 * <code>updateNClob</code> which takes a length parameter. 5549 * <p> 5550 * The updater methods are used to update column values in the 5551 * current row or the insert row. The updater methods do not 5552 * update the underlying database; instead the <code>updateRow</code> or 5553 * <code>insertRow</code> methods are called to update the database. 5554 * 5555 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5556 bel is the name of the column 5557 * @param reader An object that contains the data to set the parameter value to. 5558 * @throws SQLException if the driver does not support national 5559 * character sets; if the driver can detect that a data conversion 5560 * error could occur; this method is called on a closed result set; 5561 * if a database access error occurs or 5562 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5563 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5564 * this method 5565 * @since 1.6 5566 */ 5567 public void updateNClob(String columnLabel, Reader reader) throws SQLException { 5568 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5569 } 5570 5571 5572 /** 5573 * Updates the designated column with an ascii stream value, which will have 5574 * the specified number of bytes. 5575 * The updater methods are used to update column values in the 5576 * current row or the insert row. The updater methods do not 5577 * update the underlying database; instead the <code>updateRow</code> or 5578 * <code>insertRow</code> methods are called to update the database. 5579 * 5580 * @param columnIndex the first column is 1, the second is 2, ... 5581 * @param x the new column value 5582 * @param length the length of the stream 5583 * @exception SQLException if a database access error occurs, 5584 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5585 * or this method is called on a closed result set 5586 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5587 * this method 5588 * @since 1.6 5589 */ 5590 public void updateAsciiStream(int columnIndex, 5591 java.io.InputStream x, 5592 long length) throws SQLException { 5593 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5594 } 5595 5596 /** 5597 * Updates the designated column with a binary stream value, which will have 5598 * the specified number of bytes. 5599 * The updater methods are used to update column values in the 5600 * current row or the insert row. The updater methods do not 5601 * update the underlying database; instead the <code>updateRow</code> or 5602 * <code>insertRow</code> methods are called to update the database. 5603 * 5604 * @param columnIndex the first column is 1, the second is 2, ... 5605 * @param x the new column value 5606 * @param length the length of the stream 5607 * @exception SQLException if a database access error occurs, 5608 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5609 * or this method is called on a closed result set 5610 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5611 * this method 5612 * @since 1.6 5613 */ 5614 public void updateBinaryStream(int columnIndex, 5615 java.io.InputStream x, 5616 long length) throws SQLException { 5617 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5618 } 5619 5620 /** 5621 * Updates the designated column with a character stream value, which will have 5622 * the specified number of bytes. 5623 * The updater methods are used to update column values in the 5624 * current row or the insert row. The updater methods do not 5625 * update the underlying database; instead the <code>updateRow</code> or 5626 * <code>insertRow</code> methods are called to update the database. 5627 * 5628 * @param columnIndex the first column is 1, the second is 2, ... 5629 * @param x the new column value 5630 * @param length the length of the stream 5631 * @exception SQLException if a database access error occurs, 5632 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5633 * or this method is called on a closed result set 5634 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5635 * this method 5636 * @since 1.6 5637 */ 5638 public void updateCharacterStream(int columnIndex, 5639 java.io.Reader x, 5640 long length) throws SQLException { 5641 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5642 } 5643 5644 /** 5645 * Updates the designated column with an ascii stream value, which will have 5646 * the specified number of bytes.. 5647 * The updater methods are used to update column values in the 5648 * current row or the insert row. The updater methods do not 5649 * update the underlying database; instead the <code>updateRow</code> or 5650 * <code>insertRow</code> methods are called to update the database. 5651 * 5652 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column 5653 * @param x the new column value 5654 * @param length the length of the stream 5655 * @exception SQLException if a database access error occurs, 5656 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5657 * or this method is called on a closed result set 5658 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5659 * this method 5660 * @since 1.6 5661 */ 5662 public void updateAsciiStream(String columnLabel, 5663 java.io.InputStream x, 5664 long length) throws SQLException { 5665 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5666 } 5667 5668 /** 5669 * Updates the designated column with an ascii stream value. 5670 * The updater methods are used to update column values in the 5671 * current row or the insert row. The updater methods do not 5672 * update the underlying database; instead the <code>updateRow</code> or 5673 * <code>insertRow</code> methods are called to update the database. 5674 * 5675 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5676 * it might be more efficient to use a version of 5677 * <code>updateAsciiStream</code> which takes a length parameter. 5678 * 5679 * @param columnIndex the first column is 1, the second is 2, ... 5680 * @param x the new column value 5681 * @exception SQLException if a database access error occurs, 5682 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5683 * or this method is called on a closed result set 5684 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5685 * this method 5686 * @since 1.6 5687 */ 5688 public void updateAsciiStream(int columnIndex, 5689 java.io.InputStream x) throws SQLException { 5690 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5691 } 5692 5693 /** 5694 * Updates the designated column with an ascii stream value. 5695 * The updater methods are used to update column values in the 5696 * current row or the insert row. The updater methods do not 5697 * update the underlying database; instead the <code>updateRow</code> or 5698 * <code>insertRow</code> methods are called to update the database. 5699 * 5700 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5701 * it might be more efficient to use a version of 5702 * <code>updateAsciiStream</code> which takes a length parameter. 5703 * 5704 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5705 bel is the name of the column 5706 * @param x the new column value 5707 * @exception SQLException if a database access error occurs, 5708 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5709 * or this method is called on a closed result set 5710 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5711 * this method 5712 * @since 1.6 5713 */ 5714 public void updateAsciiStream(String columnLabel, 5715 java.io.InputStream x) throws SQLException { 5716 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5717 } 5718 5719 5720 /** 5721 * Updates the designated column with a binary stream value, which will have 5722 * the specified number of bytes. 5723 * The updater methods are used to update column values in the 5724 * current row or the insert row. The updater methods do not 5725 * update the underlying database; instead the <code>updateRow</code> or 5726 * <code>insertRow</code> methods are called to update the database. 5727 * 5728 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column 5729 * @param x the new column value 5730 * @param length the length of the stream 5731 * @exception SQLException if a database access error occurs, 5732 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5733 * or this method is called on a closed result set 5734 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5735 * this method 5736 * @since 1.6 5737 */ 5738 public void updateBinaryStream(String columnLabel, 5739 java.io.InputStream x, 5740 long length) throws SQLException { 5741 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5742 } 5743 5744 /** 5745 * Updates the designated column with a binary stream value. 5746 * The updater methods are used to update column values in the 5747 * current row or the insert row. The updater methods do not 5748 * update the underlying database; instead the <code>updateRow</code> or 5749 * <code>insertRow</code> methods are called to update the database. 5750 * 5751 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5752 * it might be more efficient to use a version of 5753 * <code>updateBinaryStream</code> which takes a length parameter. 5754 * 5755 * @param columnIndex the first column is 1, the second is 2, ... 5756 * @param x the new column value 5757 * @exception SQLException if a database access error occurs, 5758 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5759 * or this method is called on a closed result set 5760 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5761 * this method 5762 * @since 1.6 5763 */ 5764 public void updateBinaryStream(int columnIndex, 5765 java.io.InputStream x) throws SQLException { 5766 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5767 } 5768 5769 5770 /** 5771 * Updates the designated column with a binary stream value. 5772 * The updater methods are used to update column values in the 5773 * current row or the insert row. The updater methods do not 5774 * update the underlying database; instead the <code>updateRow</code> or 5775 * <code>insertRow</code> methods are called to update the database. 5776 * 5777 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5778 * it might be more efficient to use a version of 5779 * <code>updateBinaryStream</code> which takes a length parameter. 5780 * 5781 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5782 bel is the name of the column 5783 * @param x the new column value 5784 * @exception SQLException if a database access error occurs, 5785 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5786 * or this method is called on a closed result set 5787 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5788 * this method 5789 * @since 1.6 5790 */ 5791 public void updateBinaryStream(String columnLabel, 5792 java.io.InputStream x) throws SQLException { 5793 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5794 } 5795 5796 5797 /** 5798 * Updates the designated column with a character stream value, which will have 5799 * the specified number of bytes. 5800 * The updater methods are used to update column values in the 5801 * current row or the insert row. The updater methods do not 5802 * update the underlying database; instead the <code>updateRow</code> or 5803 * <code>insertRow</code> methods are called to update the database. 5804 * 5805 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column 5806 * @param reader the <code>java.io.Reader</code> object containing 5807 * the new column value 5808 * @param length the length of the stream 5809 * @exception SQLException if a database access error occurs, 5810 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5811 * or this method is called on a closed result set 5812 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5813 * this method 5814 * @since 1.6 5815 */ 5816 public void updateCharacterStream(String columnLabel, 5817 java.io.Reader reader, 5818 long length) throws SQLException { 5819 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5820 } 5821 5822 /** 5823 * Updates the designated column with a character stream value. 5824 * The updater methods are used to update column values in the 5825 * current row or the insert row. The updater methods do not 5826 * update the underlying database; instead the <code>updateRow</code> or 5827 * <code>insertRow</code> methods are called to update the database. 5828 * 5829 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5830 * it might be more efficient to use a version of 5831 * <code>updateCharacterStream</code> which takes a length parameter. 5832 * 5833 * @param columnIndex the first column is 1, the second is 2, ... 5834 * @param x the new column value 5835 * @exception SQLException if a database access error occurs, 5836 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5837 * or this method is called on a closed result set 5838 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5839 * this method 5840 * @since 1.6 5841 */ 5842 public void updateCharacterStream(int columnIndex, 5843 java.io.Reader x) throws SQLException { 5844 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5845 } 5846 5847 /** 5848 * Updates the designated column with a character stream value. 5849 * The updater methods are used to update column values in the 5850 * current row or the insert row. The updater methods do not 5851 * update the underlying database; instead the <code>updateRow</code> or 5852 * <code>insertRow</code> methods are called to update the database. 5853 * 5854 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5855 * it might be more efficient to use a version of 5856 * <code>updateCharacterStream</code> which takes a length parameter. 5857 * 5858 * @param columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the la 5859 bel is the name of the column 5860 * @param reader the <code>java.io.Reader</code> object containing 5861 * the new column value 5862 * @exception SQLException if a database access error occurs, 5863 * the result set concurrency is <code>CONCUR_READ_ONLY</code> 5864 * or this method is called on a closed result set 5865 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5866 * this method 5867 * @since 1.6 5868 */ 5869 public void updateCharacterStream(String columnLabel, 5870 java.io.Reader reader) throws SQLException { 5871 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5872 } 5873 5874 5875 /** 5876 * Sets the designated parameter to the given <code>java.net.URL</code> value. 5877 * The driver converts this to an SQL <code>DATALINK</code> value 5878 * when it sends it to the database. 5879 * 5880 * @param parameterIndex the first parameter is 1, the second is 2, ... 5881 * @param x the <code>java.net.URL</code> object to be set 5882 * @exception SQLException if a database access error occurs or 5883 * this method is called on a closed <code>PreparedStatement</code> 5884 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 5885 * @since 1.4 5886 */ 5887 public void setURL(int parameterIndex, java.net.URL x) throws SQLException{ 5888 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5889 } 5890 5891 5892 /** 5893 * Sets the designated parameter to a <code>Reader</code> object. 5894 * This method differs from the <code>setCharacterStream (int, Reader)</code> method 5895 * because it informs the driver that the parameter value should be sent to 5896 * the server as a <code>NCLOB</code>. When the <code>setCharacterStream</code> method is used, the 5897 * driver may have to do extra work to determine whether the parameter 5898 * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code> 5899 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5900 * it might be more efficient to use a version of 5901 * <code>setNClob</code> which takes a length parameter. 5902 * 5903 * @param parameterIndex index of the first parameter is 1, the second is 2, ... 5904 * @param reader An object that contains the data to set the parameter value to. 5905 * @throws SQLException if parameterIndex does not correspond to a parameter 5906 * marker in the SQL statement; 5907 * if the driver does not support national character sets; 5908 * if the driver can detect that a data conversion 5909 * error could occur; if a database access error occurs or 5910 * this method is called on a closed <code>PreparedStatement</code> 5911 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 5912 * 5913 * @since 1.6 5914 */ 5915 public void setNClob(int parameterIndex, Reader reader) 5916 throws SQLException{ 5917 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5918 } 5919 5920 /** 5921 * Sets the designated parameter to a <code>Reader</code> object. The <code>reader</code> must contain the number 5922 * of characters specified by length otherwise a <code>SQLException</code> will be 5923 * generated when the <code>CallableStatement</code> is executed. 5924 * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method 5925 * because it informs the driver that the parameter value should be sent to 5926 * the server as a <code>NCLOB</code>. When the <code>setCharacterStream</code> method is used, the 5927 * driver may have to do extra work to determine whether the parameter 5928 * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code> 5929 * 5930 * @param parameterName the name of the parameter to be set 5931 * @param reader An object that contains the data to set the parameter value to. 5932 * @param length the number of characters in the parameter data. 5933 * @throws SQLException if parameterIndex does not correspond to a parameter 5934 * marker in the SQL statement; if the length specified is less than zero; 5935 * if the driver does not support national 5936 * character sets; if the driver can detect that a data conversion 5937 * error could occur; if a database access error occurs or 5938 * this method is called on a closed <code>CallableStatement</code> 5939 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 5940 * this method 5941 * @since 1.6 5942 */ 5943 public void setNClob(String parameterName, Reader reader, long length) 5944 throws SQLException{ 5945 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5946 } 5947 5948 5949 /** 5950 * Sets the designated parameter to a <code>Reader</code> object. 5951 * This method differs from the <code>setCharacterStream (int, Reader)</code> method 5952 * because it informs the driver that the parameter value should be sent to 5953 * the server as a <code>NCLOB</code>. When the <code>setCharacterStream</code> method is used, the 5954 * driver may have to do extra work to determine whether the parameter 5955 * data should be send to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code> 5956 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 5957 * it might be more efficient to use a version of 5958 * <code>setNClob</code> which takes a length parameter. 5959 * 5960 * @param parameterName the name of the parameter 5961 * @param reader An object that contains the data to set the parameter value to. 5962 * @throws SQLException if the driver does not support national character sets; 5963 * if the driver can detect that a data conversion 5964 * error could occur; if a database access error occurs or 5965 * this method is called on a closed <code>CallableStatement</code> 5966 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 5967 * 5968 * @since 1.6 5969 */ 5970 public void setNClob(String parameterName, Reader reader) 5971 throws SQLException{ 5972 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 5973 } 5974 5975 5976 /** 5977 ** of characters specified by length otherwise a <code>SQLException</code> will becontain the number 5978 * generated when the <code>PreparedStatement</code> is executed. 5979 * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method 5980 * because it informs the driver that the parameter value should be sent to 5981 * the server as a <code>NCLOB</code>. When the <code>setCharacterStream</code> method is used, the 5982 * driver may have to do extra work to determine whether the parameter 5983 * data should be sent to the server as a <code>LONGNVARCHAR</code> or a <code>NCLOB</code> 5984 * @param parameterIndex index of the first parameter is 1, the second is 2, ... 5985 * @param reader An object that contains the data to set the parameter value to. 5986 * @param length the number of characters in the parameter data. 5987 * @throws SQLException if parameterIndex does not correspond to a parameter 5988 * marker in the SQL statement; if the length specified is less than zero; 5989 * if the driver does not support national character sets; 5990 * if the driver can detect that a data conversion 5991 * error could occur; if a database access error occurs or 5992 * this method is called on a closed <code>PreparedStatement</code> 5993 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 5994 * 5995 * @since 1.6 5996 */ 5997 public void setNClob(int parameterIndex, Reader reader, long length) 5998 throws SQLException{ 5999 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6000 } 6001 6002 6003 /** 6004 * Sets the designated parameter to a <code>java.sql.NClob</code> object. The driver converts this to 6005 a 6006 * SQL <code>NCLOB</code> value when it sends it to the database. 6007 * @param parameterIndex of the first parameter is 1, the second is 2, ... 6008 * @param value the parameter value 6009 * @throws SQLException if the driver does not support national 6010 * character sets; if the driver can detect that a data conversion 6011 * error could occur ; or if a database access error occurs 6012 * @since 1.6 6013 */ 6014 public void setNClob(int parameterIndex, NClob value) throws SQLException{ 6015 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6016 } 6017 6018 6019 /** 6020 * Sets the designated paramter to the given <code>String</code> object. 6021 * The driver converts this to a SQL <code>NCHAR</code> or 6022 * <code>NVARCHAR</code> or <code>LONGNVARCHAR</code> 6023 * @param parameterName the name of the column to be set 6024 * @param value the parameter value 6025 * @throws SQLException if the driver does not support national 6026 * character sets; if the driver can detect that a data conversion 6027 * error could occur; or if a database access error occurs 6028 * @since 1.6 6029 */ 6030 public void setNString(String parameterName, String value) 6031 throws SQLException{ 6032 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6033 } 6034 6035 /** 6036 * Sets the designated parameter to a <code>Reader</code> object. The 6037 * <code>Reader</code> reads the data till end-of-file is reached. The 6038 * driver does the necessary conversion from Java character format to 6039 * the national character set in the database. 6040 * @param parameterIndex of the first parameter is 1, the second is 2, ... 6041 * @param value the parameter value 6042 * @param length the number of characters in the parameter data. 6043 * @throws SQLException if the driver does not support national 6044 * character sets; if the driver can detect that a data conversion 6045 * error could occur ; or if a database access error occurs 6046 * @since 1.6 6047 */ 6048 public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{ 6049 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6050 } 6051 6052 6053 6054 /** 6055 * Sets the designated parameter to a <code>Reader</code> object. The 6056 * <code>Reader</code> reads the data till end-of-file is reached. The 6057 * driver does the necessary conversion from Java character format to 6058 * the national character set in the database. 6059 * @param parameterName the name of the column to be set 6060 * @param value the parameter value 6061 * @param length the number of characters in the parameter data. 6062 * @throws SQLException if the driver does not support national 6063 * character sets; if the driver can detect that a data conversion 6064 * error could occur; or if a database access error occurs 6065 * @since 1.6 6066 */ 6067 public void setNCharacterStream(String parameterName, Reader value, long length) 6068 throws SQLException{ 6069 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6070 } 6071 6072 /** 6073 * Sets the designated parameter to a <code>Reader</code> object. The 6074 * <code>Reader</code> reads the data till end-of-file is reached. The 6075 * driver does the necessary conversion from Java character format to 6076 * the national character set in the database. 6077 6078 * <P><B>Note:</B> This stream object can either be a standard 6079 * Java stream object or your own subclass that implements the 6080 * standard interface. 6081 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6082 * it might be more efficient to use a version of 6083 * <code>setNCharacterStream</code> which takes a length parameter. 6084 * 6085 * @param parameterName the name of the parameter 6086 * @param value the parameter value 6087 * @throws SQLException if the driver does not support national 6088 * character sets; if the driver can detect that a data conversion 6089 * error could occur ; if a database access error occurs; or 6090 * this method is called on a closed <code>CallableStatement</code> 6091 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6092 * @since 1.6 6093 */ 6094 public void setNCharacterStream(String parameterName, Reader value) throws SQLException{ 6095 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6096 } 6097 6098 /** 6099 * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value, 6100 * using the given <code>Calendar</code> object. The driver uses 6101 * the <code>Calendar</code> object to construct an SQL <code>TIMESTAMP</code> value, 6102 * which the driver then sends to the database. With a 6103 * a <code>Calendar</code> object, the driver can calculate the timestamp 6104 * taking into account a custom timezone. If no 6105 * <code>Calendar</code> object is specified, the driver uses the default 6106 * timezone, which is that of the virtual machine running the application. 6107 * 6108 * @param parameterName the name of the parameter 6109 * @param x the parameter value 6110 * @param cal the <code>Calendar</code> object the driver will use 6111 * to construct the timestamp 6112 * @exception SQLException if a database access error occurs or 6113 * this method is called on a closed <code>CallableStatement</code> 6114 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6115 * this method 6116 * @see #getTimestamp 6117 * @since 1.4 6118 */ 6119 public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal) 6120 throws SQLException{ 6121 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6122 } 6123 6124 /** 6125 * Sets the designated parameter to a <code>Reader</code> object. The <code>reader</code> must contain the number 6126 * of characters specified by length otherwise a <code>SQLException</code> will be 6127 * generated when the <code>CallableStatement</code> is executed. 6128 * This method differs from the <code>setCharacterStream (int, Reader, int)</code> method 6129 * because it informs the driver that the parameter value should be sent to 6130 * the server as a <code>CLOB</code>. When the <code>setCharacterStream</code> method is used, the 6131 * driver may have to do extra work to determine whether the parameter 6132 * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code> 6133 * @param parameterName the name of the parameter to be set 6134 * @param reader An object that contains the data to set the parameter value to. 6135 * @param length the number of characters in the parameter data. 6136 * @throws SQLException if parameterIndex does not correspond to a parameter 6137 * marker in the SQL statement; if the length specified is less than zero; 6138 * a database access error occurs or 6139 * this method is called on a closed <code>CallableStatement</code> 6140 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6141 * this method 6142 * 6143 * @since 1.6 6144 */ 6145 public void setClob(String parameterName, Reader reader, long length) 6146 throws SQLException{ 6147 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6148 } 6149 6150 6151 6152 /** 6153 * Sets the designated parameter to the given <code>java.sql.Clob</code> object. 6154 * The driver converts this to an SQL <code>CLOB</code> value when it 6155 * sends it to the database. 6156 * 6157 * @param parameterName the name of the parameter 6158 * @param x a <code>Clob</code> object that maps an SQL <code>CLOB</code> value 6159 * @exception SQLException if a database access error occurs or 6160 * this method is called on a closed <code>CallableStatement</code> 6161 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6162 * this method 6163 * @since 1.6 6164 */ 6165 public void setClob (String parameterName, Clob x) throws SQLException{ 6166 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6167 } 6168 6169 /** 6170 * Sets the designated parameter to a <code>Reader</code> object. 6171 * This method differs from the <code>setCharacterStream (int, Reader)</code> method 6172 * because it informs the driver that the parameter value should be sent to 6173 * the server as a <code>CLOB</code>. When the <code>setCharacterStream</code> method is used, the 6174 * driver may have to do extra work to determine whether the parameter 6175 * data should be send to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code> 6176 * 6177 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6178 * it might be more efficient to use a version of 6179 * <code>setClob</code> which takes a length parameter. 6180 * 6181 * @param parameterName the name of the parameter 6182 * @param reader An object that contains the data to set the parameter value to. 6183 * @throws SQLException if a database access error occurs or this method is called on 6184 * a closed <code>CallableStatement</code> 6185 * 6186 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6187 * @since 1.6 6188 */ 6189 public void setClob(String parameterName, Reader reader) 6190 throws SQLException{ 6191 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6192 } 6193 6194 6195 /** 6196 * Sets the designated parameter to the given <code>java.sql.Date</code> value 6197 * using the default time zone of the virtual machine that is running 6198 * the application. 6199 * The driver converts this 6200 * to an SQL <code>DATE</code> value when it sends it to the database. 6201 * 6202 * @param parameterName the name of the parameter 6203 * @param x the parameter value 6204 * @exception SQLException if a database access error occurs or 6205 * this method is called on a closed <code>CallableStatement</code> 6206 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6207 * this method 6208 * @see #getDate 6209 * @since 1.4 6210 */ 6211 public void setDate(String parameterName, java.sql.Date x) 6212 throws SQLException{ 6213 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6214 } 6215 6216 /** 6217 * Sets the designated parameter to the given <code>java.sql.Date</code> value, 6218 * using the given <code>Calendar</code> object. The driver uses 6219 * the <code>Calendar</code> object to construct an SQL <code>DATE</code> value, 6220 * which the driver then sends to the database. With a 6221 * a <code>Calendar</code> object, the driver can calculate the date 6222 * taking into account a custom timezone. If no 6223 * <code>Calendar</code> object is specified, the driver uses the default 6224 * timezone, which is that of the virtual machine running the application. 6225 * 6226 * @param parameterName the name of the parameter 6227 * @param x the parameter value 6228 * @param cal the <code>Calendar</code> object the driver will use 6229 * to construct the date 6230 * @exception SQLException if a database access error occurs or 6231 * this method is called on a closed <code>CallableStatement</code> 6232 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6233 * this method 6234 * @see #getDate 6235 * @since 1.4 6236 */ 6237 public void setDate(String parameterName, java.sql.Date x, Calendar cal) 6238 throws SQLException{ 6239 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6240 } 6241 6242 6243 /** 6244 * Sets the designated parameter to the given <code>java.sql.Time</code> value. 6245 * The driver converts this 6246 * to an SQL <code>TIME</code> value when it sends it to the database. 6247 * 6248 * @param parameterName the name of the parameter 6249 * @param x the parameter value 6250 * @exception SQLException if a database access error occurs or 6251 * this method is called on a closed <code>CallableStatement</code> 6252 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6253 * this method 6254 * @see #getTime 6255 * @since 1.4 6256 */ 6257 public void setTime(String parameterName, java.sql.Time x) 6258 throws SQLException{ 6259 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6260 } 6261 6262 /** 6263 * Sets the designated parameter to the given <code>java.sql.Time</code> value, 6264 * using the given <code>Calendar</code> object. The driver uses 6265 * the <code>Calendar</code> object to construct an SQL <code>TIME</code> value, 6266 * which the driver then sends to the database. With a 6267 * a <code>Calendar</code> object, the driver can calculate the time 6268 * taking into account a custom timezone. If no 6269 * <code>Calendar</code> object is specified, the driver uses the default 6270 * timezone, which is that of the virtual machine running the application. 6271 * 6272 * @param parameterName the name of the parameter 6273 * @param x the parameter value 6274 * @param cal the <code>Calendar</code> object the driver will use 6275 * to construct the time 6276 * @exception SQLException if a database access error occurs or 6277 * this method is called on a closed <code>CallableStatement</code> 6278 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6279 * this method 6280 * @see #getTime 6281 * @since 1.4 6282 */ 6283 public void setTime(String parameterName, java.sql.Time x, Calendar cal) 6284 throws SQLException{ 6285 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6286 } 6287 6288 /** 6289 * Sets the designated parameter to a <code>Reader</code> object. 6290 * This method differs from the <code>setCharacterStream (int, Reader)</code> method 6291 * because it informs the driver that the parameter value should be sent to 6292 * the server as a <code>CLOB</code>. When the <code>setCharacterStream</code> method is used, the 6293 * driver may have to do extra work to determine whether the parameter 6294 * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code> 6295 * 6296 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6297 * it might be more efficient to use a version of 6298 * <code>setClob</code> which takes a length parameter. 6299 * 6300 * @param parameterIndex index of the first parameter is 1, the second is 2, ... 6301 * @param reader An object that contains the data to set the parameter value to. 6302 * @throws SQLException if a database access error occurs, this method is called on 6303 * a closed <code>PreparedStatement</code>or if parameterIndex does not correspond to a parameter 6304 * marker in the SQL statement 6305 * 6306 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6307 * @since 1.6 6308 */ 6309 public void setClob(int parameterIndex, Reader reader) 6310 throws SQLException{ 6311 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6312 } 6313 6314 6315 /** 6316 * Sets the designated parameter to a <code>Reader</code> object. The reader must contain the number 6317 * of characters specified by length otherwise a <code>SQLException</code> will be 6318 * generated when the <code>PreparedStatement</code> is executed. 6319 *This method differs from the <code>setCharacterStream (int, Reader, int)</code> method 6320 * because it informs the driver that the parameter value should be sent to 6321 * the server as a <code>CLOB</code>. When the <code>setCharacterStream</code> method is used, the 6322 * driver may have to do extra work to determine whether the parameter 6323 * data should be sent to the server as a <code>LONGVARCHAR</code> or a <code>CLOB</code> 6324 * @param parameterIndex index of the first parameter is 1, the second is 2, ... 6325 * @param reader An object that contains the data to set the parameter value to. 6326 * @param length the number of characters in the parameter data. 6327 * @throws SQLException if a database access error occurs, this method is called on 6328 * a closed <code>PreparedStatement</code>, if parameterIndex does not correspond to a parameter 6329 * marker in the SQL statement, or if the length specified is less than zero. 6330 * 6331 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6332 * @since 1.6 6333 */ 6334 public void setClob(int parameterIndex, Reader reader, long length) 6335 throws SQLException{ 6336 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6337 } 6338 6339 6340 /** 6341 * Sets the designated parameter to a <code>InputStream</code> object. The inputstream must contain the number 6342 * of characters specified by length otherwise a <code>SQLException</code> will be 6343 * generated when the <code>PreparedStatement</code> is executed. 6344 * This method differs from the <code>setBinaryStream (int, InputStream, int)</code> 6345 * method because it informs the driver that the parameter value should be 6346 * sent to the server as a <code>BLOB</code>. When the <code>setBinaryStream</code> method is used, 6347 * the driver may have to do extra work to determine whether the parameter 6348 * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code> 6349 * @param parameterIndex index of the first parameter is 1, 6350 * the second is 2, ... 6351 * @param inputStream An object that contains the data to set the parameter 6352 * value to. 6353 * @param length the number of bytes in the parameter data. 6354 * @throws SQLException if a database access error occurs, 6355 * this method is called on a closed <code>PreparedStatement</code>, 6356 * if parameterIndex does not correspond 6357 * to a parameter marker in the SQL statement, if the length specified 6358 * is less than zero or if the number of bytes in the inputstream does not match 6359 * the specfied length. 6360 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6361 * 6362 * @since 1.6 6363 */ 6364 public void setBlob(int parameterIndex, InputStream inputStream, long length) 6365 throws SQLException{ 6366 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6367 } 6368 6369 /** 6370 * Sets the designated parameter to a <code>InputStream</code> object. 6371 * This method differs from the <code>setBinaryStream (int, InputStream)</code> 6372 * This method differs from the <code>setBinaryStream (int, InputStream)</code> 6373 * method because it informs the driver that the parameter value should be 6374 * sent to the server as a <code>BLOB</code>. When the <code>setBinaryStream</code> method is used, 6375 * the driver may have to do extra work to determine whether the parameter 6376 * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code> 6377 * 6378 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6379 * it might be more efficient to use a version of 6380 * <code>setBlob</code> which takes a length parameter. 6381 * 6382 * @param parameterIndex index of the first parameter is 1, 6383 * the second is 2, ... 6384 6385 6386 * @param inputStream An object that contains the data to set the parameter 6387 * value to. 6388 * @throws SQLException if a database access error occurs, 6389 * this method is called on a closed <code>PreparedStatement</code> or 6390 * if parameterIndex does not correspond 6391 * to a parameter marker in the SQL statement, 6392 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6393 * 6394 * @since 1.6 6395 */ 6396 public void setBlob(int parameterIndex, InputStream inputStream) 6397 throws SQLException{ 6398 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6399 } 6400 6401 /** 6402 * Sets the designated parameter to a <code>InputStream</code> object. The <code>inputstream</code> must contain the number 6403 * of characters specified by length, otherwise a <code>SQLException</code> will be 6404 * generated when the <code>CallableStatement</code> is executed. 6405 * This method differs from the <code>setBinaryStream (int, InputStream, int)</code> 6406 * method because it informs the driver that the parameter value should be 6407 * sent to the server as a <code>BLOB</code>. When the <code>setBinaryStream</code> method is used, 6408 * the driver may have to do extra work to determine whether the parameter 6409 * data should be sent to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code> 6410 * 6411 * @param parameterName the name of the parameter to be set 6412 * the second is 2, ... 6413 * 6414 * @param inputStream An object that contains the data to set the parameter 6415 * value to. 6416 * @param length the number of bytes in the parameter data. 6417 * @throws SQLException if parameterIndex does not correspond 6418 * to a parameter marker in the SQL statement, or if the length specified 6419 * is less than zero; if the number of bytes in the inputstream does not match 6420 * the specfied length; if a database access error occurs or 6421 * this method is called on a closed <code>CallableStatement</code> 6422 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6423 * this method 6424 * 6425 * @since 1.6 6426 */ 6427 public void setBlob(String parameterName, InputStream inputStream, long length) 6428 throws SQLException{ 6429 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6430 } 6431 6432 6433 /** 6434 * Sets the designated parameter to the given <code>java.sql.Blob</code> object. 6435 * The driver converts this to an SQL <code>BLOB</code> value when it 6436 * sends it to the database. 6437 * 6438 * @param parameterName the name of the parameter 6439 * @param x a <code>Blob</code> object that maps an SQL <code>BLOB</code> value 6440 * @exception SQLException if a database access error occurs or 6441 * this method is called on a closed <code>CallableStatement</code> 6442 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6443 * this method 6444 * @since 1.6 6445 */ 6446 public void setBlob (String parameterName, Blob x) throws SQLException{ 6447 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6448 } 6449 6450 /** 6451 * Sets the designated parameter to a <code>InputStream</code> object. 6452 * This method differs from the <code>setBinaryStream (int, InputStream)</code> 6453 * method because it informs the driver that the parameter value should be 6454 * sent to the server as a <code>BLOB</code>. When the <code>setBinaryStream</code> method is used, 6455 * the driver may have to do extra work to determine whether the parameter 6456 * data should be send to the server as a <code>LONGVARBINARY</code> or a <code>BLOB</code> 6457 * 6458 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6459 * it might be more efficient to use a version of 6460 * <code>setBlob</code> which takes a length parameter. 6461 * 6462 * @param parameterName the name of the parameter 6463 * @param inputStream An object that contains the data to set the parameter 6464 * value to. 6465 * @throws SQLException if a database access error occurs or 6466 * this method is called on a closed <code>CallableStatement</code> 6467 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6468 * 6469 * @since 1.6 6470 */ 6471 public void setBlob(String parameterName, InputStream inputStream) 6472 throws SQLException{ 6473 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6474 } 6475 6476 /** 6477 * Sets the value of the designated parameter with the given object. The second 6478 * argument must be an object type; for integral values, the 6479 * <code>java.lang</code> equivalent objects should be used. 6480 * 6481 * <p>The given Java object will be converted to the given targetSqlType 6482 * before being sent to the database. 6483 * 6484 * If the object has a custom mapping (is of a class implementing the 6485 * interface <code>SQLData</code>), 6486 * the JDBC driver should call the method <code>SQLData.writeSQL</code> to write it 6487 * to the SQL data stream. 6488 * If, on the other hand, the object is of a class implementing 6489 * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>, <code>NClob</code>, 6490 * <code>Struct</code>, <code>java.net.URL</code>, 6491 * or <code>Array</code>, the driver should pass it to the database as a 6492 * value of the corresponding SQL type. 6493 * <P> 6494 * Note that this method may be used to pass datatabase- 6495 * specific abstract data types. 6496 * 6497 * @param parameterName the name of the parameter 6498 * @param x the object containing the input parameter value 6499 * @param targetSqlType the SQL type (as defined in java.sql.Types) to be 6500 * sent to the database. The scale argument may further qualify this type. 6501 * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types, 6502 * this is the number of digits after the decimal point. For all other 6503 * types, this value will be ignored. 6504 * @exception SQLException if a database access error occurs or 6505 * this method is called on a closed <code>CallableStatement</code> 6506 * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is 6507 * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>, 6508 * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>, 6509 * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>, 6510 * <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code> 6511 * or <code>STRUCT</code> data type and the JDBC driver does not support 6512 * this data type 6513 * @see Types 6514 * @see #getObject 6515 * @since 1.4 6516 */ 6517 public void setObject(String parameterName, Object x, int targetSqlType, int scale) 6518 throws SQLException{ 6519 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6520 } 6521 6522 /** 6523 * Sets the value of the designated parameter with the given object. 6524 * This method is like the method <code>setObject</code> 6525 * above, except that it assumes a scale of zero. 6526 * 6527 * @param parameterName the name of the parameter 6528 * @param x the object containing the input parameter value 6529 * @param targetSqlType the SQL type (as defined in java.sql.Types) to be 6530 * sent to the database 6531 * @exception SQLException if a database access error occurs or 6532 * this method is called on a closed <code>CallableStatement</code> 6533 * @exception SQLFeatureNotSupportedException if <code>targetSqlType</code> is 6534 * a <code>ARRAY</code>, <code>BLOB</code>, <code>CLOB</code>, 6535 * <code>DATALINK</code>, <code>JAVA_OBJECT</code>, <code>NCHAR</code>, 6536 * <code>NCLOB</code>, <code>NVARCHAR</code>, <code>LONGNVARCHAR</code>, 6537 * <code>REF</code>, <code>ROWID</code>, <code>SQLXML</code> 6538 * or <code>STRUCT</code> data type and the JDBC driver does not support 6539 * this data type 6540 * @see #getObject 6541 * @since 1.4 6542 */ 6543 public void setObject(String parameterName, Object x, int targetSqlType) 6544 throws SQLException{ 6545 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6546 } 6547 6548 /** 6549 * Sets the value of the designated parameter with the given object. 6550 * The second parameter must be of type <code>Object</code>; therefore, the 6551 * <code>java.lang</code> equivalent objects should be used for built-in types. 6552 * 6553 * <p>The JDBC specification specifies a standard mapping from 6554 * Java <code>Object</code> types to SQL types. The given argument 6555 * will be converted to the corresponding SQL type before being 6556 * sent to the database. 6557 * 6558 * <p>Note that this method may be used to pass datatabase- 6559 * specific abstract data types, by using a driver-specific Java 6560 * type. 6561 * 6562 * If the object is of a class implementing the interface <code>SQLData</code>, 6563 * the JDBC driver should call the method <code>SQLData.writeSQL</code> 6564 * to write it to the SQL data stream. 6565 * If, on the other hand, the object is of a class implementing 6566 * <code>Ref</code>, <code>Blob</code>, <code>Clob</code>, <code>NClob</code>, 6567 * <code>Struct</code>, <code>java.net.URL</code>, 6568 * or <code>Array</code>, the driver should pass it to the database as a 6569 * value of the corresponding SQL type. 6570 * <P> 6571 * This method throws an exception if there is an ambiguity, for example, if the 6572 * object is of a class implementing more than one of the interfaces named above. 6573 * 6574 * @param parameterName the name of the parameter 6575 * @param x the object containing the input parameter value 6576 * @exception SQLException if a database access error occurs, 6577 * this method is called on a closed <code>CallableStatement</code> or if the given 6578 * <code>Object</code> parameter is ambiguous 6579 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6580 * this method 6581 * @see #getObject 6582 * @since 1.4 6583 */ 6584 public void setObject(String parameterName, Object x) throws SQLException{ 6585 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6586 } 6587 6588 /** 6589 * Sets the designated parameter to the given input stream, which will have 6590 * the specified number of bytes. 6591 * When a very large ASCII value is input to a <code>LONGVARCHAR</code> 6592 * parameter, it may be more practical to send it via a 6593 * <code>java.io.InputStream</code>. Data will be read from the stream 6594 * as needed until end-of-file is reached. The JDBC driver will 6595 * do any necessary conversion from ASCII to the database char format. 6596 * 6597 * <P><B>Note:</B> This stream object can either be a standard 6598 * Java stream object or your own subclass that implements the 6599 * standard interface. 6600 * 6601 * @param parameterName the name of the parameter 6602 * @param x the Java input stream that contains the ASCII parameter value 6603 * @param length the number of bytes in the stream 6604 * @exception SQLException if a database access error occurs or 6605 * this method is called on a closed <code>CallableStatement</code> 6606 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6607 * this method 6608 * @since 1.4 6609 */ 6610 public void setAsciiStream(String parameterName, java.io.InputStream x, int length) 6611 throws SQLException{ 6612 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6613 } 6614 6615 6616 /** 6617 * Sets the designated parameter to the given input stream, which will have 6618 * the specified number of bytes. 6619 * When a very large binary value is input to a <code>LONGVARBINARY</code> 6620 * parameter, it may be more practical to send it via a 6621 * <code>java.io.InputStream</code> object. The data will be read from the stream 6622 * as needed until end-of-file is reached. 6623 * 6624 * <P><B>Note:</B> This stream object can either be a standard 6625 * Java stream object or your own subclass that implements the 6626 * standard interface. 6627 * 6628 * @param parameterName the name of the parameter 6629 * @param x the java input stream which contains the binary parameter value 6630 * @param length the number of bytes in the stream 6631 * @exception SQLException if a database access error occurs or 6632 * this method is called on a closed <code>CallableStatement</code> 6633 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6634 * this method 6635 * @since 1.4 6636 */ 6637 public void setBinaryStream(String parameterName, java.io.InputStream x, 6638 int length) throws SQLException{ 6639 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6640 } 6641 6642 /** 6643 * Sets the designated parameter to the given <code>Reader</code> 6644 * object, which is the given number of characters long. 6645 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 6646 * parameter, it may be more practical to send it via a 6647 * <code>java.io.Reader</code> object. The data will be read from the stream 6648 * as needed until end-of-file is reached. The JDBC driver will 6649 * do any necessary conversion from UNICODE to the database char format. 6650 * 6651 * <P><B>Note:</B> This stream object can either be a standard 6652 * Java stream object or your own subclass that implements the 6653 * standard interface. 6654 * 6655 * @param parameterName the name of the parameter 6656 * @param reader the <code>java.io.Reader</code> object that 6657 * contains the UNICODE data used as the designated parameter 6658 * @param length the number of characters in the stream 6659 * @exception SQLException if a database access error occurs or 6660 * this method is called on a closed <code>CallableStatement</code> 6661 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6662 * this method 6663 * @since 1.4 6664 */ 6665 public void setCharacterStream(String parameterName, 6666 java.io.Reader reader, 6667 int length) throws SQLException{ 6668 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6669 } 6670 6671 /** 6672 * Sets the designated parameter to the given input stream. 6673 * When a very large ASCII value is input to a <code>LONGVARCHAR</code> 6674 * parameter, it may be more practical to send it via a 6675 * <code>java.io.InputStream</code>. Data will be read from the stream 6676 * as needed until end-of-file is reached. The JDBC driver will 6677 * do any necessary conversion from ASCII to the database char format. 6678 * 6679 * <P><B>Note:</B> This stream object can either be a standard 6680 * Java stream object or your own subclass that implements the 6681 * standard interface. 6682 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6683 * it might be more efficient to use a version of 6684 * <code>setAsciiStream</code> which takes a length parameter. 6685 * 6686 * @param parameterName the name of the parameter 6687 * @param x the Java input stream that contains the ASCII parameter value 6688 * @exception SQLException if a database access error occurs or 6689 * this method is called on a closed <code>CallableStatement</code> 6690 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6691 * @since 1.6 6692 */ 6693 public void setAsciiStream(String parameterName, java.io.InputStream x) 6694 throws SQLException{ 6695 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6696 } 6697 6698 6699 /** 6700 * Sets the designated parameter to the given input stream. 6701 * When a very large binary value is input to a <code>LONGVARBINARY</code> 6702 * parameter, it may be more practical to send it via a 6703 * <code>java.io.InputStream</code> object. The data will be read from the 6704 * stream as needed until end-of-file is reached. 6705 * 6706 * <P><B>Note:</B> This stream object can either be a standard 6707 * Java stream object or your own subclass that implements the 6708 * standard interface. 6709 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6710 * it might be more efficient to use a version of 6711 * <code>setBinaryStream</code> which takes a length parameter. 6712 * 6713 * @param parameterName the name of the parameter 6714 * @param x the java input stream which contains the binary parameter value 6715 * @exception SQLException if a database access error occurs or 6716 * this method is called on a closed <code>CallableStatement</code> 6717 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6718 * @since 1.6 6719 */ 6720 public void setBinaryStream(String parameterName, java.io.InputStream x) 6721 throws SQLException{ 6722 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6723 } 6724 6725 /** 6726 * Sets the designated parameter to the given <code>Reader</code> 6727 * object. 6728 * When a very large UNICODE value is input to a <code>LONGVARCHAR</code> 6729 * parameter, it may be more practical to send it via a 6730 * <code>java.io.Reader</code> object. The data will be read from the stream 6731 * as needed until end-of-file is reached. The JDBC driver will 6732 * do any necessary conversion from UNICODE to the database char format. 6733 * 6734 * <P><B>Note:</B> This stream object can either be a standard 6735 * Java stream object or your own subclass that implements the 6736 * standard interface. 6737 * <P><B>Note:</B> Consult your JDBC driver documentation to determine if 6738 * it might be more efficient to use a version of 6739 * <code>setCharacterStream</code> which takes a length parameter. 6740 * 6741 * @param parameterName the name of the parameter 6742 * @param reader the <code>java.io.Reader</code> object that contains the 6743 * Unicode data 6744 * @exception SQLException if a database access error occurs or 6745 * this method is called on a closed <code>CallableStatement</code> 6746 * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method 6747 * @since 1.6 6748 */ 6749 public void setCharacterStream(String parameterName, 6750 java.io.Reader reader) throws SQLException{ 6751 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6752 } 6753 6754 /** 6755 * Sets the designated parameter to the given 6756 * <code>java.math.BigDecimal</code> value. 6757 * The driver converts this to an SQL <code>NUMERIC</code> value when 6758 * it sends it to the database. 6759 * 6760 * @param parameterName the name of the parameter 6761 * @param x the parameter value 6762 * @exception SQLException if a database access error occurs or 6763 * this method is called on a closed <code>CallableStatement</code> 6764 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6765 * this method 6766 * @see #getBigDecimal 6767 * @since 1.4 6768 */ 6769 public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{ 6770 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6771 } 6772 6773 /** 6774 * Sets the designated parameter to the given Java <code>String</code> value. 6775 * The driver converts this 6776 * to an SQL <code>VARCHAR</code> or <code>LONGVARCHAR</code> value 6777 * (depending on the argument's 6778 * size relative to the driver's limits on <code>VARCHAR</code> values) 6779 * when it sends it to the database. 6780 * 6781 * @param parameterName the name of the parameter 6782 * @param x the parameter value 6783 * @exception SQLException if a database access error occurs or 6784 * this method is called on a closed <code>CallableStatement</code> 6785 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6786 * this method 6787 * @see #getString 6788 * @since 1.4 6789 */ 6790 public void setString(String parameterName, String x) throws SQLException{ 6791 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6792 } 6793 6794 6795 6796 /** 6797 * Sets the designated parameter to the given Java array of bytes. 6798 * The driver converts this to an SQL <code>VARBINARY</code> or 6799 * <code>LONGVARBINARY</code> (depending on the argument's size relative 6800 * to the driver's limits on <code>VARBINARY</code> values) when it sends 6801 * it to the database. 6802 * 6803 * @param parameterName the name of the parameter 6804 * @param x the parameter value 6805 * @exception SQLException if a database access error occurs or 6806 * this method is called on a closed <code>CallableStatement</code> 6807 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6808 * this method 6809 * @see #getBytes 6810 * @since 1.4 6811 */ 6812 public void setBytes(String parameterName, byte x[]) throws SQLException{ 6813 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6814 } 6815 6816 /** 6817 * Sets the designated parameter to the given <code>java.sql.Timestamp</code> value. 6818 * The driver 6819 * converts this to an SQL <code>TIMESTAMP</code> value when it sends it to the 6820 * database. 6821 * 6822 * @param parameterName the name of the parameter 6823 * @param x the parameter value 6824 * @exception SQLException if a database access error occurs or 6825 * this method is called on a closed <code>CallableStatement</code> 6826 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6827 * this method 6828 * @see #getTimestamp 6829 * @since 1.4 6830 */ 6831 public void setTimestamp(String parameterName, java.sql.Timestamp x) 6832 throws SQLException{ 6833 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6834 } 6835 6836 /** 6837 * Sets the designated parameter to SQL <code>NULL</code>. 6838 * 6839 * <P><B>Note:</B> You must specify the parameter's SQL type. 6840 * 6841 * @param parameterName the name of the parameter 6842 * @param sqlType the SQL type code defined in <code>java.sql.Types</code> 6843 * @exception SQLException if a database access error occurs or 6844 * this method is called on a closed <code>CallableStatement</code> 6845 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6846 * this method 6847 * @since 1.4 6848 */ 6849 public void setNull(String parameterName, int sqlType) throws SQLException { 6850 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6851 } 6852 6853 /** 6854 * Sets the designated parameter to SQL <code>NULL</code>. 6855 * This version of the method <code>setNull</code> should 6856 * be used for user-defined types and REF type parameters. Examples 6857 * of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and 6858 * named array types. 6859 * 6860 * <P><B>Note:</B> To be portable, applications must give the 6861 * SQL type code and the fully-qualified SQL type name when specifying 6862 * a NULL user-defined or REF parameter. In the case of a user-defined type 6863 * the name is the type name of the parameter itself. For a REF 6864 * parameter, the name is the type name of the referenced type. If 6865 * a JDBC driver does not need the type code or type name information, 6866 * it may ignore it. 6867 * 6868 * Although it is intended for user-defined and Ref parameters, 6869 * this method may be used to set a null parameter of any JDBC type. 6870 * If the parameter does not have a user-defined or REF type, the given 6871 * typeName is ignored. 6872 * 6873 * 6874 * @param parameterName the name of the parameter 6875 * @param sqlType a value from <code>java.sql.Types</code> 6876 * @param typeName the fully-qualified name of an SQL user-defined type; 6877 * ignored if the parameter is not a user-defined type or 6878 * SQL <code>REF</code> value 6879 * @exception SQLException if a database access error occurs or 6880 * this method is called on a closed <code>CallableStatement</code> 6881 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6882 * this method 6883 * @since 1.4 6884 */ 6885 public void setNull (String parameterName, int sqlType, String typeName) 6886 throws SQLException{ 6887 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6888 } 6889 6890 /** 6891 * Sets the designated parameter to the given Java <code>boolean</code> value. 6892 * The driver converts this 6893 * to an SQL <code>BIT</code> or <code>BOOLEAN</code> value when it sends it to the database. 6894 * 6895 * @param parameterName the name of the parameter 6896 * @param x the parameter value 6897 * @exception SQLException if a database access error occurs or 6898 * this method is called on a closed <code>CallableStatement</code> 6899 * @see #getBoolean 6900 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6901 * this method 6902 * @since 1.4 6903 */ 6904 public void setBoolean(String parameterName, boolean x) throws SQLException{ 6905 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6906 } 6907 6908 6909 6910 /** 6911 * Sets the designated parameter to the given Java <code>byte</code> value. 6912 * The driver converts this 6913 * to an SQL <code>TINYINT</code> value when it sends it to the database. 6914 * 6915 * @param parameterName the name of the parameter 6916 * @param x the parameter value 6917 * @exception SQLException if a database access error occurs or 6918 * this method is called on a closed <code>CallableStatement</code> 6919 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6920 * this method 6921 * @see #getByte 6922 * @since 1.4 6923 */ 6924 public void setByte(String parameterName, byte x) throws SQLException{ 6925 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6926 } 6927 6928 6929 /** 6930 * Sets the designated parameter to the given Java <code>short</code> value. 6931 * The driver converts this 6932 * to an SQL <code>SMALLINT</code> value when it sends it to the database. 6933 * 6934 * @param parameterName the name of the parameter 6935 * @param x the parameter value 6936 * @exception SQLException if a database access error occurs or 6937 * this method is called on a closed <code>CallableStatement</code> 6938 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6939 * this method 6940 * @see #getShort 6941 * @since 1.4 6942 */ 6943 public void setShort(String parameterName, short x) throws SQLException{ 6944 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6945 } 6946 6947 6948 /** 6949 * Sets the designated parameter to the given Java <code>int</code> value. 6950 * The driver converts this 6951 * to an SQL <code>INTEGER</code> value when it sends it to the database. 6952 * 6953 * @param parameterName the name of the parameter 6954 * @param x the parameter value 6955 * @exception SQLException if a database access error occurs or 6956 * this method is called on a closed <code>CallableStatement</code> 6957 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6958 * this method 6959 * @see #getInt 6960 * @since 1.4 6961 */ 6962 public void setInt(String parameterName, int x) throws SQLException{ 6963 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6964 } 6965 6966 /** 6967 * Sets the designated parameter to the given Java <code>long</code> value. 6968 * The driver converts this 6969 * to an SQL <code>BIGINT</code> value when it sends it to the database. 6970 * 6971 * @param parameterName the name of the parameter 6972 * @param x the parameter value 6973 * @exception SQLException if a database access error occurs or 6974 * this method is called on a closed <code>CallableStatement</code> 6975 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6976 * this method 6977 * @see #getLong 6978 * @since 1.4 6979 */ 6980 public void setLong(String parameterName, long x) throws SQLException{ 6981 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 6982 } 6983 6984 6985 /** 6986 * Sets the designated parameter to the given Java <code>float</code> value. 6987 * The driver converts this 6988 * to an SQL <code>FLOAT</code> value when it sends it to the database. 6989 * 6990 * @param parameterName the name of the parameter 6991 * @param x the parameter value 6992 * @exception SQLException if a database access error occurs or 6993 * this method is called on a closed <code>CallableStatement</code> 6994 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 6995 * this method 6996 * @see #getFloat 6997 * @since 1.4 6998 */ 6999 public void setFloat(String parameterName, float x) throws SQLException{ 7000 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 7001 } 7002 7003 /** 7004 * Sets the designated parameter to the given Java <code>double</code> value. 7005 * The driver converts this 7006 * to an SQL <code>DOUBLE</code> value when it sends it to the database. 7007 * 7008 * @param parameterName the name of the parameter 7009 * @param x the parameter value 7010 * @exception SQLException if a database access error occurs or 7011 * this method is called on a closed <code>CallableStatement</code> 7012 * @exception SQLFeatureNotSupportedException if the JDBC driver does not support 7013 * this method 7014 * @see #getDouble 7015 * @since 1.4 7016 */ 7017 public void setDouble(String parameterName, double x) throws SQLException{ 7018 throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); 7019 } 7020 7021 /** 7022 * This method re populates the resBundle 7023 * during the deserialization process 7024 * 7025 */ 7026 private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { 7027 // Default state initialization happens here 7028 ois.defaultReadObject(); 7029 // Initialization of transient Res Bundle happens here . 7030 try { 7031 resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); 7032 } catch(IOException ioe) {} 7033 7034 } 7035 7036 static final long serialVersionUID = -3591946023893483003L; 7037 7038 //------------------------- JDBC 4.1 ----------------------------------- 7039 7040 public <T> T getObject(int columnIndex, Class<T> type) throws SQLException { 7041 throw new SQLFeatureNotSupportedException("Not supported yet."); 7042 } 7043 7044 public <T> T getObject(String columnLabel, Class<T> type) throws SQLException { 7045 throw new SQLFeatureNotSupportedException("Not supported yet."); 7046 } 7047 }