public static void writeLongNames() { java.io.FileWriter longNameWriter = (java.io.FileWriter)null; String fullPath, longColumnName, shortColumnName; int i; if (longColumnNames.size() > longNamesInFileCount * 2) { /* * The file needs to be updated. */ fullPath = dataDir + fileSep + "TINYSQL_LONG_COLUMN_NAMES.dat"; try { longNameWriter = new java.io.FileWriter(fullPath); if (longNameWriter != (java.io.FileWriter)null) { for (i = 0; i < longColumnNames.size(); i += 2) { shortColumnName = (String)longColumnNames.elementAt(i); longColumnName = (String)longColumnNames.elementAt(i + 1); longNameWriter.write(shortColumnName + "|" + longColumnName + newLine); } longNameWriter.close(); longNamesInFileCount = longColumnNames.size() / 2; } else { java.lang.SystemJ.outJ.println("Unable to update long column names."); } } catch (Exception writeEx) { java.lang.SystemJ.outJ.println("Write exception " + writeEx.getMessage()); } } }
public static void main(String[] args) //throws IOException,SQLException { java.sql.DatabaseMetaData dbMeta; java.sql.ResultSetMetaData meta; java.sql.ResultSet display_rs, typesRS; java.io.BufferedReader stdin, loadFileReader; java.io.BufferedReader startReader = (java.io.BufferedReader)null; String[] fields; java.sql.Connection con; java.sql.Statement stmt; FieldTokenizer ft; java.sql.PreparedStatement pstmt = (java.sql.PreparedStatement)null; int i, rsColCount, endAt, colWidth, colScale, colPrecision, typeCount, colType, parameterIndex, b1, b2, parameterInt, startAt, columnIndex, valueIndex; String fName, tableName = null, inputString, cmdString, colTypeName, dbType, parameterString, loadString, fieldString, readString; java.lang.StringBuffer lineOut, prepareBuffer, valuesBuffer, inputBuffer; bool echo = false; stdin = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.SystemJ.inJ)); try { /* * Register the JDBC driver for dBase */ java.lang.Class.forName("com.sqlmagic.tinysql.dbfFileDriver"); } catch (java.lang.ClassNotFoundException e) { java.lang.SystemJ.err.println( "JDBC Driver could not be registered!!\n"); if (TinySQLGlobals.DEBUG) { e.printStackTrace(); } } fName = "."; if (args.Length > 0) { fName = args[0]; } /* * Establish a connection to dBase */ con = dbConnect(fName); if (con == (java.sql.Connection)null) { fName = "."; con = dbConnect(fName); } dbMeta = con.getMetaData(); dbType = dbMeta.getDatabaseProductName(); dbVersion = dbMeta.getDatabaseProductVersion(); java.lang.SystemJ.outJ.println("==================================================="); java.lang.SystemJ.outJ.println(dbType + " Command line interface version " + dbVersion + " Java version released March 15, 2007"); java.lang.SystemJ.outJ.println("Type HELP to get information on available commands."); cmdString = "NULL"; stmt = con.createStatement(); inputString = (String)null; if (args.Length > 1) { inputString = args[1].trim(); } while (!cmdString.toUpperCase().equals("EXIT")) { try { if (startReader != (java.io.BufferedReader)null) { /* * Command START files can contain comments and can have * commands broken over several lines. However, they * cannot have partial commands on a line. */ inputBuffer = new java.lang.StringBuffer(); inputString = (String)null; while ((readString = startReader.readLine()) != null) { if (readString.startsWith("--") | readString.startsWith("#")) { continue; } inputBuffer.append(readString + " "); /* * A field tokenizer must be used to avoid problems with * semi-colons inside quoted strings. */ ft = new FieldTokenizer(inputBuffer.toString(), ';', true); if (ft.countFields() > 1) { inputString = inputBuffer.toString(); break; } } if (inputString == (String)null) { startReader = (java.io.BufferedReader)null; continue; } } else if (args.Length == 0) { java.lang.SystemJ.outJ.print("tinySQL>"); inputString = stdin.readLine().trim(); } if (inputString == (String)null) { break; } if (inputString.toUpperCase().startsWith("EXIT") | inputString.toUpperCase().startsWith("QUIT")) { break; } startAt = 0; while (startAt < inputString.length() - 1) { endAt = inputString.indexOf(";", startAt); if (endAt == -1) { endAt = inputString.length(); } cmdString = inputString.substring(startAt, endAt); if (echo) { java.lang.SystemJ.outJ.println(cmdString); } startAt = endAt + 1; if (cmdString.toUpperCase().startsWith("SELECT")) { display_rs = stmt.executeQuery(cmdString); if (display_rs == (java.sql.ResultSet)null) { java.lang.SystemJ.outJ.println("Null ResultSet returned from query"); continue; } meta = display_rs.getMetaData(); /* * The actual number of columns retrieved has to be checked */ rsColCount = meta.getColumnCount(); lineOut = new java.lang.StringBuffer(100); int[] columnWidths = new int[rsColCount]; int[] columnScales = new int[rsColCount]; int[] columnPrecisions = new int[rsColCount]; int[] columnTypes = new int[rsColCount]; String[] columnNames = new String[rsColCount]; for (i = 0; i < rsColCount; i++) { columnNames[i] = meta.getColumnName(i + 1); columnWidths[i] = meta.getColumnDisplaySize(i + 1); columnTypes[i] = meta.getColumnType(i + 1); columnScales[i] = meta.getScale(i + 1); columnPrecisions[i] = meta.getPrecision(i + 1); if (columnNames[i].length() > columnWidths[i]) { columnWidths[i] = columnNames[i].length(); } lineOut.append(padString(columnNames[i], columnWidths[i]) + " "); } if (TinySQLGlobals.DEBUG) { java.lang.SystemJ.outJ.println(lineOut.toString()); } displayResults(display_rs); } else if (cmdString.toUpperCase().startsWith("CONNECT")) { con = dbConnect(cmdString.substring(8, cmdString.length())); } else if (cmdString.toUpperCase().startsWith("HELP")) { helpMsg(cmdString); } else if (cmdString.toUpperCase().startsWith("DESCRIBE")) { dbMeta = con.getMetaData(); tableName = cmdString.toUpperCase().substring(9); display_rs = dbMeta.getColumns(null, null, tableName, null); java.lang.SystemJ.outJ.println("\nColumns for table " + tableName + "\n" + "Name Type"); while (display_rs.next()) { lineOut = new java.lang.StringBuffer(100); lineOut.append(padString(display_rs.getString(4), 32)); colTypeName = display_rs.getString(6); colType = display_rs.getInt(5); colWidth = display_rs.getInt(7); colScale = display_rs.getInt(9); colPrecision = display_rs.getInt(10); if (colTypeName.equals("CHAR")) { colTypeName = colTypeName + "(" + java.lang.Integer.toString(colWidth) + ")"; } else if (colTypeName.equals("FLOAT")) { colTypeName += "(" + java.lang.Integer.toString(colPrecision) + "," + java.lang.Integer.toString(colScale) + ")"; } lineOut.append(padString(colTypeName, 20) + padString(colType, 12)); java.lang.SystemJ.outJ.println(lineOut.toString()); } } else if (cmdString.toUpperCase().equals("SHOW TABLES")) { for (i = 0; i < tableList.size(); i++) { java.lang.SystemJ.outJ.println((String)tableList.elementAt(i)); } } else if (cmdString.toUpperCase().equals("SHOW TYPES")) { typesRS = dbMeta.getTypeInfo(); typeCount = displayResults(typesRS); } else if (cmdString.toUpperCase().startsWith("SET ")) { /* * Support for SET DEBUG ON/OFF and SET ECHO ON/OFF */ ft = new FieldTokenizer(cmdString.toUpperCase(), ' ', false); fields = ft.getFields(); if (fields[1].equals("ECHO")) { if (fields[2].equals("ON")) { echo = true; } else { echo = false; } } else if (fields[1].equals("DEBUG")) { if (fields[2].equals("ON")) { TinySQLGlobals.DEBUG = true; } else { TinySQLGlobals.DEBUG = false; } } else if (fields[1].equals("PARSER_DEBUG")) { if (fields[2].equals("ON")) { TinySQLGlobals.PARSER_DEBUG = true; } else { TinySQLGlobals.PARSER_DEBUG = false; } } else if (fields[1].equals("WHERE_DEBUG")) { if (fields[2].equals("ON")) { TinySQLGlobals.WHERE_DEBUG = true; } else { TinySQLGlobals.WHERE_DEBUG = false; } } else if (fields[1].equals("EX_DEBUG")) { if (fields[2].equals("ON")) { TinySQLGlobals.EX_DEBUG = true; } else { TinySQLGlobals.EX_DEBUG = false; } } } else if (cmdString.toUpperCase().startsWith("SPOOL ")) { /* * Spool output to a file. */ ft = new FieldTokenizer(cmdString, ' ', false); fName = ft.getField(1); if (fName.equals("OFF")) { try { spoolFileWriter.close(); } catch (Exception spoolEx) { java.lang.SystemJ.outJ.println("Unable to close spool file " + spoolEx.getMessage() + newLine); } } else { try { spoolFileWriter = new java.io.FileWriter(fName); if (spoolFileWriter != (java.io.FileWriter)null) { java.lang.SystemJ.outJ.println("Output spooled to " + fName); } } catch (Exception spoolEx) { java.lang.SystemJ.outJ.println("Unable to spool to file " + spoolEx.getMessage() + newLine); } } } else if (cmdString.toUpperCase().startsWith("START ")) { ft = new FieldTokenizer(cmdString, ' ', false); fName = ft.getField(1); if (!fName.toUpperCase().endsWith(".SQL")) { fName += ".SQL"; } try { startReader = new java.io.BufferedReader(new java.io.FileReader(fName)); } catch (Exception) { startReader = (java.io.BufferedReader)null; throw new TinySQLException("No such file: " + fName); } } else if (cmdString.toUpperCase().startsWith("LOAD")) { ft = new FieldTokenizer(cmdString, ' ', false); fName = ft.getField(1); tableName = ft.getField(3); display_rs = stmt.executeQuery("SELECT * FROM " + tableName); meta = display_rs.getMetaData(); rsColCount = meta.getColumnCount(); /* * Set up the PreparedStatement for the inserts */ prepareBuffer = new java.lang.StringBuffer("INSERT INTO " + tableName); valuesBuffer = new java.lang.StringBuffer(" VALUES"); for (i = 0; i < rsColCount; i++) { if (i == 0) { prepareBuffer.append(" ("); valuesBuffer.append(" ("); } else { prepareBuffer.append(","); valuesBuffer.append(","); } prepareBuffer.append(meta.getColumnName(i + 1)); valuesBuffer.append("?"); } prepareBuffer.append(")" + valuesBuffer.toString() + ")"); try { pstmt = con.prepareStatement(prepareBuffer.toString()); loadFileReader = new java.io.BufferedReader(new java.io.FileReader(fName)); while ((loadString = loadFileReader.readLine()) != null) { if (loadString.toUpperCase().equals("ENDOFDATA")) { break; } columnIndex = 0; valueIndex = 0; ft = new FieldTokenizer(loadString, '|', true); while (ft.hasMoreFields()) { fieldString = ft.nextField(); if (fieldString.equals("|")) { columnIndex++; if (columnIndex > valueIndex) { pstmt.setString(valueIndex + 1, (String)null); valueIndex++; } } else if (columnIndex < rsColCount) { pstmt.setString(valueIndex + 1, fieldString); valueIndex++; } } pstmt.executeUpdate(); } pstmt.close(); } catch (Exception loadEx) { java.lang.SystemJ.outJ.println(loadEx.getMessage()); } } else if (cmdString.toUpperCase().startsWith("SETSTRING") | cmdString.toUpperCase().startsWith("SETINT")) { b1 = cmdString.indexOf(" "); b2 = cmdString.lastIndexOf(" "); if (b2 > b1 & b1 > 0) { parameterIndex = java.lang.Integer.parseInt(cmdString.substring(b1 + 1, b2)); parameterString = cmdString.substring(b2 + 1); if (TinySQLGlobals.DEBUG) { java.lang.SystemJ.outJ.println("Set parameter[" + parameterIndex + "]=" + parameterString); } if (cmdString.toUpperCase().startsWith("SETINT")) { parameterInt = java.lang.Integer.parseInt(parameterString); pstmt.setInt(parameterIndex, parameterInt); } else { pstmt.setString(parameterIndex, parameterString); } if (parameterIndex == 2) { pstmt.executeUpdate(); } } } else { if (cmdString.indexOf("?") > -1) { pstmt = con.prepareStatement(cmdString); } else { try { stmt.executeUpdate(cmdString); java.lang.SystemJ.outJ.println("DONE\n"); } catch (java.lang.Exception upex) { java.lang.SystemJ.outJ.println(upex.getMessage()); if (TinySQLGlobals.DEBUG) { upex.printStackTrace(); } } } } } if (args.Length > 1) { cmdString = "EXIT"; } } catch (java.sql.SQLException te) { java.lang.SystemJ.outJ.println(te.getMessage()); if (TinySQLGlobals.DEBUG) { te.printStackTrace(java.lang.SystemJ.outJ); } inputString = (String)null; } catch (Exception e) { java.lang.SystemJ.outJ.println(e.getMessage()); cmdString = "EXIT"; break; } } try { if (spoolFileWriter != (java.io.FileWriter)null) { spoolFileWriter.close(); } } catch (Exception spoolEx) { java.lang.SystemJ.outJ.println("Unable to close spool file " + spoolEx.getMessage() + newLine); } }