⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 databaseloader.java

📁 矩阵的QR分解算法
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
                    //System.err.println("byte --> numeric");                    attributeTypes[i - 1] = Attribute.NUMERIC;                    break;                case DatabaseConnection.SHORT:                    //System.err.println("short --> numeric");                    attributeTypes[i - 1] = Attribute.NUMERIC;                    break;                case DatabaseConnection.INTEGER:                    //System.err.println("int --> numeric");                    attributeTypes[i - 1] = Attribute.NUMERIC;                    break;                case DatabaseConnection.LONG:                    //System.err.println("long --> numeric");                    attributeTypes[i - 1] = Attribute.NUMERIC;                    break;                case DatabaseConnection.FLOAT:                    //System.err.println("float --> numeric");                    attributeTypes[i - 1] = Attribute.NUMERIC;                    break;                case DatabaseConnection.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:                    Attribute att = new Attribute(attribName, (FastVector)null);                    for (int n = 0; n < m_nominalStrings[i].size(); n++) {                      att.addStringValue((String) m_nominalStrings[i].elementAt(n));                    }                    attribInfo.addElement(att);                    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   * @throws 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 DatabaseConnection.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 DatabaseConnection.TEXT:        columnName = md.getColumnName(i);        if(m_DataBaseConnection.getUpperCase())            columnName = columnName.toUpperCase();        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.STRING;        stringToNominal(rs1,i);        rs1.close();  	break;      case DatabaseConnection.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 DatabaseConnection.DOUBLE:	//System.err.println("BigDecimal --> numeric");	attributeTypes[i - 1] = Attribute.NUMERIC;	break;      case DatabaseConnection.BYTE:	//System.err.println("byte --> numeric");	attributeTypes[i - 1] = Attribute.NUMERIC;	break;      case DatabaseConnection.SHORT:	//System.err.println("short --> numeric");	attributeTypes[i - 1] = Attribute.NUMERIC;	break;      case DatabaseConnection.INTEGER:	//System.err.println("int --> numeric");	attributeTypes[i - 1] = Attribute.NUMERIC;	break;      case DatabaseConnection.LONG:	//System.err.println("long --> numeric");	attributeTypes[i - 1] = Attribute.NUMERIC;	break;      case DatabaseConnection.FLOAT:	//System.err.println("float --> numeric");	attributeTypes[i - 1] = Attribute.NUMERIC;	break;      case DatabaseConnection.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 DatabaseConnection.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 DatabaseConnection.TEXT:	  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 DatabaseConnection.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 DatabaseConnection.DOUBLE:	  double dd = rs.getDouble(i);	  if (rs.wasNull()) {	    vals[i - 1] = Instance.missingValue();	  } else {	    vals[i - 1] =  dd;	  }	  break;	case DatabaseConnection.BYTE:	  byte by = rs.getByte(i);	  if (rs.wasNull()) {	    vals[i - 1] = Instance.missingValue();	  } else {	    vals[i - 1] = (double)by;	  }	  break;	case DatabaseConnection.SHORT:	  short sh = rs.getByte(i);	  if (rs.wasNull()) {	    vals[i - 1] = Instance.missingValue();	  } else {	    vals[i - 1] = (double)sh;	  }	  break;	case DatabaseConnection.INTEGER:	  int in = rs.getInt(i);	  if (rs.wasNull()) {	    vals[i - 1] = Instance.missingValue();	  } else {	    vals[i - 1] = (double)in;	  }	  break;	case DatabaseConnection.LONG:	  long lo = rs.getLong(i);	  if (rs.wasNull()) {	    vals[i - 1] = Instance.missingValue();	  } else {	    vals[i - 1] = (double)lo;	  }	  break;	case DatabaseConnection.FLOAT:	  float fl = rs.getFloat(i);	  if (rs.wasNull()) {	    vals[i - 1] = Instance.missingValue();	  } else {	    vals[i - 1] = (double)fl;	  }	  break;	case DatabaseConnection.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:	Attribute att = new Attribute(attribName, (FastVector) null);	attribInfo.addElement(att);	for (int n = 0; n < m_nominalStrings[i].size(); n++) {	  att.addStringValue((String) m_nominalStrings[i].elementAt(n));	}	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;  }    /**    * Reads an instance from a database.   *    * @param rs the ReusltSet to load   * @throws Exception if instance cannot be read   * @return an instance read from the database   */    private Instance readInstance(ResultSet rs) throws Exception{        ResultSetMetaData md = rs.getMetaData();      int numAttributes = md.getColumnCount();      double[] vals = new double[numAttributes];      m_structure.delete();      for(int i = 1; i <= numAttributes; i++) {	switch (m_DataBaseConnection.translateDBColumnType(md.getColumnTypeName(i))) {	case DatabaseConnection.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 DatabaseConnection.TEXT:	  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));	    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -