home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / jdbc / odbc / JdbcOdbcStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  6.9 KB  |  367 lines

  1. package sun.jdbc.odbc;
  2.  
  3. import java.math.BigDecimal;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.SQLWarning;
  7. import java.sql.Statement;
  8. import java.util.Hashtable;
  9.  
  10. public class JdbcOdbcStatement extends JdbcOdbcObject implements Statement {
  11.    protected JdbcOdbc OdbcApi = null;
  12.    protected int hDbc = 0;
  13.    protected int hStmt = 0;
  14.    protected SQLWarning lastWarning = null;
  15.    protected Hashtable typeInfo;
  16.    protected ResultSet myResultSet;
  17.    protected JdbcOdbcConnectionInterface myConnection;
  18.  
  19.    public JdbcOdbcStatement(JdbcOdbcConnectionInterface var1) {
  20.       this.myConnection = var1;
  21.    }
  22.  
  23.    protected void finalize() {
  24.       if (JdbcOdbcObject.isTracing()) {
  25.          JdbcOdbcObject.trace("Statement.finalize " + this);
  26.       }
  27.  
  28.       try {
  29.          this.close();
  30.       } catch (SQLException var1) {
  31.       }
  32.    }
  33.  
  34.    public void initialize(JdbcOdbc var1, int var2) throws SQLException {
  35.       int var3 = var1.SQLAllocStmt(var2);
  36.       this.initialize(var1, var2, var3, (Hashtable)null);
  37.    }
  38.  
  39.    public void initialize(JdbcOdbc var1, int var2, int var3, Hashtable var4) throws SQLException {
  40.       this.OdbcApi = var1;
  41.       this.hDbc = var2;
  42.       this.hStmt = var3;
  43.       this.typeInfo = var4;
  44.    }
  45.  
  46.    public ResultSet executeQuery(String var1) throws SQLException {
  47.       if (JdbcOdbcObject.isTracing()) {
  48.          JdbcOdbcObject.trace("*Statement.executeQuery (" + var1 + ")");
  49.       }
  50.  
  51.       Object var2 = null;
  52.       if (this.execute(var1)) {
  53.          ResultSet var3 = this.getResultSet(false);
  54.          return var3;
  55.       } else {
  56.          throw new SQLException("No ResultSet was produced");
  57.       }
  58.    }
  59.  
  60.    public int executeUpdate(String var1) throws SQLException {
  61.       if (JdbcOdbcObject.isTracing()) {
  62.          JdbcOdbcObject.trace("*Statement.executeUpdate (" + var1 + ")");
  63.       }
  64.  
  65.       int var2 = -1;
  66.       if (!this.execute(var1)) {
  67.          var2 = this.getUpdateCount();
  68.          return var2;
  69.       } else {
  70.          throw new SQLException("No row count was produced");
  71.       }
  72.    }
  73.  
  74.    public synchronized boolean execute(String var1) throws SQLException {
  75.       if (JdbcOdbcObject.isTracing()) {
  76.          JdbcOdbcObject.trace("*Statement.execute (" + var1 + ")");
  77.       }
  78.  
  79.       boolean var2 = false;
  80.       Object var3 = null;
  81.       this.reset();
  82.       this.lockIfNecessary(var1);
  83.  
  84.       try {
  85.          this.OdbcApi.SQLExecDirect(this.hStmt, var1);
  86.       } catch (SQLWarning var5) {
  87.       }
  88.  
  89.       if (this.getColumnCount() > 0) {
  90.          var2 = true;
  91.       }
  92.  
  93.       return var2;
  94.    }
  95.  
  96.    public ResultSet getResultSet() throws SQLException {
  97.       if (JdbcOdbcObject.isTracing()) {
  98.          JdbcOdbcObject.trace("*Statement.getResultSet");
  99.       }
  100.  
  101.       return this.getResultSet(true);
  102.    }
  103.  
  104.    public ResultSet getResultSet(boolean var1) throws SQLException {
  105.       JdbcOdbcResultSet var2 = null;
  106.       int var3 = 1;
  107.       if (var1) {
  108.          var3 = this.getColumnCount();
  109.       }
  110.  
  111.       if (var3 > 0) {
  112.          var2 = new JdbcOdbcResultSet();
  113.          var2.initialize(this.OdbcApi, this.hDbc, this.hStmt, true, this);
  114.          this.myResultSet = var2;
  115.       } else {
  116.          this.clearMyResultSet();
  117.       }
  118.  
  119.       return var2;
  120.    }
  121.  
  122.    public int getUpdateCount() throws SQLException {
  123.       if (JdbcOdbcObject.isTracing()) {
  124.          JdbcOdbcObject.trace("*Statement.getUpdateCount");
  125.       }
  126.  
  127.       int var1 = -1;
  128.       if (this.getColumnCount() == 0) {
  129.          var1 = this.getRowCount();
  130.       }
  131.  
  132.       return var1;
  133.    }
  134.  
  135.    public synchronized void close() throws SQLException {
  136.       if (JdbcOdbcObject.isTracing()) {
  137.          JdbcOdbcObject.trace("*Statement.close");
  138.       }
  139.  
  140.       this.clearMyResultSet();
  141.  
  142.       try {
  143.          this.clearWarnings();
  144.          if (this.hStmt != 0) {
  145.             this.OdbcApi.SQLFreeStmt(this.hStmt, 1);
  146.             this.hStmt = 0;
  147.          }
  148.       } catch (SQLException var1) {
  149.       }
  150.  
  151.       this.myConnection.deregisterStatement(this);
  152.    }
  153.  
  154.    protected void reset() throws SQLException {
  155.       this.clearWarnings();
  156.       if (this.myResultSet != null) {
  157.          this.clearMyResultSet();
  158.       } else {
  159.          this.OdbcApi.SQLFreeStmt(this.hStmt, 0);
  160.       }
  161.    }
  162.  
  163.    public boolean getMoreResults() throws SQLException {
  164.       if (JdbcOdbcObject.isTracing()) {
  165.          JdbcOdbcObject.trace("*Statement.getMoreResults");
  166.       }
  167.  
  168.       SQLWarning var1 = null;
  169.       boolean var2 = false;
  170.       this.clearWarnings();
  171.  
  172.       try {
  173.          var2 = this.OdbcApi.SQLMoreResults(this.hStmt);
  174.       } catch (SQLWarning var4) {
  175.          var1 = var4;
  176.       }
  177.  
  178.       if (var2 && this.getColumnCount() == 0) {
  179.          var2 = false;
  180.       }
  181.  
  182.       this.setWarning(var1);
  183.       return var2;
  184.    }
  185.  
  186.    public int getMaxFieldSize() throws SQLException {
  187.       if (JdbcOdbcObject.isTracing()) {
  188.          JdbcOdbcObject.trace("*Statement.getMaxFieldSize");
  189.       }
  190.  
  191.       return this.getStmtOption((short)3);
  192.    }
  193.  
  194.    public void setMaxFieldSize(int var1) throws SQLException {
  195.       if (JdbcOdbcObject.isTracing()) {
  196.          JdbcOdbcObject.trace("*Statement.setMaxFieldSize (" + var1 + ")");
  197.       }
  198.  
  199.       this.OdbcApi.SQLSetStmtOption(this.hStmt, (short)3, var1);
  200.    }
  201.  
  202.    public int getMaxRows() throws SQLException {
  203.       if (JdbcOdbcObject.isTracing()) {
  204.          JdbcOdbcObject.trace("*Statement.getMaxRows");
  205.       }
  206.  
  207.       return this.getStmtOption((short)1);
  208.    }
  209.  
  210.    public void setMaxRows(int var1) throws SQLException {
  211.       if (JdbcOdbcObject.isTracing()) {
  212.          JdbcOdbcObject.trace("*Statement.setMaxRows (" + var1 + ")");
  213.       }
  214.  
  215.       this.OdbcApi.SQLSetStmtOption(this.hStmt, (short)1, var1);
  216.    }
  217.  
  218.    public void setEscapeProcessing(boolean var1) throws SQLException {
  219.       if (JdbcOdbcObject.isTracing()) {
  220.          JdbcOdbcObject.trace("*Statement.setEscapeProcessing (" + var1 + ")");
  221.       }
  222.  
  223.       byte var2 = 0;
  224.       if (!var1) {
  225.          var2 = 1;
  226.       }
  227.  
  228.       this.OdbcApi.SQLSetStmtOption(this.hStmt, (short)2, var2);
  229.    }
  230.  
  231.    public int getQueryTimeout() throws SQLException {
  232.       if (JdbcOdbcObject.isTracing()) {
  233.          JdbcOdbcObject.trace("*Statement.getQueryTimeout");
  234.       }
  235.  
  236.       return this.getStmtOption((short)0);
  237.    }
  238.  
  239.    public void setQueryTimeout(int var1) throws SQLException {
  240.       if (JdbcOdbcObject.isTracing()) {
  241.          JdbcOdbcObject.trace("*Statement.setQueryTimeout (" + var1 + ")");
  242.       }
  243.  
  244.       this.OdbcApi.SQLSetStmtOption(this.hStmt, (short)0, var1);
  245.    }
  246.  
  247.    public void cancel() throws SQLException {
  248.       if (JdbcOdbcObject.isTracing()) {
  249.          JdbcOdbcObject.trace("*Statement.cancel");
  250.       }
  251.  
  252.       this.clearWarnings();
  253.  
  254.       try {
  255.          this.OdbcApi.SQLCancel(this.hStmt);
  256.       } catch (SQLWarning var2) {
  257.          this.setWarning(var2);
  258.       }
  259.    }
  260.  
  261.    public SQLWarning getWarnings() throws SQLException {
  262.       if (JdbcOdbcObject.isTracing()) {
  263.          JdbcOdbcObject.trace("*Statement.getWarnings");
  264.       }
  265.  
  266.       return this.lastWarning;
  267.    }
  268.  
  269.    public void clearWarnings() throws SQLException {
  270.       this.lastWarning = null;
  271.    }
  272.  
  273.    public void setWarning(SQLWarning var1) throws SQLException {
  274.       this.lastWarning = var1;
  275.    }
  276.  
  277.    public void setCursorName(String var1) throws SQLException {
  278.       if (JdbcOdbcObject.isTracing()) {
  279.          JdbcOdbcObject.trace("*Statement.setCursorName " + var1 + ")");
  280.       }
  281.  
  282.       this.OdbcApi.SQLSetCursorName(this.hStmt, var1);
  283.    }
  284.  
  285.    protected int getStmtOption(short var1) throws SQLException {
  286.       int var2 = 0;
  287.       this.clearWarnings();
  288.  
  289.       try {
  290.          var2 = this.OdbcApi.SQLGetStmtOption(this.hStmt, var1);
  291.       } catch (JdbcOdbcSQLWarning var5) {
  292.          BigDecimal var4 = (BigDecimal)var5.value;
  293.          var2 = var4.intValue();
  294.          this.setWarning(JdbcOdbc.convertWarning(var5));
  295.       }
  296.  
  297.       return var2;
  298.    }
  299.  
  300.    protected int getColumnCount() throws SQLException {
  301.       int var1 = 0;
  302.  
  303.       try {
  304.          var1 = this.OdbcApi.SQLNumResultCols(this.hStmt);
  305.       } catch (JdbcOdbcSQLWarning var4) {
  306.          BigDecimal var3 = (BigDecimal)var4.value;
  307.          var1 = var3.intValue();
  308.       }
  309.  
  310.       return var1;
  311.    }
  312.  
  313.    protected int getRowCount() throws SQLException {
  314.       int var1 = 0;
  315.  
  316.       try {
  317.          var1 = this.OdbcApi.SQLRowCount(this.hStmt);
  318.       } catch (JdbcOdbcSQLWarning var4) {
  319.          BigDecimal var3 = (BigDecimal)var4.value;
  320.          var1 = var3.intValue();
  321.       }
  322.  
  323.       return var1;
  324.    }
  325.  
  326.    protected boolean lockIfNecessary(String var1) throws SQLException {
  327.       boolean var2 = false;
  328.       String var3 = var1.toUpperCase();
  329.       int var4 = var3.indexOf(" FOR UPDATE");
  330.       if (var4 > 0) {
  331.          if (JdbcOdbcObject.isTracing()) {
  332.             JdbcOdbcObject.trace("Setting concurrency for update");
  333.          }
  334.  
  335.          try {
  336.             this.OdbcApi.SQLSetStmtOption(this.hStmt, (short)7, 2);
  337.          } catch (SQLWarning var6) {
  338.             this.setWarning(var6);
  339.          }
  340.  
  341.          var2 = true;
  342.       }
  343.  
  344.       return var2;
  345.    }
  346.  
  347.    protected int getPrecision(int var1) {
  348.       int var2 = -1;
  349.       if (this.typeInfo != null) {
  350.          JdbcOdbcTypeInfo var3 = (JdbcOdbcTypeInfo)this.typeInfo.get(new Integer(var1));
  351.          if (var3 != null) {
  352.             var2 = var3.getPrec();
  353.          }
  354.       }
  355.  
  356.       return var2;
  357.    }
  358.  
  359.    protected synchronized void clearMyResultSet() throws SQLException {
  360.       if (this.myResultSet != null) {
  361.          this.myResultSet.close();
  362.          this.myResultSet = null;
  363.       }
  364.  
  365.    }
  366. }
  367.