home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / jdbc / odbc / JdbcOdbcPreparedStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  9.8 KB  |  513 lines

  1. package sun.jdbc.odbc;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.math.BigDecimal;
  6. import java.sql.Date;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import java.sql.SQLWarning;
  11. import java.sql.Time;
  12. import java.sql.Timestamp;
  13. import java.util.Hashtable;
  14.  
  15. public class JdbcOdbcPreparedStatement extends JdbcOdbcStatement implements PreparedStatement {
  16.    protected int numParams;
  17.    protected JdbcOdbcBoundParam[] boundParams;
  18.  
  19.    public JdbcOdbcPreparedStatement(JdbcOdbcConnectionInterface var1) {
  20.       super(var1);
  21.    }
  22.  
  23.    public void initialize(JdbcOdbc var1, int var2) throws SQLException {
  24.       super.initialize(var1, var2);
  25.       this.initBoundParam();
  26.    }
  27.  
  28.    public void initialize(JdbcOdbc var1, int var2, int var3, Hashtable var4) throws SQLException {
  29.       super.initialize(var1, var2, var3, var4);
  30.       this.initBoundParam();
  31.    }
  32.  
  33.    public ResultSet executeQuery() throws SQLException {
  34.       if (JdbcOdbcObject.isTracing()) {
  35.          JdbcOdbcObject.trace("*PreparedStatement.executeQuery");
  36.       }
  37.  
  38.       Object var1 = null;
  39.       if (this.execute()) {
  40.          ResultSet var2 = ((JdbcOdbcStatement)this).getResultSet(false);
  41.          return var2;
  42.       } else {
  43.          throw new SQLException("No ResultSet was produced");
  44.       }
  45.    }
  46.  
  47.    public ResultSet executeQuery(String var1) throws SQLException {
  48.       if (JdbcOdbcObject.isTracing()) {
  49.          JdbcOdbcObject.trace("*PreparedStatement.executeQuery (" + var1 + ")");
  50.       }
  51.  
  52.       throw new SQLException("Driver does not support this function", "IM001");
  53.    }
  54.  
  55.    public int executeUpdate() throws SQLException {
  56.       if (JdbcOdbcObject.isTracing()) {
  57.          JdbcOdbcObject.trace("*PreparedStatement.executeUpdate");
  58.       }
  59.  
  60.       int var1 = -1;
  61.       if (!this.execute()) {
  62.          var1 = ((JdbcOdbcStatement)this).getUpdateCount();
  63.          return var1;
  64.       } else {
  65.          throw new SQLException("No row count was produced");
  66.       }
  67.    }
  68.  
  69.    public int executeUpdate(String var1) throws SQLException {
  70.       if (JdbcOdbcObject.isTracing()) {
  71.          JdbcOdbcObject.trace("*PreparedStatement.executeUpdate (" + var1 + ")");
  72.       }
  73.  
  74.       throw new SQLException("Driver does not support this function", "IM001");
  75.    }
  76.  
  77.    public synchronized boolean execute() throws SQLException {
  78.       if (JdbcOdbcObject.isTracing()) {
  79.          JdbcOdbcObject.trace("*PreparedStatement.execute");
  80.       }
  81.  
  82.       boolean var1 = false;
  83.       Object var2 = null;
  84.       boolean var3 = false;
  85.       ((JdbcOdbcStatement)this).clearWarnings();
  86.  
  87.       try {
  88.          var3 = super.OdbcApi.SQLExecute(super.hStmt);
  89.  
  90.          while(var3) {
  91.             int var4 = super.OdbcApi.SQLParamData(super.hStmt);
  92.             if (var4 == -1) {
  93.                var3 = false;
  94.             } else {
  95.                this.putParamData(var4);
  96.             }
  97.          }
  98.       } catch (SQLWarning var5) {
  99.       }
  100.  
  101.       while(var3) {
  102.          int var6 = super.OdbcApi.SQLParamData(super.hStmt);
  103.          if (var6 == -1) {
  104.             var3 = false;
  105.          } else {
  106.             this.putParamData(var6);
  107.          }
  108.       }
  109.  
  110.       if (((JdbcOdbcStatement)this).getColumnCount() > 0) {
  111.          var1 = true;
  112.       }
  113.  
  114.       return var1;
  115.    }
  116.  
  117.    public void setNull(int var1, int var2) throws SQLException {
  118.       if (JdbcOdbcObject.isTracing()) {
  119.          JdbcOdbcObject.trace("*PreparedStatement.setNull (" + var1 + "," + var2 + ")");
  120.       }
  121.  
  122.       byte[] var3 = this.getLengthBuf(var1);
  123.       super.OdbcApi.SQLBindInParameterNull(super.hStmt, var1, var2, var3);
  124.    }
  125.  
  126.    public void setBoolean(int var1, boolean var2) throws SQLException {
  127.       byte var3 = 0;
  128.       if (var2) {
  129.          var3 = 1;
  130.       }
  131.  
  132.       this.setInt(var1, var3);
  133.    }
  134.  
  135.    public void setByte(int var1, byte var2) throws SQLException {
  136.       byte[] var3 = this.allocBindBuf(var1, 4);
  137.       super.OdbcApi.SQLBindInParameterInteger(super.hStmt, var1, -6, var2, var3);
  138.    }
  139.  
  140.    public void setShort(int var1, short var2) throws SQLException {
  141.       byte[] var3 = this.allocBindBuf(var1, 4);
  142.       super.OdbcApi.SQLBindInParameterInteger(super.hStmt, var1, 5, var2, var3);
  143.    }
  144.  
  145.    public void setInt(int var1, int var2) throws SQLException {
  146.       byte[] var3 = this.allocBindBuf(var1, 4);
  147.       super.OdbcApi.SQLBindInParameterInteger(super.hStmt, var1, 4, var2, var3);
  148.    }
  149.  
  150.    public void setLong(int var1, long var2) throws SQLException {
  151.       byte[] var4 = this.allocBindBuf(var1, 8);
  152.       super.OdbcApi.SQLBindInParameterFloat(super.hStmt, var1, -5, 0, (float)var2, var4);
  153.    }
  154.  
  155.    public void setReal(int var1, float var2) throws SQLException {
  156.       byte[] var3 = this.allocBindBuf(var1, 8);
  157.       super.OdbcApi.SQLBindInParameterFloat(super.hStmt, var1, 7, 0, var2, var3);
  158.    }
  159.  
  160.    public void setFloat(int var1, float var2) throws SQLException {
  161.       byte[] var3 = this.allocBindBuf(var1, 8);
  162.       super.OdbcApi.SQLBindInParameterFloat(super.hStmt, var1, 6, 0, var2, var3);
  163.    }
  164.  
  165.    public void setDouble(int var1, double var2) throws SQLException {
  166.       byte[] var4 = this.allocBindBuf(var1, 8);
  167.       super.OdbcApi.SQLBindInParameterDouble(super.hStmt, var1, 8, 0, var2, var4);
  168.    }
  169.  
  170.    public void setBigDecimal(int var1, BigDecimal var2) throws SQLException {
  171.       this.setChar(var1, 2, var2.scale(), var2.toString());
  172.    }
  173.  
  174.    public void setDecimal(int var1, BigDecimal var2) throws SQLException {
  175.       this.setChar(var1, 1, 0, var2.toString());
  176.    }
  177.  
  178.    public void setString(int var1, String var2) throws SQLException {
  179.       this.setChar(var1, 1, 0, var2);
  180.    }
  181.  
  182.    public void setBytes(int var1, byte[] var2) throws SQLException {
  183.       this.setBinary(var1, -2, var2);
  184.    }
  185.  
  186.    public void setDate(int var1, Date var2) throws SQLException {
  187.       byte[] var3 = this.allocBindBuf(var1, 32);
  188.       super.OdbcApi.SQLBindInParameterDate(super.hStmt, var1, var2, var3);
  189.    }
  190.  
  191.    public void setTime(int var1, Time var2) throws SQLException {
  192.       byte[] var3 = this.allocBindBuf(var1, 32);
  193.       super.OdbcApi.SQLBindInParameterTime(super.hStmt, var1, var2, var3);
  194.    }
  195.  
  196.    public void setTimestamp(int var1, Timestamp var2) throws SQLException {
  197.       byte[] var3 = this.allocBindBuf(var1, 32);
  198.       super.OdbcApi.SQLBindInParameterTimestamp(super.hStmt, var1, var2, var3);
  199.    }
  200.  
  201.    public void setAsciiStream(int var1, InputStream var2, int var3) throws SQLException {
  202.       this.setStream(var1, var2, var3, -1, 1);
  203.    }
  204.  
  205.    public void setUnicodeStream(int var1, InputStream var2, int var3) throws SQLException {
  206.       this.setStream(var1, var2, var3, -1, 2);
  207.    }
  208.  
  209.    public void setBinaryStream(int var1, InputStream var2, int var3) throws SQLException {
  210.       this.setStream(var1, var2, var3, -4, 3);
  211.    }
  212.  
  213.    public void clearParameters() throws SQLException {
  214.       super.OdbcApi.SQLFreeStmt(super.hStmt, 3);
  215.    }
  216.  
  217.    public void setObject(int var1, Object var2) throws SQLException {
  218.       this.setObject(var1, var2, getTypeFromObject(var2));
  219.    }
  220.  
  221.    public void setObject(int var1, Object var2, int var3) throws SQLException {
  222.       this.setObject(var1, var2, var3, 0);
  223.    }
  224.  
  225.    public void setObject(int var1, Object var2, int var3, int var4) throws SQLException {
  226.       switch (var3) {
  227.          case -7:
  228.             this.setBoolean(var1, (Boolean)var2);
  229.             return;
  230.          case -6:
  231.             this.setByte(var1, (byte)(Integer)var2);
  232.             return;
  233.          case -5:
  234.             this.setLong(var1, ((Integer)var2).longValue());
  235.             return;
  236.          case -4:
  237.             this.setBinary(var1, var3, (byte[])var2);
  238.             return;
  239.          case -3:
  240.             this.setBinary(var1, var3, (byte[])var2);
  241.             return;
  242.          case -2:
  243.             this.setBytes(var1, (byte[])var2);
  244.             return;
  245.          case -1:
  246.             this.setChar(var1, var3, 0, (String)var2);
  247.             return;
  248.          case 1:
  249.             this.setString(var1, (String)var2);
  250.             return;
  251.          case 2:
  252.             this.setBigDecimal(var1, (BigDecimal)var2);
  253.             return;
  254.          case 3:
  255.             this.setDecimal(var1, (BigDecimal)var2);
  256.             return;
  257.          case 4:
  258.             this.setInt(var1, (Integer)var2);
  259.             return;
  260.          case 5:
  261.             this.setShort(var1, (short)(Integer)var2);
  262.             return;
  263.          case 6:
  264.             this.setFloat(var1, (Float)var2);
  265.             return;
  266.          case 7:
  267.             this.setReal(var1, (Float)var2);
  268.             return;
  269.          case 8:
  270.             this.setDouble(var1, (Double)var2);
  271.             return;
  272.          case 12:
  273.             this.setChar(var1, var3, 0, (String)var2);
  274.             return;
  275.          case 91:
  276.             this.setDate(var1, (Date)var2);
  277.             return;
  278.          case 92:
  279.             this.setTime(var1, (Time)var2);
  280.             return;
  281.          case 93:
  282.             this.setTimestamp(var1, (Timestamp)var2);
  283.             return;
  284.          default:
  285.             throw new SQLException("Unknown SQL Type for PreparedStatement.setObject (SQL Type=" + var3);
  286.       }
  287.    }
  288.  
  289.    protected void initBoundParam() throws SQLException {
  290.       this.numParams = super.OdbcApi.SQLNumParams(super.hStmt);
  291.       if (this.numParams > 0) {
  292.          this.boundParams = new JdbcOdbcBoundParam[this.numParams];
  293.  
  294.          for(int var1 = 0; var1 < this.numParams; ++var1) {
  295.             this.boundParams[var1] = new JdbcOdbcBoundParam();
  296.             this.boundParams[var1].initialize();
  297.          }
  298.       }
  299.  
  300.    }
  301.  
  302.    protected byte[] allocBindBuf(int var1, int var2) {
  303.       byte[] var3 = null;
  304.       if (var1 >= 1 && var1 <= this.numParams) {
  305.          var3 = this.boundParams[var1 - 1].allocBindDataBuffer(var2);
  306.       }
  307.  
  308.       return var3;
  309.    }
  310.  
  311.    protected byte[] getDataBuf(int var1) {
  312.       byte[] var2 = null;
  313.       if (var1 >= 1 && var1 <= this.numParams) {
  314.          var2 = this.boundParams[var1 - 1].getBindDataBuffer();
  315.       }
  316.  
  317.       return var2;
  318.    }
  319.  
  320.    protected byte[] getLengthBuf(int var1) {
  321.       byte[] var2 = null;
  322.       if (var1 >= 1 && var1 <= this.numParams) {
  323.          var2 = this.boundParams[var1 - 1].getBindLengthBuffer();
  324.       }
  325.  
  326.       return var2;
  327.    }
  328.  
  329.    public int getParamLength(int var1) {
  330.       int var2 = -1;
  331.       if (var1 >= 1 && var1 <= this.numParams) {
  332.          var2 = super.OdbcApi.bufferToInt(this.boundParams[var1 - 1].getBindLengthBuffer());
  333.       }
  334.  
  335.       return var2;
  336.    }
  337.  
  338.    protected void putParamData(int var1) throws SQLException, JdbcOdbcSQLWarning {
  339.       int var2 = JdbcOdbcLimits.MAX_PUT_DATA_LENGTH;
  340.       byte[] var5 = new byte[var2];
  341.       boolean var6 = false;
  342.       if (var1 >= 1 && var1 <= this.numParams) {
  343.          InputStream var7 = this.boundParams[var1 - 1].getInputStream();
  344.          int var8 = this.boundParams[var1 - 1].getInputStreamLen();
  345.          int var9 = this.boundParams[var1 - 1].getStreamType();
  346.  
  347.          while(!var6) {
  348.             int var3;
  349.             try {
  350.                if (JdbcOdbcObject.isTracing()) {
  351.                   JdbcOdbcObject.trace("Reading from input stream");
  352.                }
  353.  
  354.                var3 = var7.read(var5);
  355.                if (JdbcOdbcObject.isTracing()) {
  356.                   JdbcOdbcObject.trace("Bytes read: " + var3);
  357.                }
  358.             } catch (IOException var11) {
  359.                throw new SQLException(((Throwable)var11).getMessage());
  360.             }
  361.  
  362.             if (var3 == -1) {
  363.                if (var8 != 0) {
  364.                   throw new SQLException("End of InputStream reached before satisfying length specified when InputStream was set");
  365.                }
  366.  
  367.                var6 = true;
  368.                return;
  369.             }
  370.  
  371.             if (var3 > var8) {
  372.                var3 = var8;
  373.                var6 = true;
  374.             }
  375.  
  376.             int var4 = var3;
  377.             if (var9 == 2) {
  378.                var4 = var3 / 2;
  379.  
  380.                for(int var10 = 0; var10 < var4; ++var10) {
  381.                   var5[var10] = var5[var10 * 2 + 1];
  382.                }
  383.             }
  384.  
  385.             super.OdbcApi.SQLPutData(super.hStmt, var5, var4);
  386.             var8 -= var3;
  387.             if (JdbcOdbcObject.isTracing()) {
  388.                JdbcOdbcObject.trace(var8 + " bytes remaining");
  389.             }
  390.  
  391.             if (var8 == 0) {
  392.                var6 = true;
  393.             }
  394.          }
  395.  
  396.       } else {
  397.          if (JdbcOdbcObject.isTracing()) {
  398.             JdbcOdbcObject.trace("Invalid index for putParamData()");
  399.          }
  400.  
  401.       }
  402.    }
  403.  
  404.    public void setStream(int var1, InputStream var2, int var3, int var4, int var5) throws SQLException {
  405.       byte[] var6 = this.getLengthBuf(var1);
  406.       byte[] var7 = this.allocBindBuf(var1, 4);
  407.       super.OdbcApi.SQLBindInParameterAtExec(super.hStmt, var1, var4, var3, var7, var6);
  408.       this.boundParams[var1 - 1].setInputStream(var2, var3);
  409.       this.boundParams[var1 - 1].setStreamType(var5);
  410.    }
  411.  
  412.    protected void setChar(int var1, int var2, int var3, String var4) throws SQLException {
  413.       byte[] var5 = this.allocBindBuf(var1, var4.length() + 1);
  414.       int var6 = ((JdbcOdbcStatement)this).getPrecision(var2);
  415.       if (var6 < 0 || var6 > JdbcOdbcLimits.DEFAULT_IN_PRECISION) {
  416.          var6 = JdbcOdbcLimits.DEFAULT_IN_PRECISION;
  417.       }
  418.  
  419.       super.OdbcApi.SQLBindInParameterString(super.hStmt, var1, var2, var6, var3, var4, var5);
  420.    }
  421.  
  422.    protected void setBinary(int var1, int var2, byte[] var3) throws SQLException {
  423.       byte[] var4 = this.allocBindBuf(var1, var3.length);
  424.       byte[] var5 = this.getLengthBuf(var1);
  425.       super.OdbcApi.SQLBindInParameterBinary(super.hStmt, var1, var2, var3, var4, var5);
  426.    }
  427.  
  428.    public static int getTypeFromObject(Object var0) {
  429.       if (var0 == null) {
  430.          return 0;
  431.       } else {
  432.          try {
  433.             if ((String)var0 != null) {
  434.                return 12;
  435.             }
  436.          } catch (Exception var11) {
  437.          }
  438.  
  439.          try {
  440.             if ((BigDecimal)var0 != null) {
  441.                return 2;
  442.             }
  443.          } catch (Exception var10) {
  444.          }
  445.  
  446.          try {
  447.             if ((Boolean)var0 != null) {
  448.                return -7;
  449.             }
  450.          } catch (Exception var9) {
  451.          }
  452.  
  453.          try {
  454.             if ((Integer)var0 != null) {
  455.                return 4;
  456.             }
  457.          } catch (Exception var8) {
  458.          }
  459.  
  460.          try {
  461.             if ((Long)var0 != null) {
  462.                return -5;
  463.             }
  464.          } catch (Exception var7) {
  465.          }
  466.  
  467.          try {
  468.             if ((Float)var0 != null) {
  469.                return 6;
  470.             }
  471.          } catch (Exception var6) {
  472.          }
  473.  
  474.          try {
  475.             if ((Double)var0 != null) {
  476.                return 8;
  477.             }
  478.          } catch (Exception var5) {
  479.          }
  480.  
  481.          try {
  482.             if ((byte[])var0 != null) {
  483.                return -3;
  484.             }
  485.          } catch (Exception var4) {
  486.          }
  487.  
  488.          try {
  489.             if ((Date)var0 != null) {
  490.                return 91;
  491.             }
  492.          } catch (Exception var3) {
  493.          }
  494.  
  495.          try {
  496.             if ((Time)var0 != null) {
  497.                return 92;
  498.             }
  499.          } catch (Exception var2) {
  500.          }
  501.  
  502.          try {
  503.             if ((Timestamp)var0 != null) {
  504.                return 93;
  505.             }
  506.          } catch (Exception var1) {
  507.          }
  508.  
  509.          return 1111;
  510.       }
  511.    }
  512. }
  513.