📄 resultset.java
字号:
package postgresql.jdbc1;// IMPORTANT NOTE: This file implements the JDBC 1 version of the driver.// If you make any modifications to this file, you must make sure that the// changes are also made (if relevent) to the related JDBC 2 class in the// postgresql.jdbc2 package.import java.lang.*;import java.io.*;import java.math.*;import java.text.*;import java.util.*;import java.sql.*;import postgresql.Field;import postgresql.largeobject.*;import postgresql.util.*;/** * A ResultSet provides access to a table of data generated by executing a * Statement. The table rows are retrieved in sequence. Within a row its * column values can be accessed in any order. * * <P>A ResultSet maintains a cursor pointing to its current row of data. * Initially the cursor is positioned before the first row. The 'next' * method moves the cursor to the next row. * * <P>The getXXX methods retrieve column values for the current row. You can * retrieve values either using the index number of the column, or by using * the name of the column. In general using the column index will be more * efficient. Columns are numbered from 1. * * <P>For maximum portability, ResultSet columns within each row should be read * in left-to-right order and each column should be read only once. * *<P> For the getXXX methods, the JDBC driver attempts to convert the * underlying data to the specified Java type and returns a suitable Java * value. See the JDBC specification for allowable mappings from SQL types * to Java types with the ResultSet getXXX methods. * * <P>Column names used as input to getXXX methods are case insenstive. When * performing a getXXX using a column name, if several columns have the same * name, then the value of the first matching column will be returned. The * column name option is designed to be used when column names are used in the * SQL Query. For columns that are NOT explicitly named in the query, it is * best to use column numbers. If column names were used there is no way for * the programmer to guarentee that they actually refer to the intended * columns. * * <P>A ResultSet is automatically closed by the Statement that generated it * when that Statement is closed, re-executed, or is used to retrieve the * next result from a sequence of multiple results. * * <P>The number, types and properties of a ResultSet's columns are provided by * the ResultSetMetaData object returned by the getMetaData method. * * @see ResultSetMetaData * @see java.sql.ResultSet */public class ResultSet extends postgresql.ResultSet implements java.sql.ResultSet { /** * Create a new ResultSet - Note that we create ResultSets to * represent the results of everything. * * @param fields an array of Field objects (basically, the * ResultSet MetaData) * @param tuples Vector of the actual data * @param status the status string returned from the back end * @param updateCount the number of rows affected by the operation * @param cursor the positioned update/delete cursor name */ public ResultSet(Connection conn, Field[] fields, Vector tuples, String status, int updateCount) { super(conn,fields,tuples,status,updateCount); } /** * A ResultSet is initially positioned before its first row, * the first call to next makes the first row the current row; * the second call makes the second row the current row, etc. * * <p>If an input stream from the previous row is open, it is * implicitly closed. The ResultSet's warning chain is cleared * when a new row is read * * @return true if the new current is valid; false if there are no * more rows * @exception SQLException if a database access error occurs */ public boolean next() throws SQLException { if (++current_row >= rows.size()) return false; this_row = (byte [][])rows.elementAt(current_row); return true; } /** * In some cases, it is desirable to immediately release a ResultSet * database and JDBC resources instead of waiting for this to happen * when it is automatically closed. The close method provides this * immediate release. * * <p><B>Note:</B> A ResultSet is automatically closed by the Statement * the Statement that generated it when that Statement is closed, * re-executed, or is used to retrieve the next result from a sequence * of multiple results. A ResultSet is also automatically closed * when it is garbage collected. * * @exception SQLException if a database access error occurs */ public void close() throws SQLException { // No-op } /** * A column may have the value of SQL NULL; wasNull() reports whether * the last column read had this special value. Note that you must * first call getXXX on a column to try to read its value and then * call wasNull() to find if the value was SQL NULL * * @return true if the last column read was SQL NULL * @exception SQLException if a database access error occurred */ public boolean wasNull() throws SQLException { return wasNullFlag; } /** * Get the value of a column in the current row as a Java String * * @param columnIndex the first column is 1, the second is 2... * @return the column value, null for SQL NULL * @exception SQLException if a database access error occurs */ public String getString(int columnIndex) throws SQLException { //byte[] bytes = getBytes(columnIndex); // //if (bytes == null) //return null; //return new String(bytes); if (columnIndex < 1 || columnIndex > fields.length) throw new PSQLException("postgresql.res.colrange"); wasNullFlag = (this_row[columnIndex - 1] == null); if(wasNullFlag) return null; return new String(this_row[columnIndex - 1]); } /** * Get the value of a column in the current row as a Java boolean * * @param columnIndex the first column is 1, the second is 2... * @return the column value, false for SQL NULL * @exception SQLException if a database access error occurs */ public boolean getBoolean(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { int c = s.charAt(0); return ((c == 't') || (c == 'T')); } return false; // SQL NULL } /** * Get the value of a column in the current row as a Java byte. * * @param columnIndex the first column is 1, the second is 2,... * @return the column value; 0 if SQL NULL * @exception SQLException if a database access error occurs */ public byte getByte(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { try { return Byte.parseByte(s); } catch (NumberFormatException e) { throw new PSQLException("postgresql.res.badbyte",s); } } return 0; // SQL NULL } /** * Get the value of a column in the current row as a Java short. * * @param columnIndex the first column is 1, the second is 2,... * @return the column value; 0 if SQL NULL * @exception SQLException if a database access error occurs */ public short getShort(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { try { return Short.parseShort(s); } catch (NumberFormatException e) { throw new PSQLException("postgresql.res.badshort",s); } } return 0; // SQL NULL } /** * Get the value of a column in the current row as a Java int. * * @param columnIndex the first column is 1, the second is 2,... * @return the column value; 0 if SQL NULL * @exception SQLException if a database access error occurs */ public int getInt(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { try { return Integer.parseInt(s); } catch (NumberFormatException e) { throw new PSQLException ("postgresql.badint",s); } } return 0; // SQL NULL } /** * Get the value of a column in the current row as a Java long. * * @param columnIndex the first column is 1, the second is 2,... * @return the column value; 0 if SQL NULL * @exception SQLException if a database access error occurs */ public long getLong(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { try { return Long.parseLong(s); } catch (NumberFormatException e) { throw new PSQLException ("postgresql.res.badlong",s); } } return 0; // SQL NULL } /** * Get the value of a column in the current row as a Java float. * * @param columnIndex the first column is 1, the second is 2,... * @return the column value; 0 if SQL NULL * @exception SQLException if a database access error occurs */ public float getFloat(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { try { return Float.valueOf(s).floatValue(); } catch (NumberFormatException e) { throw new PSQLException ("postgresql.res.badfloat",s); } } return 0; // SQL NULL } /** * Get the value of a column in the current row as a Java double. * * @param columnIndex the first column is 1, the second is 2,... * @return the column value; 0 if SQL NULL * @exception SQLException if a database access error occurs */ public double getDouble(int columnIndex) throws SQLException { String s = getString(columnIndex); if (s != null) { try { return Double.valueOf(s).doubleValue(); } catch (NumberFormatException e) { throw new PSQLException ("postgresql.res.baddouble",s); } } return 0; // SQL NULL } /** * Get the value of a column in the current row as a * java.lang.BigDecimal object * * @param columnIndex the first column is 1, the second is 2... * @param scale the number of digits to the right of the decimal * @return the column value; if the value is SQL NULL, null * @exception SQLException if a database access error occurs */ public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException { String s = getString(columnIndex); BigDecimal val; if (s != null) { try { val = new BigDecimal(s); } catch (NumberFormatException e) { throw new PSQLException ("postgresql.res.badbigdec",s); } try { return val.setScale(scale); } catch (ArithmeticException e) { throw new PSQLException ("postgresql.res.badbigdec",s); } } return null; // SQL NULL } /** * Get the value of a column in the current row as a Java byte array. * * <p>In normal use, the bytes represent the raw values returned by the * backend. However, if the column is an OID, then it is assumed to * refer to a Large Object, and that object is returned as a byte array. * * <p><b>Be warned</b> If the large object is huge, then you may run out * of memory. * * @param columnIndex the first column is 1, the second is 2, ... * @return the column value; if the value is SQL NULL, the result * is null * @exception SQLException if a database access error occurs */ public byte[] getBytes(int columnIndex) throws SQLException { if (columnIndex < 1 || columnIndex > fields.length) throw new PSQLException("postgresql.res.colrange"); wasNullFlag = (this_row[columnIndex - 1] == null); // Handle OID's as BLOBS if(!wasNullFlag) if( fields[columnIndex - 1].getOID() == 26) { LargeObjectManager lom = connection.getLargeObjectAPI(); LargeObject lob = lom.open(getInt(columnIndex)); byte buf[] = lob.read(lob.size()); lob.close(); return buf; } return this_row[columnIndex - 1]; } /** * Get the value of a column in the current row as a java.sql.Date * object * * @param columnIndex the first column is 1, the second is 2... * @return the column value; null if SQL NULL * @exception SQLException if a database access error occurs */ public java.sql.Date getDate(int columnIndex) throws SQLException {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -