You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
382 lines
11 KiB
382 lines
11 KiB
/****************************************************************************** |
|
* |
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
|
* All rights reserved. |
|
* |
|
******************************************************************************/ |
|
|
|
package com.fourelementscapital.db.mariadb; |
|
|
|
import java.sql.Connection; |
|
import java.sql.PreparedStatement; |
|
import java.sql.ResultSet; |
|
import java.sql.Statement; |
|
import java.util.Iterator; |
|
import java.util.List; |
|
import java.util.Vector; |
|
|
|
import org.apache.logging.log4j.Logger; |
|
import org.apache.logging.log4j.LogManager; |
|
|
|
import com.fourelementscapital.db.ContractDB; |
|
import com.fourelementscapital.db.GeneralUtilDB; |
|
import com.fourelementscapital.db.vo.Contract; |
|
import com.fourelementscapital.db.vo.Strategy; |
|
|
|
/** |
|
* Contract MySQL DAO implementation |
|
*/ |
|
public class ContractDBMariaDB extends ContractDB { |
|
|
|
private Logger log=LogManager.getLogger(ContractDB.class.getName()); |
|
|
|
private String tablename; |
|
|
|
|
|
/** |
|
* Constructor |
|
* @param tablename table name |
|
*/ |
|
public ContractDBMariaDB(String tablename){ |
|
this.tablename=tablename; |
|
} |
|
|
|
/** |
|
* Constructor |
|
*/ |
|
public ContractDBMariaDB(){ |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void updateRecords(Connection con,Vector records) throws Exception { |
|
|
|
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+" (cdate,contract,val) VALUES(?,?,?) "); |
|
PreparedStatement st1=con.prepareStatement("SELECT cdate FROM "+this.tablename+" WHERE cdate=? AND contract=?"); |
|
PreparedStatement st2=con.prepareStatement("UPDATE "+this.tablename+" SET val=? WHERE cdate=? AND contract=?"); |
|
|
|
log.debug("records: size:"+records.size()); |
|
for(Iterator<Contract> i=records.iterator();i.hasNext();){ |
|
|
|
Contract contract=i.next(); |
|
log.debug("contract: date():"+contract.getCdate()); |
|
|
|
st1.setDate(1, new java.sql.Date(contract.getCdate().getTime())); |
|
st1.setString(2, contract.getName()); |
|
if(!st1.executeQuery().next()){ |
|
st.setDate(1, new java.sql.Date(contract.getCdate().getTime())); |
|
st.setString(2, contract.getName()); |
|
st.setDouble(3, contract.getValue()); |
|
st.executeUpdate(); |
|
}else{ |
|
st2.setDouble(1, contract.getValue()); |
|
st2.setDate(2, new java.sql.Date(contract.getCdate().getTime())); |
|
st2.setString(3, contract.getName()); |
|
st2.executeUpdate(); |
|
} |
|
} |
|
st1.close(); |
|
st2.close(); |
|
st.close(); |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void addRecords(Connection con,Vector records) throws Exception { |
|
log.debug("records: size:"+records.size()); |
|
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+"(cdate,contract,val) VALUES(?,?,?) "); |
|
for(Iterator<Contract> i=records.iterator();i.hasNext();){ |
|
Contract contract=i.next(); |
|
log.debug("contract: date():"+contract.getCdate()); |
|
log.debug("contract: sqldbs():"+new java.sql.Date(contract.getCdate().getTime())); |
|
log.debug("contract: this.tablename():"+this.tablename); |
|
|
|
st.setDate(1, new java.sql.Date(contract.getCdate().getTime())); |
|
st.setString(2, contract.getName()); |
|
st.setDouble(3, contract.getValue()); |
|
st.executeUpdate(); |
|
} |
|
st.close(); |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void createTable(Connection con, int decimalpoint) throws Exception { |
|
|
|
String query="CREATE TABLE IF NOT EXISTS "+this.tablename +" ( "; |
|
query+="cdate datetime NOT NULL ,"; |
|
query+="contract varchar(50), "; |
|
query+="val numeric(20,"+decimalpoint+") "; |
|
query+=") "; |
|
|
|
//System.out.println("ContractDB.class: query:"+query); |
|
|
|
Statement st=con.createStatement(); |
|
st.execute(query); |
|
st.close(); |
|
} |
|
|
|
|
|
/* |
|
* implemented but that of changing to different field. |
|
public void createNewContract(Connection con,String subtablename, String contract) throws Exception { |
|
|
|
String query="IF NOT EXISTS (select * from sysobjects where id = object_id('asset_contracts') and OBJECTPROPERTY(id, 'IsUserTable') = 1) "; |
|
query+="BEGIN "; |
|
query+="CREATE TABLE asset_contracts ( "; |
|
query+="tablename varchar(50) ,"; |
|
query+="contract varchar(50) "; |
|
query+=") "; |
|
query+="END "; |
|
|
|
Statement st=con.createStatement(); |
|
st.execute(query); |
|
st.close(); |
|
|
|
PreparedStatement st1=con.prepareStatement("INSERT into asset_contracts(tablename,contract) VALUES(?,?) "); |
|
st1.setString(1,subtablename); |
|
st1.setString(2, contract); |
|
st1.executeUpdate(); |
|
st1.close(); |
|
|
|
} |
|
|
|
|
|
public List getCustomContracts(Connection con,String subtablename) throws Exception { |
|
|
|
String query="select * from sysobjects where id = object_id('asset_contracts') and OBJECTPROPERTY(id, 'IsUserTable') = 1 "; |
|
|
|
Vector rtn=new Vector(); |
|
Statement st=con.createStatement(); |
|
ResultSet rs=st.executeQuery(query); |
|
if(rs.next()){ |
|
Statement st1=con.createStatement(); |
|
ResultSet rs1=st1.executeQuery("select contract from asset_contracts WHERE tablename='"+subtablename+"'"); |
|
while(rs1.next()){ |
|
rtn.add(rs.getString("contract")); |
|
} |
|
rs1.close(); |
|
st1.close(); |
|
} |
|
rs.close(); |
|
st.close(); |
|
return rtn; |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void updateSValRecords(Connection con,Vector records) throws Exception { |
|
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+"(cdate,contract,val,sval) VALUES(?,?,?,?) "); |
|
PreparedStatement st1=con.prepareStatement("SELECT cdate FROM "+this.tablename+" WHERE cdate=? AND contract=?"); |
|
PreparedStatement st2=con.prepareStatement("UPDATE "+this.tablename+" SET val=?,sval=? WHERE cdate=? AND contract=?"); |
|
for(Iterator<Strategy> i=records.iterator();i.hasNext();){ |
|
|
|
Strategy contract=i.next(); |
|
st1.setDate(1, new java.sql.Date(contract.getCdate().getTime())); |
|
st1.setString(2, contract.getName()); |
|
if(!st1.executeQuery().next()){ |
|
st.setDate(1, new java.sql.Date(contract.getCdate().getTime())); |
|
st.setString(2, contract.getName()); |
|
if(contract.getSvalue()!=null){ |
|
st.setObject(3, null); |
|
}else{ |
|
st.setDouble(3, contract.getValue()); |
|
} |
|
st.setString(4, contract.getSvalue()); |
|
st.executeUpdate(); |
|
}else{ |
|
if(contract.getSvalue()!=null){ |
|
st2.setObject(1, null); |
|
}else{ |
|
st2.setDouble(1, contract.getValue()); |
|
} |
|
st2.setString(2, contract.getSvalue()); |
|
st2.setDate(3, new java.sql.Date(contract.getCdate().getTime())); |
|
st2.setString(4, contract.getName()); |
|
st2.executeUpdate(); |
|
} |
|
} |
|
st1.close(); |
|
st2.close(); |
|
st.close(); |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void addSValRecords(Connection con,Vector records) throws Exception { |
|
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+"(cdate,contract,sval) VALUES(?,?,?) "); |
|
for(Iterator<Strategy> i=records.iterator();i.hasNext();){ |
|
Strategy contract=i.next(); |
|
st.setDate(1, new java.sql.Date(contract.getCdate().getTime())); |
|
st.setString(2, contract.getName()); |
|
//st.setDouble(3, contract.getValue()); |
|
st.setString(3, contract.getSvalue()); |
|
st.executeUpdate(); |
|
} |
|
st.close(); |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void createSValTable(Connection con, int decimalpoint) throws Exception { |
|
|
|
String query="CREATE TABLE IF NOT EXISTS "+this.tablename +" ( "; |
|
query+="cdate datetime NOT NULL ,"; |
|
query+="contract varchar(50), "; |
|
query+="sval varchar(50), "; |
|
query+="val numeric(20,"+decimalpoint+") "; |
|
query+=") "; |
|
|
|
//System.out.println("ContractDB.class: query:"+query); |
|
|
|
Statement st=con.createStatement(); |
|
st.execute(query); |
|
st.close(); |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public int checkSValueField(Connection con) throws Exception { |
|
String query="select count(*) as cnum from "+this.tablename+" where val is not null"; |
|
Statement st=con.createStatement(); |
|
ResultSet rs=st.executeQuery(query); |
|
int valcount=1; |
|
if(rs.next()){ |
|
valcount=rs.getInt("cnum"); |
|
} |
|
rs.close(); |
|
st.close(); |
|
return valcount; |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public int countRecords(Connection con) throws Exception { |
|
String query="select count(*) as cnum from "+this.tablename+" "; |
|
Statement st=con.createStatement(); |
|
ResultSet rs=st.executeQuery(query); |
|
int valcount=1; |
|
if(rs.next()){ |
|
valcount=rs.getInt("cnum"); |
|
} |
|
rs.close(); |
|
st.close(); |
|
return valcount; |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public boolean checkSValueFieldTypeExist(Connection con) throws Exception { |
|
String query="SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"+this.tablename+"' AND COLUMN_NAME = 'sval' AND table_schema = '"+getDb()+"'"; |
|
Statement st=con.createStatement(); |
|
ResultSet rs=st.executeQuery(query); |
|
boolean exist=false; |
|
if(rs.next()){ |
|
exist=true; |
|
} |
|
return exist; |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public List getContractTitles(Connection con) throws Exception { |
|
Vector rtn=new Vector(); |
|
Statement st=con.createStatement(); |
|
ResultSet rs=st.executeQuery("SELECT distinct contract FROM "+this.tablename); |
|
while(rs.next()){ |
|
rtn.add(rs.getString("contract")); |
|
} |
|
rs.close(); |
|
st.close(); |
|
return rtn; |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public List getContractTitles(Connection con, String datequery) throws Exception { |
|
Vector rtn=new Vector(); |
|
Statement st=con.createStatement(); |
|
datequery=GeneralUtilDB.convertFromSQL(datequery); |
|
ResultSet rs=st.executeQuery("SELECT distinct contract FROM "+this.tablename+((datequery!=null && !datequery.equals(""))? " WHERE "+datequery:"")); |
|
while(rs.next()){ |
|
rtn.add(rs.getString("contract")); |
|
} |
|
rs.close(); |
|
st.close(); |
|
return rtn; |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public void updateMasterTable(Connection con,String mtable,String fieldname) throws Exception { |
|
|
|
String query="CREATE TABLE IF NOT EXISTS asset_master ( "; |
|
query+="commodity varchar(50) NOT NULL ,"; |
|
query+="commodity_field varchar(100), "; |
|
query+="commodity_fieldoriginal varchar(100) "; |
|
query+=") "; |
|
|
|
|
|
Statement st=con.createStatement(); |
|
st.execute(query); |
|
st.close(); |
|
|
|
PreparedStatement st1=con.prepareStatement("SELECT commodity FROM asset_master WHERE commodity=? AND commodity_field=?"); |
|
PreparedStatement st2=con.prepareStatement("INSERT into asset_master(commodity,commodity_field,commodity_fieldoriginal) VALUES(?,?,?) "); |
|
|
|
st1.setString(1, mtable); |
|
st1.setString(2, this.tablename); |
|
if(!st1.executeQuery().next()){ |
|
st2.setString(1, mtable); |
|
st2.setString(2, this.tablename); |
|
st2.setString(3, fieldname); |
|
st2.executeUpdate(); |
|
} |
|
st1.close(); |
|
st2.close(); |
|
} |
|
|
|
|
|
/** |
|
* {@inheritDoc} |
|
*/ |
|
public String generateSQLXLQueryPlainQuery(String fieldtable, int nmonths, List contractTitleList) { |
|
|
|
String rtn="SELECT cdate "; |
|
for(Iterator<String> it=contractTitleList.iterator();it.hasNext();){ |
|
String contract=it.next(); |
|
rtn+=",\r\nMAX(CASE WHEN contract='"+contract+"' THEN val END) AS "+contract+" "; |
|
} |
|
rtn+="\r\nFROM "+fieldtable+" WHERE cdate>=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -" + nmonths + " month) GROUP BY cdate ORDER BY cdate DESC"; |
|
return rtn; |
|
|
|
} |
|
|
|
}
|
|
|