📄 databasesaver.java
字号:
/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* * DatabaseSaver.java * Copyright (C) 2004 University of Waikato, Hamilton, New Zealand * */package weka.core.converters;import weka.core.Attribute;import weka.core.Capabilities;import weka.core.FastVector;import weka.core.Instance;import weka.core.Instances;import weka.core.Option;import weka.core.OptionHandler;import weka.core.Utils;import weka.core.Capabilities.Capability;import java.io.File;import java.io.IOException;import java.sql.SQLException;import java.util.Enumeration;import java.util.Properties;import java.util.Vector;/** <!-- globalinfo-start --> * Writes to a database (tested with MySQL, InstantDB, HSQLDB). * <p/> <!-- globalinfo-end --> * <!-- options-start --> * Valid options are: <p/> * * <pre> -url <JDBC URL> * The JDBC URL to connect to. * (default: from DatabaseUtils.props file)</pre> * * <pre> -user <name> * The user to connect with to the database. * (default: none)</pre> * * <pre> -password <password> * The password to connect with to the database. * (default: none)</pre> * * <pre> -T <table name> * The name of the table. * (default: the relation name)</pre> * * <pre> -P * Add an ID column as primary key. The name is specified * in the DatabaseUtils file ('idColumn'). The DatabaseLoader * won't load this column.</pre> * * <pre> -i <input file name> * Input file in arff format that should be saved in database.</pre> * <!-- options-end --> * * @author Stefan Mutter (mutter@cs.waikato.ac.nz) * @version $Revision: 1.11 $ */public class DatabaseSaver extends AbstractSaver implements BatchConverter, IncrementalConverter, DatabaseConverter, OptionHandler { /** for serialization */ static final long serialVersionUID = 863971733782624956L; /** The database connection */ private DatabaseConnection m_DataBaseConnection; /** The name of the tablein which the instances should be stored */ private String m_tableName; /** An input arff file (for command line use) */ private String m_inputFile; /** The database specific type for a string (read in from the properties file) */ private String m_createText; /** The database specific type for a double (read in from the properties file) */ private String m_createDouble; /** The database specific type for an int (read in from the properties file) */ private String m_createInt; /** The name of the primary key column that will be automatically generated (if enabled). The name is read from DatabaseUtils.*/ private String m_idColumn; /** counts the rowsand used as a primary key value */ private int m_count; /** Flag indicating if a primary key column should be added */ private boolean m_id; /** Flag indicating whether the default name of the table is the relaion name or not.*/ private boolean m_tabName; /** the user name for the database */ private String m_Username; /** the password for the database */ private String m_Password; /** The property file for the database connection */ protected static String PROPERTY_FILE = DatabaseConnection.PROPERTY_FILE; /** Properties associated with the database connection */ protected static Properties PROPERTIES; /** reads the property file */ static { try { PROPERTIES = Utils.readProperties(PROPERTY_FILE); } catch (Exception ex) { System.err.println("Problem reading properties. Fix before continuing."); System.err.println(ex); } } /** * Constructor * * @throws Exception throws Exception if property file cannot be read */ public DatabaseSaver() throws Exception{ resetOptions(); m_createText = PROPERTIES.getProperty("CREATE_STRING"); m_createDouble = PROPERTIES.getProperty("CREATE_DOUBLE"); m_createInt = PROPERTIES.getProperty("CREATE_INT"); m_idColumn = PROPERTIES.getProperty("idColumn"); } /** * Resets the Saver ready to save a new data set */ public void resetOptions(){ super.resetOptions(); setRetrieval(NONE); m_tableName = ""; m_Username = ""; m_Password = ""; m_count = 1; m_id = false; m_tabName = true; try{ if(m_DataBaseConnection != null && m_DataBaseConnection.isConnected()) m_DataBaseConnection.disconnectFromDatabase(); m_DataBaseConnection = new DatabaseConnection(); }catch(Exception ex) { printException(ex); } } /** * Cancels the incremental saving process and tries to drop the table if * the write mode is CANCEL. */ public void cancel(){ if(getWriteMode() == CANCEL){ try{ m_DataBaseConnection.update("DROP TABLE "+m_tableName); if(m_DataBaseConnection.tableExists(m_tableName)) System.err.println("Table cannot be dropped."); }catch(Exception ex) { printException(ex); } resetOptions(); } } /** * Returns a string describing this Saver * * @return a description of the Saver suitable for * displaying in the explorer/experimenter gui */ public String globalInfo() { return "Writes to a database (tested with MySQL, InstantDB, HSQLDB)."; } /** * Sets the table's name * * @param tn the name of the table */ public void setTableName(String tn){ m_tableName = tn; } /** * Gets the table's name * * @return the table's name */ public String getTableName(){ return m_tableName; } /** * Returns the tip text for this property * * @return the tip text for this property */ public String tableNameTipText(){ return "Sets the name of the table."; } /** * En/Dis-ables the automatic generation of a primary key * * @param flag flag for automatic key-genereration */ public void setAutoKeyGeneration(boolean flag){ m_id = flag; } /** * Gets whether or not a primary key will be generated automatically * * @return true if a primary key column will be generated, false otherwise */ public boolean getAutoKeyGeneration(){ return m_id; } /** * Returns the tip text for this property * * @return tip text for this property */ public String autoKeyGenerationTipText(){ return "If set to true, a primary key column is generated automatically (containing the row number as INTEGER). The name of the key is read from DatabaseUtils (idColumn)" +" This primary key can be used for incremental loading (requires an unique key). This primary key will not be loaded as an attribute."; } /** * En/Dis-ables that the relation name is used for the name of the table (default enabled). * * @param flag if true the relation name is used as table name */ public void setRelationForTableName(boolean flag){ m_tabName = flag; } /** * Gets whether or not the relation name is used as name of the table * * @return true if the relation name is used as the name of the table, false otherwise */ public boolean getRelationForTableName(){ return m_tabName; } /** * Returns the tip text fo this property * * @return the tip text for this property */ public String relationForTableNameTipText(){ return "If set to true, the relation name will be used as name for the database table. Otherwise the user has to provide a table name."; } /** * Sets the database URL * * @param url the URL */ public void setUrl(String url){ m_DataBaseConnection.setDatabaseURL(url); } /** * Gets the database URL * * @return the URL */ public String getUrl(){ return m_DataBaseConnection.getDatabaseURL(); } /** * Returns the tip text for this property * * @return the tip text for this property */ public String urlTipText(){ return "The URL of the database"; } /** * Sets the database user * * @param user the user name */ public void setUser(String user){ m_Username = user; m_DataBaseConnection.setUsername(user); } /** * Gets the database user * * @return the user name */ public String getUser(){ return m_DataBaseConnection.getUsername(); } /** * Returns the tip text for this property * * @return the tip text for this property */ public String userTipText(){ return "The user name for the database"; } /** * Sets the database password * * @param password the password */ public void setPassword(String password){ m_Password = password; m_DataBaseConnection.setPassword(password); } /** * Returns the database password * * @return the database password */ public String getPassword() { return m_DataBaseConnection.getPassword(); } /** * Returns the tip text for this property * * @return the tip text for this property */ public String passwordTipText(){ return "The database password"; } /** * Sets the database url * * @param url the database url * @param userName the user name * @param password the password */ public void setDestination(String url, String userName, String password){ try{ m_DataBaseConnection = new DatabaseConnection(); m_DataBaseConnection.setDatabaseURL(url); m_DataBaseConnection.setUsername(userName); m_DataBaseConnection.setPassword(password); } catch(Exception ex) { printException(ex); } } /** * Sets the database url * * @param url the database url */ public void setDestination(String url){ try{ m_DataBaseConnection = new DatabaseConnection(); m_DataBaseConnection.setDatabaseURL(url); m_DataBaseConnection.setUsername(m_Username); m_DataBaseConnection.setPassword(m_Password); } catch(Exception ex) { printException(ex); } } /** Sets the database url using the DatabaseUtils file */ public void setDestination(){ try{ m_DataBaseConnection = new DatabaseConnection(); m_DataBaseConnection.setUsername(m_Username); m_DataBaseConnection.setPassword(m_Password); } catch(Exception ex) { printException(ex); } } /** * Returns the Capabilities of this saver. * * @return the capabilities of this object * @see Capabilities */ public Capabilities getCapabilities() { Capabilities result = super.getCapabilities(); // attributes result.enable(Capability.NOMINAL_ATTRIBUTES); result.enable(Capability.NUMERIC_ATTRIBUTES); result.enable(Capability.DATE_ATTRIBUTES); result.enable(Capability.MISSING_VALUES);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -