selectresult.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,222 行 · 第 1/2 页
JAVA
1,222 行
* Returns the blob value of the given index. */ public Blob getBlob(int index) throws SQLException { _wasNull = false; setColumn(index); int type = read(); switch (type) { case Column.NONE: _wasNull = true; return null; case Column.BLOB: return getBlob(); default: throw new RuntimeException("column can't be retrieved as a blob:" + type + " column:" + index); } } /** * Returns the clob value of the given index. */ public Clob getClob(int index) throws SQLException { _wasNull = false; setColumn(index); int type = read(); switch (type) { case Column.NONE: _wasNull = true; return null; case Column.BLOB: return getClob(); default: throw new RuntimeException("column can't be retrieved as a clob:" + type + " column:" + index); } } /** * Returns true if the last column read was null. */ public boolean wasNull() { return _wasNull; } /** * Returns the string value for the result set. */ private String readString() throws SQLException { int length = ((read() << 24) + (read() << 16) + (read() << 8) + (read())); int len = length >> 1; CharBuffer cb = _cb; cb.ensureCapacity(len); char []cBuf = cb.getBuffer(); int cLen = 0; for (; len > 0; len--) { int ch1 = read(); int ch2 = read(); cBuf[cLen++] = (char) (((ch1 & 0xff) << 8) + (ch2 & 0xff)); } return new String(cBuf, 0, cLen); } /** * Returns the blob value for the result set. */ private Blob getBlob() throws SQLException { BlobImpl blob = new BlobImpl(); blob.setStore(_stores[_column]); byte []inode = blob.getInode(); read(inode, 0, 128); return blob; } /** * Returns the clob value for the result set. */ private Clob getClob() throws SQLException { ClobImpl clob = new ClobImpl(); clob.setStore(_stores[_column]); byte []inode = clob.getInode(); read(inode, 0, 128); return clob; } /** * Returns the string value for the result set. */ private String readBlobString() throws SQLException { read(_blob, 0, 128); CharBuffer cb = _cb; cb.clear(); BlobInputStream is = null; try { is = new BlobInputStream(_stores[_column], _blob, 0); int ch; while ((ch = is.read()) >= 0) { if (ch < 0x80) cb.append((char) ch); } } catch (IOException e) { throw new SQLExceptionWrapper(e); } return cb.toString(); } /** * Returns the string value for the result set. */ private byte []readBlobBytes() throws SQLException { read(_blob, 0, 128); ByteArrayOutputStream bos = new ByteArrayOutputStream(); BlobInputStream is = null; try { is = new BlobInputStream(_stores[_column], _blob, 0); int ch; while ((ch = is.read()) >= 0) { bos.write(ch); } } catch (IOException e) { throw new SQLExceptionWrapper(e); } return bos.toByteArray(); } /** * Set the column in the current row. */ private void setColumn(int column) { if (column < _column) { _offset = _rowOffset; skipColumns(column); } else { _offset = _columnOffset; skipColumns(column - _column); } _column = column; _columnOffset = _offset; } /** * Set the column in the current row. */ void setRow(int rowOffset) { _rowOffset = rowOffset; _offset = rowOffset; _column = 0; _columnOffset = rowOffset; } /** * Skips the specified number of columns. */ private void skipColumns(int count) { for (; count > 0; count--) { int type = read(); int sublen; switch (type) { case Column.NONE: break; case Column.VARCHAR: int l0 = read(); int l1 = read(); int l2 = read(); int l3 = read(); sublen = ((l0 << 24) + (l1 << 16) + (l2 << 8) + (l3)); _offset += sublen; break; case Column.BINARY: sublen = read(); _offset += sublen; break; case Column.SHORT: _offset += 2; break; case Column.INT: _offset += 4; break; case Column.LONG: case Column.DOUBLE: case Column.DATE: _offset += 8; break; case Column.BLOB: _offset += 128; break; default: throw new RuntimeException("Unknown column type: " + type); } } } /** * Starts a row */ public void startRow() { if (_orderIndex != null) _orderIndex.add(_length); _rowCount++; } /** * Writes a null. */ public void writeNull() { write(Column.NONE); } /** * Writes a string. */ public void writeString(String s) { write(Column.VARCHAR); int stringLength = s.length(); int length = 2 * stringLength; write(length >> 24); write(length >> 16); write(length >> 8); write(length); for (int i = 0; i < stringLength; i++) { char ch = s.charAt(i); write(ch << 8); write(ch); } } /** * Writes a string. */ public void writeString(byte []buffer, int offset, int stringLength) { int rLength = _length; int rOffset = rLength % SIZE; int rBlockId = rLength / SIZE; if (_buffers[rBlockId] == null) { TempBuffer tempBuffer = TempBuffer.allocate(); _tempBuffers[rBlockId] = tempBuffer; _buffers[rBlockId] = tempBuffer.getBuffer(); } byte []rBuffer = _buffers[rBlockId]; rBuffer[rOffset] = Column.VARCHAR; int length = 2 * stringLength; if (rOffset + 5 < rBuffer.length) { rBuffer[rOffset + 1] = (byte) (length >> 24); rBuffer[rOffset + 2] = (byte) (length >> 16); rBuffer[rOffset + 3] = (byte) (length >> 8); rBuffer[rOffset + 4] = (byte) length; if (rOffset + 5 + length < SIZE) { System.arraycopy(buffer, offset, rBuffer, rOffset + 5, length); _length = rLength + 5 + length; } else { _length = rLength + 5; write(buffer, offset, length); } } else { _length = rLength + 1; write(length >> 24); write(length >> 16); write(length >> 8); write(length); write(buffer, offset, length); } } /** * Writes a binary. */ public void writeBinary(byte []buffer, int offset, int length) { write(Column.BINARY); write(length); write(buffer, offset, length); } /** * Writes a string. */ public void writeBlock(int code, byte []buffer, int offset, int length) { write(code); write(buffer, offset, length); } /** * Writes a double. */ public void writeDouble(double dValue) { write(Column.DOUBLE); long value = Double.doubleToLongBits(dValue); write((int) (value >> 56)); write((int) (value >> 48)); write((int) (value >> 40)); write((int) (value >> 32)); write((int) (value >> 24)); write((int) (value >> 16)); write((int) (value >> 8)); write((int) value); } /** * Writes a long. */ public void writeLong(long value) { write(Column.LONG); write((int) (value >> 56)); write((int) (value >> 48)); write((int) (value >> 40)); write((int) (value >> 32)); write((int) (value >> 24)); write((int) (value >> 16)); write((int) (value >> 8)); write((int) value); } /** * Writes a date. */ public void writeDate(long value) { write(Column.DATE); write((int) (value >> 56)); write((int) (value >> 48)); write((int) (value >> 40)); write((int) (value >> 32)); write((int) (value >> 24)); write((int) (value >> 16)); write((int) (value >> 8)); write((int) value); } /** * Writes an long. */ public void writeInt(int value) { write(Column.INT); write(value >> 24); write(value >> 16); write(value >> 8); write(value); } /** * Writes a short */ public void writeShort(int value) { write(Column.SHORT); write(value >> 8); write(value); } /** * Writes a blob. */ public void writeBlob(byte []buffer, int offset) { write(Column.BLOB); write(buffer, offset, 128); } /** * Seeks the specified offset. */ private void seek(int offset) { _offset = offset; } /** * Reads the next byte. */ private int read() { int offset = _offset; if (_length <= offset) return -1; _offset = offset + 1; byte []buf = _buffers[offset / SIZE]; return buf[offset % SIZE] & 0xff; } /** * Reads the next byte. */ private int read(byte []buffer, int bufOffset, int bufLength) { int offset = _offset; int length = _length; byte [][]buffers = _buffers; for (int i = bufLength; i > 0; i--) { if (length <= offset) { _offset = offset; return -1; } byte []buf = buffers[offset / SIZE]; buffer[bufOffset] = buf[offset % SIZE]; offset++; bufOffset++; } _offset = offset; return bufLength; } /** * Writes the next byte. */ public void write(int value) { int length = _length; int rOffset = length % SIZE; int blockId = length / SIZE; byte []buffer = _buffers[blockId]; if (buffer == null) { TempBuffer tempBuffer = TempBuffer.allocate(); _tempBuffers[blockId] = tempBuffer; _buffers[blockId] = tempBuffer.getBuffer(); buffer = _buffers[blockId]; } buffer[rOffset] = (byte) value; _length = length + 1; } /** * Writes a buffer */ public void write(byte []buffer, int offset, int length) { int rLength = _length; while (length > 0) { int rOffset = rLength % SIZE; int rBufferId = rLength / SIZE; if (rOffset == 0) { TempBuffer tempBuffer = TempBuffer.allocate(); if (_tempBuffers.length <= rBufferId) { int len = _tempBuffers.length; TempBuffer []newTempBuffers = new TempBuffer[len + 32]; System.arraycopy(_tempBuffers, 0, newTempBuffers, 0, len); _tempBuffers = newTempBuffers; byte [][]newBuffers = new byte[len + 32][]; System.arraycopy(_buffers, 0, newBuffers, 0, len); _buffers = newBuffers; } _tempBuffers[rBufferId] = tempBuffer; _buffers[rBufferId] = tempBuffer.getBuffer(); } byte []rBuffer = _buffers[rBufferId]; int sublen = rBuffer.length - rOffset; if (length < sublen) sublen = length; System.arraycopy(buffer, offset, rBuffer, rOffset, sublen); length -= sublen; offset += sublen; rLength += sublen; } _length = rLength; } private String toHex(byte []bytes) { StringBuilder sb = new StringBuilder(); int len = bytes.length; for (int i = 0; i < len; i++) { int d1 = (bytes[i] >> 4) & 0xf; int d2 = (bytes[i]) & 0xf; if (d1 < 10) sb.append((char) ('0' + d1)); else sb.append((char) ('a' + d1 - 10)); if (d2 < 10) sb.append((char) ('0' + d2)); else sb.append((char) ('a' + d2 - 10)); } return sb.toString(); } public void close() { for (int i = 0; i < _buffers.length; i++) { TempBuffer buffer = _tempBuffers[i]; if (buffer != null) TempBuffer.free(buffer); _tempBuffers[i] = null; _buffers[i] = null; } _order = null; _orderIndex = null; _freeList.free(this); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?