📄 databaseloader.java
字号:
rs1.close();
break;
case BOOL:
//System.err.println("boolean --> nominal");
attributeTypes[i - 1] = Attribute.NOMINAL;
m_nominalIndexes[i - 1] = new Hashtable();
m_nominalIndexes[i - 1].put("false", new Double(0));
m_nominalIndexes[i - 1].put("true", new Double(1));
m_nominalStrings[i - 1] = new FastVector();
m_nominalStrings[i - 1].addElement("false");
m_nominalStrings[i - 1].addElement("true");
break;
case DOUBLE:
//System.err.println("BigDecimal --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case BYTE:
//System.err.println("byte --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case SHORT:
//System.err.println("short --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case INTEGER:
//System.err.println("int --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case LONG:
//System.err.println("long --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case FLOAT:
//System.err.println("float --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case DATE:
attributeTypes[i - 1] = Attribute.DATE;
break;
default:
//System.err.println("Unknown column type");
attributeTypes[i - 1] = Attribute.STRING;
}
}
FastVector attribInfo = new FastVector();
for (int i = 0; i < numAttributes; i++) {
/* Fix for databases that uppercase column names */
//String attribName = attributeCaseFix(md.getColumnName(i + 1));
String attribName = md.getColumnName(i + 1);
switch (attributeTypes[i]) {
case Attribute.NOMINAL:
attribInfo.addElement(new Attribute(attribName, m_nominalStrings[i]));
break;
case Attribute.NUMERIC:
attribInfo.addElement(new Attribute(attribName));
break;
case Attribute.STRING:
attribInfo.addElement(new Attribute(attribName, (FastVector)null));
break;
case Attribute.DATE:
attribInfo.addElement(new Attribute(attribName, (String)null));
break;
default:
throw new IOException("Unknown attribute type");
}
}
m_structure = new Instances(endOfQuery(true), attribInfo,0);
//get rid of m_idColumn
if(m_DataBaseConnection.getUpperCase())
m_idColumn = m_idColumn.toUpperCase();
//System.out.println(m_structure.attribute(0).name().equals(idColumn));
if(m_structure.attribute(0).name().equals(m_idColumn)){
m_oldStructure = new Instances(m_structure,0);
m_oldStructure.deleteAttributeAt(0);
//System.out.println(m_structure);
}
else
m_oldStructure = new Instances(m_structure,0);
}
else{
if(m_oldStructure == null)
m_oldStructure = new Instances(m_structure,0);
}
m_DataBaseConnection.disconnectFromDatabase();
}
catch(Exception ex) {
ex.printStackTrace();
printException(ex);
}
return m_oldStructure;
}
/**
* Return the full data set in batch mode (header and all intances at once).
*
* @return the structure of the data set as an empty set of Instances
* @exception IOException if there is no source or parsing fails
*/
public Instances getDataSet() throws IOException {
if (m_DataBaseConnection == null) {
throw new IOException("No source database has been specified");
}
if (getRetrieval() == INCREMENTAL) {
throw new IOException("Cannot mix getting Instances in both incremental and batch modes");
}
setRetrieval(BATCH);
connectToDatabase();
Instances result = null;
try{
if (m_DataBaseConnection.execute(m_query) == false)
throw new Exception("Query didn't produce results");
ResultSet rs = m_DataBaseConnection.getResultSet();
ResultSetMetaData md = rs.getMetaData();
// Determine structure of the instances
int numAttributes = md.getColumnCount();
int [] attributeTypes = new int [numAttributes];
m_nominalIndexes = new Hashtable [numAttributes];
m_nominalStrings = new FastVector [numAttributes];
for (int i = 1; i <= numAttributes; i++) {
switch (m_DataBaseConnection.translateDBColumnType(md.getColumnTypeName(i))) {
case STRING :
ResultSet rs1;
String columnName = md.getColumnName(i);
if(m_DataBaseConnection.getUpperCase())
columnName = columnName.toUpperCase();
String end = endOfQuery(false);
m_nominalIndexes[i - 1] = new Hashtable();
m_nominalStrings[i - 1] = new FastVector();
if(m_DataBaseConnection.execute("SELECT DISTINCT ( "+columnName+" ) FROM "+ end) == false){
throw new Exception("Nominal values cannot be retrieved");
}
rs1 = m_DataBaseConnection.getResultSet();
attributeTypes[i - 1] = Attribute.NOMINAL;
stringToNominal(rs1,i);
rs1.close();
break;
case BOOL:
//System.err.println("boolean --> nominal");
attributeTypes[i - 1] = Attribute.NOMINAL;
m_nominalIndexes[i - 1] = new Hashtable();
m_nominalIndexes[i - 1].put("false", new Double(0));
m_nominalIndexes[i - 1].put("true", new Double(1));
m_nominalStrings[i - 1] = new FastVector();
m_nominalStrings[i - 1].addElement("false");
m_nominalStrings[i - 1].addElement("true");
break;
case DOUBLE:
//System.err.println("BigDecimal --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case BYTE:
//System.err.println("byte --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case SHORT:
//System.err.println("short --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case INTEGER:
//System.err.println("int --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case LONG:
//System.err.println("long --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case FLOAT:
//System.err.println("float --> numeric");
attributeTypes[i - 1] = Attribute.NUMERIC;
break;
case DATE:
attributeTypes[i - 1] = Attribute.DATE;
break;
default:
//System.err.println("Unknown column type");
attributeTypes[i - 1] = Attribute.STRING;
}
}
// Step through the tuples
//System.err.println("Creating instances...");
FastVector instances = new FastVector();
while(rs.next()) {
double[] vals = new double[numAttributes];
for(int i = 1; i <= numAttributes; i++) {
switch (m_DataBaseConnection.translateDBColumnType(md.getColumnTypeName(i))) {
case STRING :
String str = rs.getString(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
Double index = (Double)m_nominalIndexes[i - 1].get(str);
if (index == null) {
index = new Double(m_structure.attribute(i-1).addStringValue(str));
}
vals[i - 1] = index.doubleValue();
}
break;
case BOOL:
boolean boo = rs.getBoolean(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = (boo ? 1.0 : 0.0);
}
break;
case DOUBLE:
double dd = rs.getDouble(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = dd;
}
break;
case BYTE:
byte by = rs.getByte(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = (double)by;
}
break;
case SHORT:
short sh = rs.getByte(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = (double)sh;
}
break;
case INTEGER:
int in = rs.getInt(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = (double)in;
}
break;
case LONG:
long lo = rs.getLong(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = (double)lo;
}
break;
case FLOAT:
float fl = rs.getFloat(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
vals[i - 1] = (double)fl;
}
break;
case DATE:
Date date = rs.getDate(i);
if (rs.wasNull()) {
vals[i - 1] = Instance.missingValue();
} else {
// TODO: Do a value check here.
vals[i - 1] = (double)date.getTime();
}
break;
default:
vals[i - 1] = Instance.missingValue();
}
}
Instance newInst;
newInst = new Instance(1.0, vals);
instances.addElement(newInst);
}
// Create the header and add the instances to the dataset
//System.err.println("Creating header...");
FastVector attribInfo = new FastVector();
for (int i = 0; i < numAttributes; i++) {
/* Fix for databases that uppercase column names */
//String attribName = attributeCaseFix(md.getColumnName(i + 1));
String attribName = md.getColumnName(i + 1);
switch (attributeTypes[i]) {
case Attribute.NOMINAL:
attribInfo.addElement(new Attribute(attribName, m_nominalStrings[i]));
break;
case Attribute.NUMERIC:
attribInfo.addElement(new Attribute(attribName));
break;
case Attribute.STRING:
attribInfo.addElement(new Attribute(attribName, (FastVector)null));
break;
case Attribute.DATE:
attribInfo.addElement(new Attribute(attribName, (String)null));
break;
default:
throw new IOException("Unknown attribute type");
}
}
result = new Instances(endOfQuery(true), attribInfo,
instances.size());
for (int i = 0; i < instances.size(); i++) {
result.add((Instance)instances.elementAt(i));
}
rs.close();
m_DataBaseConnection.disconnectFromDatabase();
//get rid of m_idColumn
if(m_DataBaseConnection.getUpperCase())
m_idColumn = m_idColumn.toUpperCase();
if(result.attribute(0).name().equals(m_idColumn)){
result.deleteAttributeAt(0);
}
m_structure = new Instances(result,0);
}
catch(Exception ex) {
printException(ex);
StringBuffer text = new StringBuffer();
if(m_query.equals("Select * from Results0")){
text.append("\n\nDatabaseLoader options:\n");
Enumeration enumi = listOptions();
while (enumi.hasMoreElements()) {
Option option = (Option)enumi.nextElement();
text.append(option.synopsis()+'\n');
text.append(option.description()+'\n');
}
System.out.println(text);
}
}
//System.out.println(result);
return result;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -