Exemplo de uso do JDBC

O exemplo a seguir assume que os seguintes requisitos estão satisfeitos:

  1. Há um servidor de banco de dados instalado;

  2. O servidor de banco de dados tem um esquema de nome test, ao qual temos permissão de acesso;

  3. O esquema test tem uma relação (tabela) de nome pet;

  4. 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();
	}
    }
}