SqlRemoteConnection
SqlRemoteConnection 为执行 SQL 查询提供远程数据库连接。
类定义
public class SqlRemoteConnection implements SqlConnection, java.io.Closeable
{
public static class OpenParameters
{
public String host = null;
public int port;
public String[] nodes;
public int nReplicas;
public ReplicationType replType;
public int maxAttempts;
public int txBufSize;
public int connectTimeout;
public int readTimeout;
public int compressionLevel;
public Database.SSLParameters sslParameters;
public String user;
public String password;
public OpenParameters()
{
host = null;
port = 0;
nodes = null;
nReplicas = 1;
replType = ReplicationType.SQLReplication;
maxAttempts = 10;
txBufSize = 64*1024;
connectTimeout = 2000;
readTimeout = 1200*1000;
compressionLevel = 0;
sslParameters = null;
user = null;
password = null;
}
}
public SqlRemoteConnection(OpenParameters params)
{
if (params.host != null)
{
engine = open(params.host, params.port, params.maxAttempts,
params.txBufSize, params.connectTimeout, params.readTimeout,
params.sslParameters, params.user, params.password );
} else if (params.nodes != null)
{
engine = openDistributed(params.nodes, params.nReplicas, params.replType.ordinal(),
params.maxAttempts, params.txBufSize, params.connectTimeout, params.readTimeout,
params.sslParameters, params.user, params.password);
} else
{
throw new IllegalArgumentException("host or nodes should be set in OpenParameters");
}
}
/**
* Constructor of the remote database connection.
* @param host hostname of xsql server
* @param port port of xsql server
* @param maxAttempts maximal attempts of connection to server, interval between
* each connection attempt is one second, so totally connection will be performed
* during maxAttempts seconds
*/
public SqlRemoteConnection(String host, int port, int maxAttempts)
{
engine = open(host, port, maxAttempts, 64*1024, 2000, 1200*1000, null, null, null);
}
/**
* Constructor of the remote database connection.
* @param host hostname of xsql server
* @param port port of xsql server
* @param maxAttempts maximal attempts of connection to server, interval between
* each connection attempt is one second, so totally connection will be performed
* during maxAttempts seconds
* @param txBufSize size of internal transmit buffer in bytes. Required to serialize
* query or statement data
*/
public SqlRemoteConnection(String host, int port, int maxAttempts, int txBufSize)
{
engine = open(host, port, maxAttempts, txBufSize, 2000, 1200*1000, null, null, null);
}
/**
* Constructor of the remote database connection.
* @param host hostname of xsql server
* @param port port of xsql server
* @param maxAttempts maximal attempts of connection to server, interval between
* each connection attempt is one second, so totally connection will be performed
* during maxAttempts seconds
* @param txBufSize size of internal transmit buffer in bytes. Required to serialize
* query or statement data
* @param connectTimeout timeout for each connect attempt in milliseconds, so totally
* connection can take up to connectTimeout*maxConnectionAttempts milliseconds
* @param readTimeout timeout for read operations in milliseconds
*/
public SqlRemoteConnection(String host, int port, int maxAttempts, int txBufSize, int connectTimeout,
int readTimeout)
{
engine = open(host, port, maxAttempts, txBufSize, connectTimeout, readTimeout, null, null, null);
}
public enum ReplicationType { SQLReplication, HAReplication };
/**
* Constructor of the distributed database connection.
* @param nodes database nodes (each entry should have format "ADDRESS:PORT")
* @param nReplicas redundancy level
* @param replType replication method
* @param maxAttempts maximal attempts of connection to server, interval between
* each connection attempt is one second, so totally connection will be performed
* during maxAttempts seconds
* @param txBufSize size of internal transmit buffer in bytes. Required to serialize
* query or statement data
*/
public SqlRemoteConnection(String[] nodes, int nReplicas, ReplicationType replType, int maxAttempts,
int txBufSize)
{
engine = openDistributed(nodes, nReplicas, replType.ordinal(), maxAttempts, txBufSize,
2000, 1200*1000, null, null, null);
}
/**
* Constructor of the distributed database connection.
* @param nodes database nodes (each entry should have format "ADDRESS:PORT")
*/
public SqlRemoteConnection(String[] nodes)
{
engine = openDistributed(nodes, 1, ReplicationType.SQLReplication.ordinal(), 10, 64*1024,
2000, 1200*1000, null, null, null);
}
/**
* Constructor of the distributed database connection.
* @param nodes database nodes (each entry should have format "ADDRESS:PORT")
* @param nReplicas redundancy level
* @param replType replication method
* @param maxAttempts maximal attempts of connection to server, interval between
* each connection attempt is one second, so totally connection will be performed
* during maxAttempts seconds
* @param txBufSize size of internal transmit buffer in bytes. Required to serialize
* query or statement data
* @param connectTimeout timeout for each connect attempt in milliseconds, so totally
* connection can take up to connectTimeout*maxConnectionAttempts milliseconds
* @param readTimeout timeout for read operations in milliseconds
*/
public SqlRemoteConnection(String[] nodes, int nReplicas, ReplicationType replType, int maxAttempts,
int txBufSize, int connectTimeout, int readTimeout)
{
engine = openDistributed(nodes, nReplicas, replType.ordinal(), maxAttempts, txBufSize,
connectTimeout, readTimeout, null, null, null);
}
/**
* Execute SQL query.
* @param query SQL query with '?' used as parameter placeholder.
* @return cursor through selected tuples
*/
public SqlResultSet executeQuery(String query, Object... params)
{
if (result != null)
{
result.close();
}
return result = new SqlResultSet(this, executeQuery(engine, query, params));
}
/**
* Execute SQL update statement
* @param stmt SQL DML statement with '?' used as parameter placeholder.
* @return number of affected (updated, inserted, deleted) records
*/
public int executeStatement(String stmt, Object... params)
{
return executeStatement(engine, stmt, params);
}
public void detachResultSet(SqlResultSet res)
{
result = null;
}
/**
* Close this connection.
*/
public void disconnect()
{
if (engine != 0)
{
if (result != null)
{
result.close();
result = null;
}
close(engine);
engine = 0;
}
}
/**
* Close this connection. The same as disconnect.
*/
public void close()
{
disconnect();
}
private SqlResultSet result;
private long engine;
private native long open(String host, int port, int maxAttempts, int txBufSize,
int connectTimeout, int readTimeout,
Database.SSLParameters params, String user, String password);
private native long openDistributed(String[] nodes, int nReplicas, int replType, int maxAttempts,
int txBufSize, int connectTimeout, int readTimeout,
Database.SSLParameters params, String user, String password);
private native long executeQuery(long engine, String query, Object[] params);
private native int executeStatement(long engine, String stmt, Object[] params);
private native void close(long engine);
};