Here is a program that is divided into the above steps.
The program is written so that
it accesses either a database called
bjc1 that is attached to
an mSQL database server running on a computer called
hercules:
or it uses the JDBC-ODBC bridge to access a database
called
cestria:
The choice depends on a value passed on the command line
used to start the program:
0330: import java.sql.Connection; // BothTion.java
0331: import java.io.DataInputStream;
0332: import java.sql.DriverManager;
0333: import java.sql.ResultSet;
0334: import java.sql.ResultSetMetaData;
0335: import java.sql.SQLException;
0336: import java.sql.SQLWarning;
0337: import java.sql.Statement;
0338: public class BothTion {
0339: public static void main(String[] args) {
0340: try {
0341: DataInputStream stdin = new DataInputStream(System.in);
0342: Connection tConnection = null;
0343: String tURLString;
0344: if ( args[0].equals("bjc1") ) {
0345: Class.forName("COM.imaginary.sql.msql.MsqlDriver");
0346: tURLString = "jdbc:msql://hercules.dur.ac.uk:4333/bjc1";
0347: }
0348: else {
0349: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
0350: tURLString = "jdbc:odbc:cestria";
0351: }
0352: boolean tStillTrying = true;
0353: int tNumberOfTries = 0;
0354: while (tStillTrying) {
0355: try {
0356: tConnection = DriverManager.getConnection(tURLString, "", "");
0357: tStillTrying = false;
0358: }
0359: catch (Exception rException) {
0360: tNumberOfTries++;
0361: tStillTrying = (tNumberOfTries > 20);
0362: }
0363: }
0364: if ( tConnection == null ) System.out.println("tConnection is null");
0365: check(tConnection.getWarnings());
0366: Statement tStatement = tConnection.createStatement();
0367: boolean tMoreSQLRequests = true;
0368: while (tMoreSQLRequests) {
0369: System.out.print("> ");
0370: String tSQLString = stdin.readLine();
0371: try {
0372: if ( tSQLString.startsWith("select") ) {
0373: ResultSet tResultSet = tStatement.executeQuery(tSQLString);
0374: showResultSet(tResultSet);
0375: tResultSet.close();
0376: }
0377: else if ( tSQLString.startsWith("quit") ) {
0378: tMoreSQLRequests = false;
0379: }
0380: else {
0381: // assume line contains a SQL insert, update or delete
0382: int tNumberOfRows = tStatement.executeUpdate(tSQLString);
0383: }
0384: }
0385: catch (Exception rException) {
0386: outputException(rException);
0387: }
0388: }
0389: tStatement.close();
0390: tConnection.close();
0391: }
0392: catch (Exception rException) {
0393: outputException(rException);
0394: }
0395: }
0396: private static void showResultSet(ResultSet rResultSet) throws SQLException {
0397: // Get the ResultSetMetaData. This will be used for
0398: // the column headings
0399: ResultSetMetaData tResultSetMetaData = rResultSet.getMetaData();
0400: // Get the number of columns in the result set
0401: int tNumCols = tResultSetMetaData.getColumnCount();
0402: for (int tColNum=1; tColNum<=tNumCols; tColNum++) {
0403: if (tColNum>1) System.out.print(", ");
0404: System.out.print(tResultSetMetaData.getColumnLabel(tColNum));
0405: }
0406: System.out.println();
0407: // Display data, fetching until end of the result set
0408: boolean tMoreRows = rResultSet.next();
0409: while (tMoreRows) {
0410: // Loop through each column, getting the
0411: // column data and displaying
0412: for (int tColNum=1; tColNum<=tNumCols; tColNum++) {
0413: if (tColNum>1) System.out.print(", ");
0414: System.out.print(rResultSet.getString(tColNum));
0415: }
0416: System.out.println();
0417: // Fetch the next result set row
0418: tMoreRows = rResultSet.next();
0419: }
0420: }
0421: private static boolean check(SQLWarning rSQLWarning) throws SQLException {
0422: boolean tReturnCode = false;
0423: if (rSQLWarning != null) {
0424: System.out.println("\n *** Warning ***");
0425: tReturnCode = true;
0426: while (rSQLWarning != null) {
0427: System.out.println("SQLState: " + rSQLWarning.getSQLState());
0428: System.out.println("Message: " + rSQLWarning.getMessage());
0429: System.out.println("Vendor: " + rSQLWarning.getErrorCode());
0430: System.out.println();
0431: rSQLWarning = rSQLWarning.getNextWarning();
0432: }
0433: }
0434: return tReturnCode;
0435: }
0436: private static void outputException(Exception rException) {
0437: if ( rException instanceof SQLException ) {
0438: SQLException tSQLException = (SQLException) rException;
0439: System.out.println("\n*** SQLException caught ***");
0440: while (tSQLException != null) {
0441: System.out.println("SQLState: " + tSQLException.getSQLState());
0442: System.out.println("Message: " + tSQLException.getMessage());
0443: System.out.println("Vendor: " + tSQLException.getErrorCode());
0444: tSQLException = tSQLException.getNextException();
0445: System.out.println();
0446: }
0447: }
0448: else {
0449: rException.printStackTrace();
0450: }
0451: }
0452: }