public class TdsCore
extends java.lang.Object
Implementation notes:
Modifier and Type | Class and Description |
---|---|
private static class |
TdsCore.TableMetaData
Inner static class used to hold table meta data.
|
private static class |
TdsCore.TdsToken
Inner static class used to hold information about TDS tokens read.
|
Modifier and Type | Field and Description |
---|---|
private static int |
ASYNC_CANCEL
Cancel has been generated by
Statement.cancel() . |
static byte |
CANCEL_PKT
TDS Cancel packet.
|
private int[] |
cancelMonitor
Synchronization monitor for
cancelPending . |
private boolean |
cancelPending
Indicates pending cancel that needs to be cleared.
|
private ColInfo[] |
columns
The array of column meta data objects for this result set.
|
private ConnectionJDBC2 |
connection
The Connection object that created this object.
|
private Semaphore |
connectionLock
Mutual exclusion lock on connection.
|
private TdsCore.TdsToken |
currentToken
The descriptor object for the current TDS token.
|
static int |
DEFAULT_MIN_PKT_SIZE_TDS70
Default minimum network packet size for TDS 7.0 and newer.
|
(package private) static byte |
DONE_CANCEL
Done: Cancel acknowledgement.
|
private static byte |
DONE_END_OF_RESPONSE
Done: Response terminator (if more than one request packet is sent, each
response is terminated by a DONE packet with this flag set).
|
private static byte |
DONE_ERROR
Done: command caused an error.
|
private static byte |
DONE_MORE_RESULTS
Done: more results are expected.
|
private static byte |
DONE_ROW_COUNT
Done: There is a valid row count.
|
private static ParamInfo[] |
EMPTY_PARAMETER_INFO
Used to optimize the
getParameters() call |
private boolean |
endOfResponse
True if the server response is fully read.
|
private boolean |
endOfResults
True if the current result set is at end of file.
|
static int |
EXECUTE_SQL
Prepare SQL using sp_executesql
|
private boolean |
fatalError
Indicates that a fatal error has occured and the connection will close.
|
private static java.lang.String |
hostName
Name of the client host (it can take quite a while to find it out if DNS is configured incorrectly).
|
private ResponseStream |
in
The input server response stream.
|
private boolean |
inBatch
Indicates processing a batch.
|
private boolean |
isClosed
Indicates that this object is closed.
|
static byte |
LOGIN_PKT
TDS 4.2 or 5.0 Login packet.
|
static int |
MAX_PKT_SIZE
Maximum network packet size.
|
private SQLDiagnostic |
messages
The head of the diagnostic messages chain.
|
static int |
MIN_PKT_SIZE
Minimum network packet size.
|
static byte |
MSDTC_PKT
TDS MSDTC packet.
|
static byte |
MSLOGIN_PKT
TDS 7.0 Login packet.
|
private int |
nextParam
The index of the next output parameter to populate.
|
static byte |
NTLMAUTH_PKT
TDS 7.0 NTLM Authentication packet.
|
private boolean |
ntlmAuthSSO
Flag that indicates if logon() should try to use Windows Single Sign On using SSPI.
|
private RequestStream |
out
The output server request stream.
|
private ParamInfo[] |
parameters
The array of parameter meta data objects for the current procedure call.
|
static int |
PKT_HDR_LEN
The size of the packet header.
|
static byte |
PRELOGIN_PKT
SQL 2000 prelogin negotiation packet.
|
static int |
PREPARE
Prepare SQL using sp_prepare and sp_execute
|
static byte |
QUERY_PKT
TDS 4.2 or 7.0 Query packet.
|
static byte |
REPLY_PKT
TDS Reply packet.
|
private ParamInfo |
returnParam
The return parameter meta data object for the current procedure call.
|
private java.lang.Integer |
returnStatus
The stored procedure return status.
|
private java.lang.Object[] |
rowData
The array of column data objects in the current row.
|
static byte |
RPC_PKT
TDS Remote Procedure Call.
|
private int |
serverType
The make of SQL Server (Sybase/Microsoft).
|
private SharedSocket |
socket
The Shared network socket object.
|
static int |
SSL_CLIENT_FORCE_ENCRYPT
SSL Mode - Client requested force encryption.
|
static int |
SSL_ENCRYPT_LOGIN
SSL Mode - Login packet must be encrypted.
|
static int |
SSL_NO_ENCRYPT
SSL Mode - No server certificate installed.
|
static int |
SSL_SERVER_FORCE_ENCRYPT
SSL Mode - Server requested force encryption.
|
private int |
sslMode
Indicates type of SSL connection.
|
private static SSPIJNIClient |
sspiJNIClient
A reference to ntlm.SSPIJNIClient.
|
(package private) static int |
SYB_BIGINT
Sybase 15+ bigint.
|
(package private) static int |
SYB_BITNULL
Sybase nullable bit type.
|
(package private) static int |
SYB_DATETIME
Sybase date and time data types.
|
(package private) static int |
SYB_EXTCOLINFO
Sybase extended column meta data.
|
(package private) static int |
SYB_LONGDATA
Sybase char and binary > 255.
|
(package private) static int |
SYB_UNICODE
Sybase univarchar etc.
|
(package private) static int |
SYB_UNITEXT
Sybase 15+ unitext.
|
static byte |
SYBQUERY_PKT
TDS 5.0 Query packet.
|
private TdsCore.TableMetaData[] |
tables
The array of table names associated with this result.
|
private static byte |
TDS_ALTROW
TDS Computed result set data row token.
|
private static byte |
TDS_AUTH_TOKEN
TDS 7.0 NTLM authentication challenge token.
|
private static byte |
TDS_CAP_TOKEN
TDS 5.0 capabilities token.
|
private static byte |
TDS_CLOSE_TOKEN
TDS 5.0 Close token.
|
private static byte |
TDS_COLFMT_TOKEN
TDS 4.2 Column meta data token.
|
private static byte |
TDS_COLINFO_TOKEN
TDS Cursor results column infomation token.
|
private static byte |
TDS_COLNAME_TOKEN
TDS 4.2 Column names token.
|
private static byte |
TDS_COMP_NAMES_TOKEN
TDS Computed result set names token.
|
private static byte |
TDS_COMP_RESULT_TOKEN
TDS Computed result set token.
|
private static byte |
TDS_CONTROL_TOKEN
TDS control token.
|
private static byte |
TDS_DBRPC_TOKEN
TDS 5.0 RPC token.
|
private static byte |
TDS_DONE_TOKEN
TDS done token.
|
private static byte |
TDS_DONEINPROC_TOKEN
TDS done in procedure token.
|
private static byte |
TDS_DONEPROC_TOKEN
TDS done procedure token.
|
private static byte |
TDS_ENV_CHARSET
Environment change: charset changed.
|
private static byte |
TDS_ENV_DATABASE
Environment change: database changed.
|
private static byte |
TDS_ENV_LANG
Environment change: language changed.
|
private static byte |
TDS_ENV_LCID
Environment change: locale changed.
|
private static byte |
TDS_ENV_PACKSIZE
Environment change: network packet size changed.
|
private static byte |
TDS_ENV_SQLCOLLATION
Environment change: TDS 8 collation changed.
|
private static byte |
TDS_ENVCHANGE_TOKEN
TDS environment change token.
|
private static byte |
TDS_ERROR_TOKEN
TDS error result token.
|
private static byte |
TDS_INFO_TOKEN
TDS Information message token.
|
private static byte |
TDS_LANG_TOKEN
TDS 5.0 Language token.
|
private static byte |
TDS_LOGINACK_TOKEN
TDS Login acknowledgement token.
|
private static byte |
TDS_MSG50_TOKEN
TDS 5.0 message token.
|
private static byte |
TDS_OFFSETS_TOKEN
TDS DBLIB Offsets token.
|
private static byte |
TDS_OPTIONCMD_TOKEN
TDS Optional command token.
|
private static byte |
TDS_ORDER_TOKEN
TDS Order by columns token.
|
private static byte |
TDS_PARAM_TOKEN
TDS Output parameter value token.
|
private static byte |
TDS_PROCID
TDS Procedure ID token.
|
private static byte |
TDS_RESULT_TOKEN
TDS 5.0 Result set column meta data token.
|
private static byte |
TDS_RETURNSTATUS_TOKEN
TDS Procedure call return status token.
|
private static byte |
TDS_ROW_TOKEN
TDS Result set data row token.
|
private static byte |
TDS_TABNAME_TOKEN
TDS Table name token.
|
private static byte |
TDS5_DYNAMIC_TOKEN
TDS 5.0 Dynamic SQL token.
|
private static byte |
TDS5_PARAMFMT_TOKEN
TDS 5.0 parameter descriptor token.
|
private static byte |
TDS5_PARAMFMT2_TOKEN
TDS 5.0 Parameter format token.
|
private static byte |
TDS5_PARAMS_TOKEN
TDS 5.0 parameter value token.
|
private static byte |
TDS5_WIDE_RESULT
TSD 5.0 Wide result set token.
|
private static byte |
TDS7_COMP_RESULT_TOKEN
TDS 7.0 Computed Result set column meta data token.
|
private static byte |
TDS7_RESULT_TOKEN
TDS 7.0 Result set column meta data token.
|
private static java.util.HashMap |
tds8SpNames
Map of system stored procedures that have shortcuts in TDS8.
|
private int |
tdsVersion
The TDS version being supported by this connection.
|
static int |
TEMPORARY_STORED_PROCEDURES
Prepare SQL using temporary stored procedures
|
private static int |
TIMEOUT_CANCEL
Cancel has been generated by a query timeout.
|
static int |
UNPREPARED
Do not prepare SQL
|
Constructor and Description |
---|
TdsCore(ConnectionJDBC2 connection,
SQLDiagnostic messages)
Construct a TdsCore object.
|
Modifier and Type | Method and Description |
---|---|
(package private) void |
cancel(boolean timeout)
Send (only) one cancel packet to the server.
|
private void |
checkOpen()
Check that the connection is still open.
|
void |
cleanUp()
Releases parameter and result set data and metadata to free up memory.
|
(package private) void |
clearResponseQueue()
Empty the server response queue.
|
(package private) void |
close()
Close the
TdsCore connection object and associated streams. |
(package private) void |
closeConnection()
Inform the server that this connection is closing.
|
(package private) void |
consumeOneResponse()
Consume packets from the server response queue up to (and including) the
first response terminator.
|
(package private) byte[] |
enlistConnection(int type,
byte[] oleTranID)
Enlist the current connection in a distributed transaction or request the location of the
MSDTC instance controlling the server we are connected to.
|
(package private) void |
executeSQL(java.lang.String sql,
java.lang.String procName,
ParamInfo[] parameters,
boolean noMetaData,
int timeOut,
int maxRows,
int maxFieldSize,
boolean sendNow)
Send an SQL statement with optional parameters to the server.
|
private void |
executeSQL42(java.lang.String sql,
java.lang.String procName,
ParamInfo[] parameters,
boolean noMetaData,
boolean sendNow)
Execute SQL using TDS 4.2 protocol.
|
private void |
executeSQL50(java.lang.String sql,
java.lang.String procName,
ParamInfo[] parameters)
Execute SQL using TDS 5.0 protocol.
|
private void |
executeSQL70(java.lang.String sql,
java.lang.String procName,
ParamInfo[] parameters,
boolean noMetaData,
boolean sendNow)
Execute SQL using TDS 7.0 protocol.
|
(package private) java.sql.SQLException |
getBatchCounts(java.util.ArrayList counts,
java.sql.SQLException sqlEx)
Obtain the counts from a batch of SQL updates.
|
(package private) ColInfo[] |
getColumns()
Retrieve the current result set column descriptors.
|
private static java.lang.String |
getHostName()
Tries to figure out what client name we should identify ourselves as.
|
private static int |
getIntFromBuffer(byte[] buf,
int offset) |
private static byte[] |
getMACAddress(java.lang.String macString)
Converts a user supplied MAC address into a byte array.
|
SQLDiagnostic |
getMessages()
Returns the diagnostic chain for this instance.
|
(package private) boolean |
getMoreResults()
Get the next result set or update count from the TDS stream.
|
(package private) boolean |
getNextRow()
Retrieve the next data row from the result set.
|
(package private) ParamInfo[] |
getParameters()
Retrieve the parameter meta data from a Sybase prepare.
|
(package private) java.lang.Integer |
getReturnStatus()
Retrieve the return status for the current stored procedure.
|
(package private) java.lang.Object[] |
getRowData()
Retrieve the current result set data items.
|
private static int |
getShortFromBuffer(byte[] buf,
int offset) |
(package private) int |
getTdsVersion()
Retrieve the TDS protocol version.
|
(package private) int |
getUpdateCount()
Retrieve the update count from the current TDS token.
|
(package private) boolean |
isDataInResultSet()
Retrieve the status of result set.
|
(package private) boolean |
isEndOfResponse()
Retrieve the status of the response stream.
|
static boolean |
isPreparedProcedureName(java.lang.String procName)
Returns
true if the specified procName
is a sp_prepare or sp_prepexec handle; returns false
otherwise. |
(package private) boolean |
isResultSet()
Retrieve the status of the next result item.
|
(package private) boolean |
isRowData()
Retrieve the status of the next result item.
|
(package private) boolean |
isUpdateCount()
Retrieve the status of the next result item.
|
(package private) void |
login(java.lang.String serverName,
java.lang.String database,
java.lang.String user,
java.lang.String password,
java.lang.String domain,
java.lang.String charset,
java.lang.String appName,
java.lang.String progName,
java.lang.String wsid,
java.lang.String language,
java.lang.String macAddress,
int packetSize)
Login to the SQL Server.
|
(package private) java.lang.String |
microsoftPrepare(java.lang.String sql,
ParamInfo[] params,
boolean needCursor,
int resultSetType,
int resultSetConcurrency)
Prepares the SQL for use with Microsoft server.
|
(package private) void |
negotiateSSL(java.lang.String instance,
java.lang.String ssl)
Negotiate SSL settings with SQL 2000+ server.
|
private void |
nextToken()
Read the next TDS token from the response stream.
|
private void |
putLoginString(java.lang.String txt,
int len)
Write a TDS login packet string.
|
private int |
readPreLoginPacket()
Process the pre login acknowledgement from the server.
|
private void |
send42LoginPkt(java.lang.String serverName,
java.lang.String user,
java.lang.String password,
java.lang.String charset,
java.lang.String appName,
java.lang.String progName,
java.lang.String wsid,
java.lang.String language,
int packetSize)
TDS 4.2 Login Packet.
|
private void |
send50LoginPkt(java.lang.String serverName,
java.lang.String user,
java.lang.String password,
java.lang.String charset,
java.lang.String appName,
java.lang.String progName,
java.lang.String wsid,
java.lang.String language,
int packetSize)
TDS 5.0 Login Packet.
|
private void |
sendMSLoginPkt(java.lang.String serverName,
java.lang.String database,
java.lang.String user,
java.lang.String password,
java.lang.String domain,
java.lang.String appName,
java.lang.String progName,
java.lang.String wsid,
java.lang.String language,
java.lang.String macAddress,
int netPacketSize)
Send a TDS 7 login packet.
|
private void |
sendNtlmChallengeResponse(byte[] nonce,
java.lang.String user,
java.lang.String password,
java.lang.String domain)
Send the response to the NTLM authentication challenge.
|
private void |
sendPreLoginPacket(java.lang.String instance,
boolean forceEncryption)
Send the SQL Server 2000 pre login packet.
|
(package private) void |
setColumns(ColInfo[] columns)
Sets the column meta data.
|
private void |
setRowCountAndTextSize(int rowCount,
int textSize)
Sets the server row count (to limit the number of rows in a result set)
and text size (to limit the size of returned TEXT/NTEXT fields).
|
(package private) void |
startBatch()
Notifies the
TdsCore that a batch is starting. |
(package private) void |
submitSQL(java.lang.String sql)
Submit a simple SQL statement to the server and process all output.
|
(package private) java.lang.String |
sybasePrepare(java.lang.String sql,
ParamInfo[] params)
Creates a light weight stored procedure on a Sybase server.
|
(package private) void |
sybaseUnPrepare(java.lang.String procName)
Drops a Sybase temporary stored procedure.
|
private void |
tds4ColFormatToken()
Process a TDS 4.2 column format token.
|
private void |
tds4ColNamesToken()
Process a TDS 4.2 column names token.
|
private void |
tds5DynamicToken()
Process TDS5 dynamic SQL aknowledgements.
|
private void |
tds5ErrorToken()
Process a TDS 5 error or informational message.
|
private void |
tds5ParamFmt2Token()
Process TDS 5 Sybase 12+ Dynamic results parameter descriptor.
|
private void |
tds5ParamFmtToken()
Process TDS 5 Dynamic results parameter descriptors.
|
private void |
tds5ParamsToken()
Process TDS 5.0 Params Token.
|
private void |
tds5ResultToken()
Process a TDS 5.0 result set packet.
|
private void |
tds5WideResultToken()
Process Sybase 12+ wide result token which provides enhanced
column meta data.
|
private static java.lang.String |
tds7CryptPass(java.lang.String pw)
A very poor man's "encryption".
|
private void |
tds7ResultToken()
Process a TDS 7.0 result set token.
|
private void |
tdsCapabilityToken()
Processes a TDS 5.0 capability token.
|
private void |
tdsColumnInfoToken()
Process a column infomation token.
|
private void |
tdsControlToken()
Process a control token (function unknown).
|
private void |
tdsDoneToken()
Process a DONE, DONEINPROC or DONEPROC token.
|
private void |
tdsEnvChangeToken()
Process an environment change packet.
|
private void |
tdsErrorToken()
Process a TD4/TDS7 error or informational message.
|
private void |
tdsInvalidToken()
Report unsupported TDS token in input stream.
|
private void |
tdsLoginAckToken()
Process a login acknowledgement packet.
|
private void |
tdsNtlmAuthToken()
Process a NTLM Authentication challenge.
|
private void |
tdsOffsetsToken()
Process offsets token.
|
private void |
tdsOrderByToken()
Process an order by token.
|
private void |
tdsOutputParamToken()
Process output parameters.
|
private void |
tdsProcIdToken()
Process procedure ID token.
|
private void |
tdsReturnStatusToken()
Process stored procedure return status token.
|
private void |
tdsRowToken()
Process a row data token.
|
private void |
tdsTableNameToken()
Process a table name token.
|
private void |
wait(int timeOut)
Waits for the first byte of the server response.
|
public static final int MIN_PKT_SIZE
public static final int DEFAULT_MIN_PKT_SIZE_TDS70
public static final int MAX_PKT_SIZE
public static final int PKT_HDR_LEN
public static final byte QUERY_PKT
public static final byte LOGIN_PKT
public static final byte RPC_PKT
public static final byte REPLY_PKT
public static final byte CANCEL_PKT
public static final byte MSDTC_PKT
public static final byte SYBQUERY_PKT
public static final byte MSLOGIN_PKT
public static final byte NTLMAUTH_PKT
public static final byte PRELOGIN_PKT
public static final int SSL_ENCRYPT_LOGIN
public static final int SSL_CLIENT_FORCE_ENCRYPT
public static final int SSL_NO_ENCRYPT
public static final int SSL_SERVER_FORCE_ENCRYPT
private static final byte TDS5_PARAMFMT2_TOKEN
private static final byte TDS_LANG_TOKEN
private static final byte TDS5_WIDE_RESULT
private static final byte TDS_CLOSE_TOKEN
private static final byte TDS_OFFSETS_TOKEN
private static final byte TDS_RETURNSTATUS_TOKEN
private static final byte TDS_PROCID
private static final byte TDS7_RESULT_TOKEN
private static final byte TDS7_COMP_RESULT_TOKEN
private static final byte TDS_COLNAME_TOKEN
private static final byte TDS_COLFMT_TOKEN
private static final byte TDS_TABNAME_TOKEN
private static final byte TDS_COLINFO_TOKEN
private static final byte TDS_OPTIONCMD_TOKEN
private static final byte TDS_COMP_NAMES_TOKEN
private static final byte TDS_COMP_RESULT_TOKEN
private static final byte TDS_ORDER_TOKEN
private static final byte TDS_ERROR_TOKEN
private static final byte TDS_INFO_TOKEN
private static final byte TDS_PARAM_TOKEN
private static final byte TDS_LOGINACK_TOKEN
private static final byte TDS_CONTROL_TOKEN
private static final byte TDS_ROW_TOKEN
private static final byte TDS_ALTROW
private static final byte TDS5_PARAMS_TOKEN
private static final byte TDS_CAP_TOKEN
private static final byte TDS_ENVCHANGE_TOKEN
private static final byte TDS_MSG50_TOKEN
private static final byte TDS_DBRPC_TOKEN
private static final byte TDS5_DYNAMIC_TOKEN
private static final byte TDS5_PARAMFMT_TOKEN
private static final byte TDS_AUTH_TOKEN
private static final byte TDS_RESULT_TOKEN
private static final byte TDS_DONE_TOKEN
private static final byte TDS_DONEPROC_TOKEN
private static final byte TDS_DONEINPROC_TOKEN
private static final byte TDS_ENV_DATABASE
private static final byte TDS_ENV_LANG
private static final byte TDS_ENV_CHARSET
private static final byte TDS_ENV_PACKSIZE
private static final byte TDS_ENV_LCID
private static final byte TDS_ENV_SQLCOLLATION
private static final ParamInfo[] EMPTY_PARAMETER_INFO
getParameters()
callprivate static final byte DONE_MORE_RESULTS
private static final byte DONE_ERROR
private static final byte DONE_ROW_COUNT
static final byte DONE_CANCEL
private static final byte DONE_END_OF_RESPONSE
public static final int UNPREPARED
public static final int TEMPORARY_STORED_PROCEDURES
public static final int EXECUTE_SQL
public static final int PREPARE
static final int SYB_LONGDATA
static final int SYB_DATETIME
static final int SYB_BITNULL
static final int SYB_EXTCOLINFO
static final int SYB_UNICODE
static final int SYB_UNITEXT
static final int SYB_BIGINT
private static final int ASYNC_CANCEL
Statement.cancel()
.private static final int TIMEOUT_CANCEL
private static java.util.HashMap tds8SpNames
private static java.lang.String hostName
private static SSPIJNIClient sspiJNIClient
private final ConnectionJDBC2 connection
private int tdsVersion
private final int serverType
private final SharedSocket socket
private final RequestStream out
private final ResponseStream in
private boolean endOfResponse
private boolean endOfResults
private ColInfo[] columns
private java.lang.Object[] rowData
private TdsCore.TableMetaData[] tables
private TdsCore.TdsToken currentToken
private java.lang.Integer returnStatus
private ParamInfo returnParam
private ParamInfo[] parameters
private int nextParam
private final SQLDiagnostic messages
private boolean isClosed
private boolean ntlmAuthSSO
private boolean fatalError
private Semaphore connectionLock
private boolean inBatch
private int sslMode
private boolean cancelPending
private final int[] cancelMonitor
cancelPending
.TdsCore(ConnectionJDBC2 connection, SQLDiagnostic messages)
connection
- The connection which owns this object.messages
- The SQLDiagnostic messages chain.private void checkOpen() throws java.sql.SQLException
java.sql.SQLException
- if the connection is closedint getTdsVersion()
int
.ColInfo[] getColumns()
ColInfo[]
.void setColumns(ColInfo[] columns)
columns
- the column descriptor arrayParamInfo[] getParameters()
ParamInfo[]
.java.lang.Object[] getRowData()
Object
arrayvoid negotiateSSL(java.lang.String instance, java.lang.String ssl) throws java.io.IOException, java.sql.SQLException
instance
- The server instance name.ssl
- The SSL URL property value.java.io.IOException
java.sql.SQLException
void login(java.lang.String serverName, java.lang.String database, java.lang.String user, java.lang.String password, java.lang.String domain, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, java.lang.String macAddress, int packetSize) throws java.sql.SQLException
serverName
- server host namedatabase
- required databaseuser
- user namepassword
- user passworddomain
- Windows NT domain (or null)charset
- required server character setappName
- application nameprogName
- library namewsid
- workstation IDlanguage
- language to use for server messagesmacAddress
- client network MAC addresspacketSize
- required network packet sizejava.sql.SQLException
- if an error occursboolean getMoreResults() throws java.sql.SQLException
boolean
if the next item is a result set.java.sql.SQLException
- if an I/O or protocol error occurs; server errors
are queued up and not thrownboolean isResultSet()
boolean
true if the next item is a result set.boolean isRowData()
boolean
true if the next item is row data.boolean isUpdateCount()
boolean
true if the next item is an update count.int getUpdateCount()
int
.boolean isEndOfResponse()
boolean
true if the response has been entirely consumedvoid clearResponseQueue() throws java.sql.SQLException
java.sql.SQLException
- if an error occursvoid consumeOneResponse() throws java.sql.SQLException
java.sql.SQLException
- if an I/O or protocol error occurs; server errors
are queued up and not thrownboolean getNextRow() throws java.sql.SQLException
false
if at the end of results, true
otherwisejava.sql.SQLException
- if an I/O or protocol error occurs; server errors
are queued up and not thrownboolean isDataInResultSet() throws java.sql.SQLException
This does a quick read ahead and is needed to support the isLast() method in the ResultSet.
boolean
- true
if there is more data
in the result set.java.sql.SQLException
java.lang.Integer getReturnStatus()
Integer
.void closeConnection()
Used by Sybase a no-op for Microsoft.
void close() throws java.sql.SQLException
TdsCore
connection object and associated streams.java.sql.SQLException
void cancel(boolean timeout)
timeout
- true if this is a query timeout cancelvoid submitSQL(java.lang.String sql) throws java.sql.SQLException
sql
- the statement to executejava.sql.SQLException
- if an error is returned by the servervoid startBatch()
TdsCore
that a batch is starting. This is so
that it knows to use sp_executesql
for parameterized
queries (because there's no way to prepare a statement in the middle of
a batch).
Sets the inBatch
flag.
void executeSQL(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, int timeOut, int maxRows, int maxFieldSize, boolean sendNow) throws java.sql.SQLException
sql
- SQL statement to executeprocName
- stored procedure to execute or null
parameters
- parameters for call or nullnoMetaData
- suppress meta data for cursor callstimeOut
- optional query timeout or 0maxRows
- the maximum number of data rows to return (-1 to
leave unaltered)maxFieldSize
- the maximum number of bytes in a column to return
(-1 to leave unaltered)sendNow
- whether to send the request now or notjava.sql.SQLException
- if an error occursjava.lang.String microsoftPrepare(java.lang.String sql, ParamInfo[] params, boolean needCursor, int resultSetType, int resultSetConcurrency) throws java.sql.SQLException
sql
- the SQL statement to prepare.params
- the actual parameter listneedCursor
- true if a cursorprepare is requiredresultSetType
- value of the resultSetType parameter when
the Statement was createdresultSetConcurrency
- value of the resultSetConcurrency parameter
whenthe Statement was createdjava.sql.SQLException
java.lang.String sybasePrepare(java.lang.String sql, ParamInfo[] params) throws java.sql.SQLException
sql
- SQL statement to prepareparams
- the actual parameter listjava.sql.SQLException
- if an error occursvoid sybaseUnPrepare(java.lang.String procName) throws java.sql.SQLException
procName
- the temporary procedure namejava.sql.SQLException
- if an error occursbyte[] enlistConnection(int type, byte[] oleTranID) throws java.sql.SQLException
type
- set to 0 to request TM address or 1 to enlist connectionoleTranID
- the 40 OLE transaction IDbyte[]
array containing the TM address datajava.sql.SQLException
java.sql.SQLException getBatchCounts(java.util.ArrayList counts, java.sql.SQLException sqlEx) throws java.sql.SQLException
SQLException
s are chained
because there could be several errors reported in a batch.counts
- the ArrayList
containing the update countssqlEx
- any previous SQLException
(s) encounteredSQLException
or null
if no
error has yet occurredjava.sql.SQLException
- if the connection is closedprivate void putLoginString(java.lang.String txt, int len) throws java.io.IOException
java.io.IOException
private void sendPreLoginPacket(java.lang.String instance, boolean forceEncryption) throws java.io.IOException
Packet contains; netlib version, ssl mode, instance and process ID.
instance
- forceEncryption
- java.io.IOException
private int readPreLoginPacket() throws java.io.IOException
Packet contains; server version no, SSL mode, instance name and process id.
Server returns the following values for SSL mode:
java.io.IOException
private void send42LoginPkt(java.lang.String serverName, java.lang.String user, java.lang.String password, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, int packetSize) throws java.io.IOException
serverName
- server host nameuser
- user namepassword
- user passwordcharset
- required server character setappName
- application nameprogName
- program namewsid
- workstation IDlanguage
- server language for messagespacketSize
- required network packet sizejava.io.IOException
- if an I/O error occursprivate void send50LoginPkt(java.lang.String serverName, java.lang.String user, java.lang.String password, java.lang.String charset, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, int packetSize) throws java.io.IOException
serverName
- server host nameuser
- user namepassword
- user passwordcharset
- required server character setappName
- application nameprogName
- library namewsid
- workstation IDlanguage
- server language for messagespacketSize
- required network packet sizejava.io.IOException
- if an I/O error occursprivate void sendMSLoginPkt(java.lang.String serverName, java.lang.String database, java.lang.String user, java.lang.String password, java.lang.String domain, java.lang.String appName, java.lang.String progName, java.lang.String wsid, java.lang.String language, java.lang.String macAddress, int netPacketSize) throws java.io.IOException, java.sql.SQLException
This method incorporates the Windows single sign on code contributed by
Magendran Sathaiah. To invoke single sign on just leave the user name
blank or null. NB. This can only work if the driver is being executed on
a Windows PC and ntlmauth.dll
is on the path.
serverName
- server host namedatabase
- required databaseuser
- user namepassword
- user passworddomain
- Windows NT domain (or null
)appName
- application nameprogName
- program namewsid
- workstation IDlanguage
- server language for messagesmacAddress
- client network MAC addressnetPacketSize
- TDS packet size to usejava.io.IOException
- if an I/O error occursjava.sql.SQLException
private void sendNtlmChallengeResponse(byte[] nonce, java.lang.String user, java.lang.String password, java.lang.String domain) throws java.io.IOException
nonce
- The secret to hash with password.user
- The user name.password
- The user password.domain
- The Windows NT Dommain.java.io.IOException
private void nextToken() throws java.sql.SQLException
java.sql.SQLException
- if an I/O or protocol error occursprivate void tdsInvalidToken() throws java.io.IOException, ProtocolException
java.io.IOException
ProtocolException
private void tds5ParamFmt2Token() throws java.io.IOException, ProtocolException
When returning output parameters this token will be followed by a TDS5_PARAMS_TOKEN with the actual data.
java.io.IOException
ProtocolException
private void tds5WideResultToken() throws java.io.IOException, ProtocolException
java.io.IOException
ProtocolException
private void tdsReturnStatusToken() throws java.io.IOException, java.sql.SQLException
java.io.IOException
java.sql.SQLException
private void tdsProcIdToken() throws java.io.IOException
Used by DBLIB to obtain the object id of a stored procedure.
java.io.IOException
private void tdsOffsetsToken() throws java.io.IOException
Used by DBLIB to return the offset of various keywords in a statement.
This saves the client from having to parse a SQL statement. Enabled with
"set offsets from on"
.
java.io.IOException
private void tds7ResultToken() throws java.io.IOException, ProtocolException, java.sql.SQLException
java.io.IOException
ProtocolException
java.sql.SQLException
private void tds4ColNamesToken() throws java.io.IOException
Note: Will be followed by a COL_FMT token.
java.io.IOException
private void tds4ColFormatToken() throws java.io.IOException, ProtocolException
java.io.IOException
ProtocolException
private void tdsTableNameToken() throws java.io.IOException, ProtocolException
Sent by select for browse or cursor functions.
java.io.IOException
ProtocolException
private void tdsColumnInfoToken() throws java.io.IOException, ProtocolException
Sent by select for browse or cursor functions.
java.io.IOException
ProtocolException
private void tdsOrderByToken() throws java.io.IOException
Sent to describe columns in an order by clause.
java.io.IOException
private void tdsErrorToken() throws java.io.IOException
java.io.IOException
private void tdsOutputParamToken() throws java.io.IOException, ProtocolException, java.sql.SQLException
java.io.IOException
ProtocolException
java.sql.SQLException
private void tdsLoginAckToken() throws java.io.IOException
java.io.IOException
private void tdsControlToken() throws java.io.IOException
java.io.IOException
private void tdsRowToken() throws java.io.IOException, ProtocolException
java.io.IOException
ProtocolException
private void tds5ParamsToken() throws java.io.IOException, ProtocolException, java.sql.SQLException
The type of the preceding token is inspected to determine if this packet contains output parameter result data. A TDS5_PARAMFMT2_TOKEN is sent before this one in Sybase 12 to introduce output parameter results. A TDS5_PARAMFMT_TOKEN is sent before this one to introduce extended error information.
java.io.IOException
ProtocolException
java.sql.SQLException
private void tdsCapabilityToken() throws java.io.IOException, ProtocolException
Sent after login to describe the server's capabilities.
java.io.IOException
- if an I/O error occursProtocolException
private void tdsEnvChangeToken() throws java.io.IOException, java.sql.SQLException
java.io.IOException
java.sql.SQLException
private void tds5ErrorToken() throws java.io.IOException
java.io.IOException
private void tds5DynamicToken() throws java.io.IOException
java.io.IOException
private void tds5ParamFmtToken() throws java.io.IOException, ProtocolException
With Sybase 12+ this has been superseded by the TDS5_PARAMFMT2_TOKEN except when used to return extended error information.
java.io.IOException
ProtocolException
private void tdsNtlmAuthToken() throws java.io.IOException, ProtocolException
java.io.IOException
ProtocolException
private static int getIntFromBuffer(byte[] buf, int offset)
private static int getShortFromBuffer(byte[] buf, int offset)
private void tds5ResultToken() throws java.io.IOException, ProtocolException
java.io.IOException
ProtocolException
private void tdsDoneToken() throws java.io.IOException
java.io.IOException
private void executeSQL42(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, boolean sendNow) throws java.io.IOException, java.sql.SQLException
sql
- The SQL statement to execute.procName
- Stored procedure to execute or null.parameters
- Parameters for call or null.noMetaData
- Suppress meta data for cursor calls.java.sql.SQLException
java.io.IOException
private void executeSQL50(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters) throws java.io.IOException, java.sql.SQLException
sql
- The SQL statement to execute.procName
- Stored procedure to execute or null.parameters
- Parameters for call or null.java.sql.SQLException
java.io.IOException
public static boolean isPreparedProcedureName(java.lang.String procName)
true
if the specified procName
is a sp_prepare or sp_prepexec handle; returns false
otherwise.procName
- Stored procedure to execute or null
.true
if the specified procName
is a sp_prepare or sp_prepexec handle; false
otherwise.private void executeSQL70(java.lang.String sql, java.lang.String procName, ParamInfo[] parameters, boolean noMetaData, boolean sendNow) throws java.io.IOException, java.sql.SQLException
sql
- The SQL statement to execute.procName
- Stored procedure to execute or null
.parameters
- Parameters for call or null
.noMetaData
- Suppress meta data for cursor calls.java.sql.SQLException
java.io.IOException
private void setRowCountAndTextSize(int rowCount, int textSize) throws java.sql.SQLException
rowCount
- the number of rows to return or 0 for no limit or -1 to
leave as istextSize
- the maximum number of bytes in a TEXT column to return
or -1 to leave as isjava.sql.SQLException
- if an error is returned by the serverprivate void wait(int timeOut) throws java.io.IOException, java.sql.SQLException
timeOut
- the timeout period in seconds or 0java.io.IOException
java.sql.SQLException
public void cleanUp()
TdsCore
is cached for reuse.public SQLDiagnostic getMessages()
private static byte[] getMACAddress(java.lang.String macString)
macString
- the MAC address as a hex stringbyte[]
private static java.lang.String getHostName()
private static java.lang.String tds7CryptPass(java.lang.String pw)
pw
- password to encryptGenerated on August 21 2012