])
m_pseudoIncremental
private boolean m_pseudoIncremental
- Flag indicating that pseudo incremental mode is used (all instances load at once into main memeory and then incrementally from main memory instead of the database)
m_nominalToStringLimit
private int m_nominalToStringLimit
- Limit when an attribute is treated as string attribute and not as a nominal one because it has to many values.
m_rowCount
private int m_rowCount
- The number of rows obtained by m_query, eg the size of the ResultSet to load
m_counter
private int m_counter
- Indicates how many rows has already been loaded incrementally
m_choice
private int m_choice
- Decides which SQL statement to limit the number of rows should be used. DBMS dependent. Algorithm just tries several possibilities.
m_firstTime
private boolean m_firstTime
- Flag indicating that incremental process wants to read first instance
m_inc
private boolean m_inc
- Flag indicating that incremental mode is chosen (for command line use only)
m_orderBy
private weka.core.FastVector m_orderBy
- Contains the name of the columns that uniquely define a row in the ResultSet. Ensures a unique ordering of instances for indremental loading.
m_nominalIndexes
private java.util.Hashtable[] m_nominalIndexes
- Stores the index of a nominal value
m_nominalStrings
private weka.core.FastVector[] m_nominalStrings
- Stores the nominal value
m_idColumn
private java.lang.String m_idColumn
- Name of the primary key column that will allow unique ordering necessary for incremental loading. The name is specified in the DatabaseUtils file.
STRING
public static final int STRING
- See Also:
- Constant Field Values
BOOL
public static final int BOOL
- See Also:
- Constant Field Values
DOUBLE
public static final int DOUBLE
- See Also:
- Constant Field Values
BYTE
public static final int BYTE
- See Also:
- Constant Field Values
SHORT
public static final int SHORT
- See Also:
- Constant Field Values
INTEGER
public static final int INTEGER
- See Also:
- Constant Field Values
LONG
public static final int LONG
- See Also:
- Constant Field Values
FLOAT
public static final int FLOAT
- See Also:
- Constant Field Values
DATE
public static final int DATE
- See Also:
- Constant Field Values
PROPERTY_FILE
protected static java.lang.String PROPERTY_FILE
- The property file for the database connection
PROPERTIES
protected static java.util.Properties PROPERTIES
- Properties associated with the database connection
DatabaseLoader
public DatabaseLoader()
throws java.lang.Exception
- Constructor
- Throws:
java.lang.Exception
globalInfo
public java.lang.String globalInfo()
- Returns a string describing this Loader
- Returns:
- a description of the Loader suitable for
displaying in the explorer/experimenter gui
reset
public void reset()
throws java.lang.Exception
- Resets the Loader ready to read a new data set
- Specified by:
reset
in interface weka.core.converters.Loader
- Overrides:
reset
in class weka.core.converters.AbstractLoader
- Throws:
java.lang.Exception
- if an error occurs while disconnecting from the database
resetStructure
public void resetStructure()
- Resets the structure of instances
setQuery
public void setQuery(java.lang.String q)
- Sets the query to execute against the database
- Parameters:
q
- the query to execute
getQuery
public java.lang.String getQuery()
- Gets the query to execute against the database
- Returns:
- the query
queryTipText
public java.lang.String queryTipText()
- the tip text for this property
- Returns:
- the tip text
setKeys
public void setKeys(java.lang.String keys)
- Sets the key columns of a database table
- Parameters:
keys
- a String containing the key columns in a comma separated list.
getKeys
public java.lang.String getKeys()
- Gets the key columns' name
- Returns:
- name of the key columns'
keysTipText
public java.lang.String keysTipText()
- the tip text for this property
- Returns:
- the tip text
setUrl
public void setUrl(java.lang.String url)
- Sets the database URL
- Specified by:
setUrl
in interface weka.core.converters.DatabaseConverter
- Parameters:
string
- with the database URL
getUrl
public java.lang.String getUrl()
- Gets the URL
- Specified by:
getUrl
in interface weka.core.converters.DatabaseConverter
- Returns:
- the URL
urlTipText
public java.lang.String urlTipText()
- the tip text for this property
- Returns:
- the tip text
setUser
public void setUser(java.lang.String user)
- Sets the database user
- Specified by:
setUser
in interface weka.core.converters.DatabaseConverter
- Parameters:
the
- database user name
getUser
public java.lang.String getUser()
- Gets the user name
- Specified by:
getUser
in interface weka.core.converters.DatabaseConverter
- Returns:
- name of database user
userTipText
public java.lang.String userTipText()
- the tip text for this property
- Returns:
- the tip text
setPassword
public void setPassword(java.lang.String password)
- Sets user password for the database
- Specified by:
setPassword
in interface weka.core.converters.DatabaseConverter
- Parameters:
the
- password
passwordTipText
public java.lang.String passwordTipText()
- the tip text for this property
- Returns:
- the tip text
setSource
public void setSource(java.lang.String url,
java.lang.String userName,
java.lang.String password)
- Sets the database url
- Parameters:
url
- the database urluserName
- the user namepassword
- the password
setSource
public void setSource(java.sql.Connection connection)
- Sets the database url using the given connection
setSource
public void setSource(java.lang.String url)
- Sets the database url
- Parameters:
url
- the database url
setSource
public void setSource()
throws java.lang.Exception
- Sets the database url using the DatabaseUtils file
- Throws:
java.lang.Exception
connectToDatabase
public void connectToDatabase()
- Opens a connection to the database
endOfQuery
private java.lang.String endOfQuery(boolean onlyTableName)
- Returns the table name or all after the FROM clause of the user specified query
to retrieve instances.
- Parameters:
onlyTableName
- true if only the table name should be returned, false otherwise
- Returns:
- the end of the query
checkForKey
private boolean checkForKey()
throws java.lang.Exception
- Checks for a unique key using the JDBC driver's method:
getPrimaryKey(), getBestRowIdentifier().
Depending on their implementation a key can be detected.
The key is needed to order the instances uniquely for an inremental loading.
If an existing key cannot be detected, use -P option.
- Returns:
- true, if a key could have been detected, false otherwise
- Throws:
java.lang.Exception
- if database error occurs
stringToNominal
private void stringToNominal(java.sql.ResultSet rs,
int i)
throws java.lang.Exception
- Converts string attribute into nominal ones for an instance read during
incremental loading
- Parameters:
rs
- The result seti
- the index of the nominal value
- Throws:
java.lang.Exception
- exception if it cannot be converted
limitQuery
private java.lang.String limitQuery(java.lang.String query,
int offset,
int choice)
- Used in incremental loading. Modifies the SQL statement,
so that only one instance per time is tretieved and the instances are ordered
uniquely.
- Parameters:
query
- the query to modify for incremental loadingoffset
- sets which tuple out of the uniquely ordered ones should be returnedchoice
- the kind of query that is suitable for the used DBMS
- Returns:
- the modified query that returns only one result tuple.
getRowCount
private int getRowCount()
throws java.lang.Exception
- Counts the number of rows that are loaded from the database
- Returns:
- the entire number of rows
- Throws:
java.lang.Exception
- if the number of rows cannot be calculated
getStructure
public weka.core.Instances getStructure()
throws java.io.IOException
- Determines and returns (if possible) the structure (internally the
header) of the data set as an empty set of instances.
- Specified by:
getStructure
in interface weka.core.converters.Loader
- Specified by:
getStructure
in class weka.core.converters.AbstractLoader
- Returns:
- the structure of the data set as an empty set of Instances
- Throws:
java.io.IOException
- if an error occurs
getDataSet
public weka.core.Instances getDataSet()
throws java.io.IOException
- Return the full data set in batch mode (header and all intances at once).
- Specified by:
getDataSet
in interface weka.core.converters.Loader
- Specified by:
getDataSet
in class weka.core.converters.AbstractLoader
- Returns:
- the structure of the data set as an empty set of Instances
- Throws:
java.io.IOException
- if there is no source or parsing fails
readInstance
private weka.core.Instance readInstance(java.sql.ResultSet rs)
throws java.lang.Exception
- Reads an instance from a database.
- Parameters:
rs
- the ReusltSet to load
- Returns:
- an instance read from the database
- Throws:
java.lang.Exception
- if instance cannot be read
getNextInstance
public weka.core.Instance getNextInstance()
throws java.io.IOException
- Read the data set incrementally---get the next instance in the data
set or returns null if there are no
more instances to get. If the structure hasn't yet been
determined by a call to getStructure then method does so before
returning the next instance in the data set.
- Specified by:
getNextInstance
in interface weka.core.converters.Loader
- Specified by:
getNextInstance
in class weka.core.converters.AbstractLoader
- Returns:
- the next instance in the data set as an Instance object or null
if there are no more instances to be read
- Throws:
java.io.IOException
- if there is an error during parsing
getOptions
public java.lang.String[] getOptions()
- Gets the setting
- Specified by:
getOptions
in interface weka.core.OptionHandler
- Returns:
- the current setting
listOptions
public java.util.Enumeration listOptions()
- Lists the available options
- Specified by:
listOptions
in interface weka.core.OptionHandler
- Returns:
- an enumeration of the available options
setOptions
public void setOptions(java.lang.String[] options)
throws java.lang.Exception
- Sets the options.
Available options are:
-Q the query to specify which tuples to load
The query must have the form:
SELECT *| FROM [WHERE}
(default: SELECT * FROM Results0).
-P comma separted list of columns that are a unqiue key
Only needed for incremental loading, if it cannot be detected automatically
-I
Sets incremental loading
- Specified by:
setOptions
in interface weka.core.OptionHandler
- Parameters:
options
- the options
- Throws:
java.lang.Exception
- if options cannot be set
printException
private void printException(java.lang.Exception ex)
- Prints an exception
- Parameters:
ex
- the exception to print
main
public static void main(java.lang.String[] options)
- Main method.
- Parameters:
options
- the options