Mega Code Archive

 
Categories / Java / Database SQL JDBC
 

DatabaseMetaData class to obtain information about the

/*  * Copyright (c) 2000 David Flanagan.  All rights reserved.  * This code is from the book Java Examples in a Nutshell, 2nd Edition.  * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.  * You may study, use, and modify it for any non-commercial purpose.  * You may distribute it non-commercially as long as you retain this notice.  * For a commercial use license, or to purchase the book (recommended),  * visit http://www.davidflanagan.com/javaexamples2.  */ import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; /**  * This class uses the DatabaseMetaData class to obtain information about the  * database, the JDBC driver, and the tables in the database, or about the  * columns of a named table.  */ public class GetDBInfo {   public static void main(String[] args) {     Connection c = null; // The JDBC connection to the database server     try {       // Look for the properties file DB.props in the same directory as       // this program. It will contain default values for the various       // parameters needed to connect to a database       Properties p = new Properties();       try {         p.load(GetDBInfo.class.getResourceAsStream("DB.props"));       } catch (Exception e) {       }       // Get default values from the properties file       String driver = p.getProperty("driver"); // Driver class name       String server = p.getProperty("server", ""); // JDBC URL for server       String user = p.getProperty("user", ""); // db user name       String password = p.getProperty("password", ""); // db password       // These variables don't have defaults       String database = null; // The db name (appended to server URL)       String table = null; // The optional name of a table in the db       // Parse the command-line args to override the default values above       for (int i = 0; i < args.length; i++) {         if (args[i].equals("-d"))           driver = args[++i]; //-d <driver>         else if (args[i].equals("-s"))           server = args[++i];//-s <server>         else if (args[i].equals("-u"))           user = args[++i]; //-u <user>         else if (args[i].equals("-p"))           password = args[++i];         else if (database == null)           database = args[i]; // <dbname>         else if (table == null)           table = args[i]; // <table>         else           throw new IllegalArgumentException("Unknown argument: "               + args[i]);       }       // Make sure that at least a server or a database were specified.       // If not, we have no idea what to connect to, and cannot continue.       if ((server.length() == 0) && (database.length() == 0))         throw new IllegalArgumentException("No database specified.");       // Load the db driver, if any was specified.       if (driver != null)         Class.forName(driver);       // Now attempt to open a connection to the specified database on       // the specified server, using the specified name and password       c = DriverManager.getConnection(server + database, user, password);       // Get the DatabaseMetaData object for the connection. This is the       // object that will return us all the data we're interested in here       DatabaseMetaData md = c.getMetaData();       // Display information about the server, the driver, etc.       System.out.println("DBMS: " + md.getDatabaseProductName() + " "           + md.getDatabaseProductVersion());       System.out.println("JDBC Driver: " + md.getDriverName() + " "           + md.getDriverVersion());       System.out.println("Database: " + md.getURL());       System.out.println("User: " + md.getUserName());       // Now, if the user did not specify a table, then display a list of       // all tables defined in the named database. Note that tables are       // returned in a ResultSet, just like query results are.       if (table == null) {         System.out.println("Tables:");         ResultSet r = md.getTables("", "", "%", null);         while (r.next())           System.out.println("\t" + r.getString(3));       }       // Otherwise, list all columns of the specified table.       // Again, information about the columns is returned in a ResultSet       else {         System.out.println("Columns of " + table + ": ");         ResultSet r = md.getColumns("", "", table, "%");         while (r.next())           System.out.println("\t" + r.getString(4) + " : "               + r.getString(6));       }     }     // Print an error message if anything goes wrong.     catch (Exception e) {       System.err.println(e);       if (e instanceof SQLException)         System.err.println(((SQLException) e).getSQLState());       System.err.println("Usage: java GetDBInfo [-d <driver] "           + "[-s <dbserver>]\n"           + "\t[-u <username>] [-p <password>] <dbname>");     }     // Always remember to close the Connection object when we're done!     finally {       try {         c.close();       } catch (Exception e) {       }     }   } }