package io.mycat.backend.jdbc.sequoiadb; import java.net.UnknownHostException; import java.sql.Array; import java.sql.Blob; import java.sql.CallableStatement; import java.sql.Clob; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.NClob; import java.sql.PreparedStatement; import java.sql.SQLClientInfoException; import java.sql.SQLException; import java.sql.SQLWarning; import java.sql.SQLXML; import java.sql.Savepoint; import java.sql.Statement; import java.sql.Struct; import java.util.Map; import java.util.Properties; import java.util.concurrent.Executor; import com.sequoiadb.base.CollectionSpace; import com.sequoiadb.base.Sequoiadb; import com.sequoiadb.exception.BaseException; /** * 功能详细描述 * @author sohudo[http://blog.csdn.net/wind520] * @create 2014年12月19日 下午6:50:23 * @version 0.0.1 */ public class SequoiaConnection implements Connection { //private String url = null; private Sequoiadb mc = null; private boolean isClosed = false; private String _schema; private Properties _clientInfo; public SequoiaConnection(String url, String db) throws UnknownHostException { // this.url = url; this._schema = db; try { mc = new Sequoiadb(url, "", ""); } catch (BaseException e) { throw new IllegalArgumentException("Failed to connect to database: " + url + ", error description" + e.getErrorType()); } } public CollectionSpace getDB() { if (this._schema!=null) { if (mc.isCollectionSpaceExist(this._schema)) return this.mc.getCollectionSpace(this._schema); else return this.mc.createCollectionSpace(this._schema); } else return null; } @Override public <T> T unwrap(Class<T> iface) throws SQLException { return null; } @Override public boolean isWrapperFor(Class<?> iface) throws SQLException { return false; } @Override public String nativeSQL(String sql) throws SQLException { return sql; } @Override public void setAutoCommit(boolean autoCommit) throws SQLException { if (!autoCommit) throw new RuntimeException("autoCommit has to be on"); } @Override public boolean getAutoCommit() throws SQLException { return true;//return false; } @Override public void commit() throws SQLException { } @Override public void rollback() throws SQLException { //throw new RuntimeException("can't rollback"); } @Override public void close() throws SQLException { this.mc=null; isClosed=true; } @Override public boolean isClosed() throws SQLException { return isClosed;//return false; } @Override public DatabaseMetaData getMetaData() throws SQLException { // 获取一个 DatabaseMetaData 对象,该对象包含关于此 Connection 对象所连接的数据库的元数据。 return null; } @Override public void setReadOnly(boolean readOnly) throws SQLException { //if (readOnly) // throw new RuntimeException("no read only mode"); } @Override public boolean isReadOnly() throws SQLException { // 查询此 Connection 对象是否处于只读模式。 return false; } @Override public void setCatalog(String catalog) throws SQLException { this._schema=catalog; } @Override public String getCatalog() throws SQLException { // 获取此 Connection 对象的当前目录名称 return this._schema; } @Override public void setTransactionIsolation(int level) throws SQLException { //throw new RuntimeException("no TransactionIsolation"); } @Override public int getTransactionIsolation() throws SQLException { return 0; } @Override public SQLWarning getWarnings() throws SQLException { return null;//throw new RuntimeException("should do get last error"); } @Override public void clearWarnings() throws SQLException { } @Override public Map<String, Class<?>> getTypeMap() throws SQLException { return null; } @Override public void setTypeMap(Map<String, Class<?>> map) throws SQLException { } @Override public void setHoldability(int holdability) throws SQLException { // 将使用此 Connection 对象创建的 ResultSet 对象的默认可保存性 (holdability) 更改为给定可保存性。 } @Override public int getHoldability() throws SQLException { // 获取使用此 Connection 对象创建的 ResultSet 对象的当前可保存性。 return 0; } @Override public Savepoint setSavepoint() throws SQLException { return null;//throw new RuntimeException("no savepoints"); } @Override public Savepoint setSavepoint(String name) throws SQLException { return null; } @Override public void rollback(Savepoint savepoint) throws SQLException { // throw new RuntimeException("can't rollback"); } @Override public void releaseSavepoint(Savepoint savepoint) throws SQLException { } @Override public Statement createStatement() throws SQLException { // 创建一个 Statement 对象来将 SQL 语句发送到数据库。 return createStatement(0, 0, 0); } @Override public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException { // 创建一个 Statement 对象,该对象将生成具有给定类型和并发性的 ResultSet 对象。 return createStatement(resultSetType, resultSetConcurrency, 0); } @Override public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { // 创建一个 Statement 对象,该对象将生成具有给定类型、并发性和可保存性的 ResultSet 对象。 return new SequoiaStatement(this, resultSetType, resultSetConcurrency, resultSetHoldability); } @Override public CallableStatement prepareCall(String sql) throws SQLException { return prepareCall(sql, 0, 0, 0); } @Override public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { return prepareCall(sql, resultSetType, resultSetConcurrency, 0); } @Override public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { //return null; throw new RuntimeException("CallableStatement not supported"); } @Override public PreparedStatement prepareStatement(String sql) throws SQLException { return prepareStatement(sql, 0, 0, 0); } @Override public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { return prepareStatement(sql, resultSetType, resultSetConcurrency, 0); } @Override public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { return new SequoiaPreparedStatement(this, resultSetType, resultSetConcurrency, resultSetHoldability,sql); } @Override public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException { return null; } @Override public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException { return null; } @Override public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException { return null; } @Override public Clob createClob() throws SQLException { return null; } @Override public Blob createBlob() throws SQLException { return null; } @Override public NClob createNClob() throws SQLException { return null; } @Override public SQLXML createSQLXML() throws SQLException { return null; } @Override public boolean isValid(int timeout) throws SQLException { return getDB() != null; } @Override public void setClientInfo(String name, String value) throws SQLClientInfoException { this._clientInfo.put(name, value); } @Override public void setClientInfo(Properties properties) throws SQLClientInfoException { this._clientInfo = properties; } @Override public String getClientInfo(String name) throws SQLException { // 返回通过名称指定的客户端信息属性的值。 return (String)this._clientInfo.get(name); } @Override public Properties getClientInfo() throws SQLException { // 返回一个列表,它包含驱动程序支持的每个客户端信息属性的名称和当前值。 return this._clientInfo; } @Override public Array createArrayOf(String typeName, Object[] elements) throws SQLException { return null; } @Override public Struct createStruct(String typeName, Object[] attributes) throws SQLException { return null; } @Override public void setSchema(String schema) throws SQLException { //this._schema=schema; } @Override public String getSchema() throws SQLException { return this._schema; } @Override public void abort(Executor executor) throws SQLException { } @Override public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException { } @Override public int getNetworkTimeout() throws SQLException { return 0; } }