Class DefaultTableLoader
- All Implemented Interfaces:
- AutoCloseable
- Author:
- Christopher Mindus
- Field SummaryFieldsModifier and TypeFieldDescription- protected final String[]The column names.- final PatternThe comma delimiter string pattern "[whitespace],[whitespace]": '\s*,\s*'.- protected final ConnectionThe connection.- final PatternMatches a date as YYYY-MM-DD or YYYY/MM/DD where YYYY is 4 digits between 1000 and 2999, MM is two digits between 01 and 12, DD is two digits between 01 and 31.- final PatternPattern for date/time/timestamp separator characters '-/:.' and whitespace: '[-/:.\s]+'.- final intThe default batch count of transactions before a batch-commit is done when inserting multiple rows.- final PatternThe Quoted String string pattern as: 'single \'quoted\' string', "double 'quoted' string", "double \"quoted\" string" The pattern is: '(['"])(?:.*?)(?<!\\)(?>\\\\)*?\1'.- protected final PreparedStatementThe prepared statement.- protected final ResultSetMetaDataThe meta data for the table columns.- final PatternThe "NULL" string pattern with whitespace ignored around it, case insensitive.- final PatternThe Quoted String pattern '"string where ""doubled-double-quotes"" are made double-quotes"': '"((?:""|[^"])*)"'.- protected final BufferedReaderThe reader.The replacement strings.- protected PatternThe pattern for quoted strings: MUST BE one of:- {@link #quotedStringPattern}or- {@link #escapedQuotedStringPattern}.- final PatternMatches a valid 24-hour time from 00:00:00-23:59:59 in hh:mm:ss or hh.mm.ss formats: '([01]?\d|2[0-3])[:.]([0-5]\d)[:.]([0-5]\d)', and allows time as e.g.- final PatternMatches a timestamp as "YYYY-MM-DD hh:mm:ss.fff" or "YYYY/MM/DD hh.mm.ss.fffffffff" where YYYY is 4 digits between 1000 and 2999, MM is two digits between 01 and 12, DD is two digits between 01 and 31.- final PatternWhitespace pattern.
- Constructor SummaryConstructorsConstructorDescription- DefaultTableLoader- (InputStream in, Charset charSet, Connection conn, String tableName, boolean clearBefore, String... columns) Creates the table loader.- DefaultTableLoader- (Reader reader, Connection conn, String tableName, boolean clearBefore, String... columns) Creates the table loader.
- Method SummaryModifier and TypeMethodDescription- void- close()Closes the input stream or reader and the prepared SQL statement for row insertion: both are attempted to be closed, and if the input stream or reader throws an IOException the SQL statement will be closed.Gets the meta data for the columns of the table.- protected void- processLine- (String line) Processes a line of data.- voidProcesses the reader.- void- processReader- (int batchCount) Processes the reader.- protected String- scanLineToStatement- (String line, Scanner scanner) Retrieves and sets all the column values in the prepared statement using the scanner.- void- setStringPattern- (Pattern stringPattern) The pattern for quoted strings: MUST BE one of:- {@link #quotedStringPattern}or- {@link #escapedQuotedStringPattern}.- void- setStringReplacement- (Map<String, - String> replace) Adds a potential string replacement, but default it is the two characters "- \n" inside a double-quoted string.
- Field Details- nullPatternThe "NULL" string pattern with whitespace ignored around it, case insensitive.
- commaPatternThe comma delimiter string pattern "[whitespace],[whitespace]": '\s*,\s*'.
- quotedStringPatternThe Quoted String pattern '"string where ""doubled-double-quotes"" are made double-quotes"': '"((?:""|[^"])*)"'.
- timePatternMatches a valid 24-hour time from 00:00:00-23:59:59 in hh:mm:ss or hh.mm.ss formats: '([01]?\d|2[0-3])[:.]([0-5]\d)[:.]([0-5]\d)', and allows time as e.g. 10:12:12, 13.12.59, 13:56:00 or 8.14.00.
- datePatternMatches a date as YYYY-MM-DD or YYYY/MM/DD where YYYY is 4 digits between 1000 and 2999, MM is two digits between 01 and 12, DD is two digits between 01 and 31. '[12]\d{3}[-/](0[1-9]|1[0-2])[-/](0[1-9]|[12]\d|3[01])'.
- timestampPatternMatches a timestamp as "YYYY-MM-DD hh:mm:ss.fff" or "YYYY/MM/DD hh.mm.ss.fffffffff" where YYYY is 4 digits between 1000 and 2999, MM is two digits between 01 and 12, DD is two digits between 01 and 31. The time part is a valid 24-hour time from 00:00:00-23:59:59 in hh:mm:ss or hh.mm.ss formats with fractional nanoseconds in 'fffffffff' that may be omitted. '[12]\d{3}[-/](0[1-9]|1[0-2])[-/](0[1-9]|[12]\d|3[01])\s+([01]?\d|2[0-3])[:.]([0-5]\d)[:.]([0-5]\d)(\.[0-9]{1,9})?'.
- escapedQuotedStringPatternThe Quoted String string pattern as:- 'single \'quoted\' string',
- "double 'quoted' string",
- "double \"quoted\" string"
 
- whitespacePatternWhitespace pattern.
- dateTimeSeparatorPatternPattern for date/time/timestamp separator characters '-/:.' and whitespace: '[-/:.\s]+'.
- DEFAULT_BATCH_COUNTpublic final int DEFAULT_BATCH_COUNTThe default batch count of transactions before a batch-commit is done when inserting multiple rows.- See Also:
 
- readerThe reader.
- insertStatementThe prepared statement.
- connThe connection.
- metaDataThe meta data for the table columns.
- columnsThe column names.
- replaceThe replacement strings.
- stringPatternThe pattern for quoted strings: MUST BE one of:- {@link #quotedStringPattern}or
- {@link #escapedQuotedStringPattern}.
 - {@link #quotedStringPattern}.
 
- Constructor Details- DefaultTableLoaderpublic DefaultTableLoader- (InputStream in, Charset charSet, Connection conn, String tableName, boolean clearBefore, String... columns) throws SQLException Creates the table loader.- Parameters:
- in- The input stream.
- charSet- The character set to use.
- conn- The JDBC connection: the connection is never closed by this class. It is up to the called to close it. A final- commit()will be performed however.
- tableName- The table name.
- clearBefore- Flag to clear the table of all rows prior to inserting the data. Please note that this flag sometime cannot be- trueif there are constraints on e.g. other tables.
- columns- The columns.
- Throws:
- NullPointerException- If any parameter is- null.
- IllegalArgumentException- If the- columnsare not specified.
- SQLException- For SQL errors.
 
- DefaultTableLoaderpublic DefaultTableLoader- (Reader reader, Connection conn, String tableName, boolean clearBefore, String... columns) throws SQLException Creates the table loader.- Parameters:
- reader- The reader.
- conn- The JDBC connection: the connection is never closed by this class. It is up to the called to close it. A final- commit()will be performed however.
- tableName- The table name.
- clearBefore- Flag to clear the table of all rows prior to inserting the data. Please note that this flag sometime cannot be- trueif there are constraints on e.g. other tables.
- columns- The field names, leave empty in case the data contains all fields in correct ordering, thus indicies can be used instead of the names.
- Throws:
- NullPointerException- If any parameter is- null.
- IllegalArgumentException- If the- columnsare not specified.
- SQLException- For SQL errors.
 
 
- Method Details- getMetaDataGets the meta data for the columns of the table.- Returns:
- The meta data of the result set from SELECT column1, column2, ... FROM tableNamerequested before rows are inserted into the table, but after a potential clear of the table.
 
- closeCloses the input stream or reader and the prepared SQL statement for row insertion: both are attempted to be closed, and if the input stream or reader throws an IOException the SQL statement will be closed. If that one throws an SQLException, the potential IOException will be added as a suppressed exception. Otherwise the potential IOException is thrown.- Specified by:
- closein interface- AutoCloseable
- Throws:
- IOException- For I/O errors.
- SQLException- For SQL errors.
 
- setStringReplacementAdds a potential string replacement, but default it is the two characters "- \n" inside a double-quoted string. Doubled double-quotes inside such a string is replaced with a single double-quote.- The default - replacemap would be as:- replace=new HashMap<>(2); replace.put("\\n","\r\n"); replace.put("\"\"","\"");- Parameters:
- replace- The map for String replacement.
- Throws:
- NullPointerException- If- replaceis- null.
 
- setStringPatternThe pattern for quoted strings: MUST BE one of:- {@link #quotedStringPattern}or
- {@link #escapedQuotedStringPattern}.
 - {@link #quotedStringPattern}.- Parameters:
- stringPattern- The new String Pattern to use.
- Throws:
- IllegalArgumentException- If- stringPatternis not one of the values- {@link #quotedStringPattern}or- {@link #escapedQuotedStringPattern}.
 
- processReaderProcesses the reader.- A subclass can override this method to perform specialized reader handling. The default is to read all lines until - EOFand call- {@link #processLine(line)}for each line, skipping empty lines. Each line produces a new row in the table, then the prepared insert statement's parameters are cleared (before next row is added).- Throws:
- IOException- For stream reader I/O error.
- SQLException- For SQL errors.
 
- processReaderProcesses the reader.- A subclass can override this method to perform specialized reader handling. The default is to read all lines until - EOFand call- {@link #processLine(line)}for each line, skipping empty lines. Each line produces a new row in the table, then the prepared insert statement's parameters are cleared (before next row is added).- Throws:
- IOException- For stream reader I/O error.
- SQLException- For SQL errors.
 
- processLineProcesses a line of data.- A subclass can override this method to perform specialized line parsing to values. - Parameters:
- line- The line, never empty string.
- Throws:
- IOException- For stream reader I/O error.
- SQLException- For SQL errors.
 
- scanLineToStatementRetrieves and sets all the column values in the prepared statement using the scanner.- Subclasses can override this method to provide the line scanning to set the columns with its data using the indicies of the columns. - Parameters:
- line- The line being scanned.
- scanner- The scanner.
- Returns:
- A warning string that will be logged, null for none.
- Throws:
- IOException- For stream reader I/O error.
- SQLException- For SQL errors.