時系列データベースKDDBとJavaを組み合わせた使用説明--3 KDDB JDBCベースの書き込み実装
3562 ワード
KDBソースコードにはKDBベースのJDBC実装も提供されているが、実はKDBのJDBC実装はKDBベースの下位c.java実装のパッケージであり、JDBC向けのフレンドリーインタフェースを提供している.しかし、個人的にはJDBCインタフェースを使う傾向はありません.多くの機能は実現されていません.例えば、最も重要なBatch機能は、すべてのsqlが1つ1つ実行されなければなりません.ここではJDBCでKDDBにアクセスし、Apache Commons PoolでSocket接続をキャッシュする方法について簡単に説明します.
KDBJDBCserviceはKDBへのデータ挿入を実現する:
KDBJDBCserviceはKDBへのデータ挿入を実現する:
/**
*
*/
package kx;
import java.sql.Connection;
import java.sql.PreparedStatement;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.pool2.ObjectPool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
/**
* @author cloudlu
*
*/
@Log4j2
@Service
public class KDBJDBCService {
@Autowired
@Qualifier("jdbcPool")
private ObjectPool pool;
/**
* insert data to specified table
*
* @param data
* : data object save to kdb
* @return
*/
public boolean insertKDBData(final KDBData data) {
Connection con = null;
try {
con = pool.borrowObject();
final PreparedStatement insert = con
.prepareStatement("q){`t insert 0N!a::x}");
insert.setTime(1, data.getTime());
insert.setString(2, data.getSym());
insert.setDouble(3, data.getPrice());
insert.setInt(4, data.getSize());
insert.setBoolean(5, data.isStop());
insert.setString(6, String.valueOf(data.getCond()));
insert.setString(7, String.valueOf(data.getEx()));
insert.executeUpdate();
return true;
} catch (final Exception e) {
LOG.error("fail to insert data", e);
} finally {
if (null != con) {
try {
pool.returnObject(con);
} catch (final Exception e) {
LOG.error("fail to return con back to poll", e);
}
}
}
return false;
}
}
@Qualifier("jdbcPool") spring : new GenericObjectPool(new KDBJDBCPoolFactory()))
KDBJDBCPoolFactory Socket :
package kx;
import java.sql.Connection;
import java.sql.DriverManager;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class KDBJDBCPoolFactory extends BasePooledObjectFactory {
@Autowired
@Qualifier("ticketPlant")
private KDBServer server;
@Override
public Connection create() throws Exception {
Class.forName(JDBC.class.getName());
final Connection localConnection = DriverManager.getConnection(
"jdbc:q:" + server.getHost() + ":" + server.getPort(),
server.getUsername(), server.getPassword());
return localConnection;
}
@Override
public PooledObject wrap(final Connection con) {
return new DefaultPooledObject(con);
}
}