O exemplo a seguir assume que os seguintes requisitos estão satisfeitos:
Há um servidor de banco de dados instalado;
O servidor de banco de dados tem um esquema de nome test, ao qual temos permissão de acesso;
O esquema test tem uma relação (tabela) de nome pet;
As classes para o driver JDBC para o banco de dados
estão acessíveis através da variável de ambiente
CLASSPATH
.
O exemplo foi testado usando o servidor de banco de dados MySQL com o driver JDBC mm.MySQL. Outras combinações de servidores e drivers são livremente disponíveis, como o driver Connector/J, para o próprio MySQL, ou o gerenciador de banco de dados PostgreSQL.
import java.sql.*; import java.util.ArrayList; public class MySQLTutor { private Connection c; private ResultSet table; public MySQLTutor(String driverName) throws ClassNotFoundException { // carrega driver Class.forName(driverName); } public void connect(String user, String password) throws SQLException { // estabelece conexao com banco de dados c = DriverManager.getConnection("jdbc:mysql://localhost/test?user=" + user + "&password=" + password); } public void connect(String user) throws SQLException { connect(user, ""); } public void connect() throws SQLException { connect("anonymous", ""); } public void query(String sql) throws SQLException { // monta e executa consulta Statement s = c.createStatement(); table = s.executeQuery(sql); } public String structure() throws SQLException { // obtem e transforma em String a estrutura da tabela StringBuffer str = new StringBuffer("[ "); ResultSetMetaData m = table.getMetaData(); int colCount = m.getColumnCount(); for (int i=1; i<=colCount; ++i) str.append(m.getColumnName(i) + " \t"); return str.append(" ]").toString(); } public String showAll() throws SQLException { // obtem e transforma em String o conteudo da tabela StringBuffer str = new StringBuffer(); int colCount = table.getMetaData().getColumnCount(); while (table.next()) { for (int i=1; i<=colCount; ++i) str.append(table.getString(i) + " \t"); str.append("\n"); } return str.toString(); } public void close() throws SQLException { c.close(); } public static void main(String[] args) { String driverName="org.gjt.mm.mysql.Driver"; // MySQL // String driverName="postgresql.Driver"; // PostgreSQL try { MySQLTutor db = new MySQLTutor(driverName); if (args.length == 1) db.connect(args[0]); // primeiro argumento: username else if (args.length == 2) db.connect(args[0],args[1]); // segundo argumento: password else db.connect( ); // acesso anonimo assumido // neste exemplo, uma consulta fixa db.query("Select * from pet"); System.out.println(db.structure()); System.out.println(db.showAll()); // fecha conexao com banco de dados db.close(); } catch (SQLException E) { System.err.println("SQLException: " + E.getMessage()); System.err.println("SQLState: " + E.getSQLState()); System.err.println("VendorError: " + E.getErrorCode()); } catch (Exception e) { e.printStackTrace(); } } }