Acessando BD

1 resposta
A

Ola galera blz.
Gente to encagatinhando na programação java estou querendo entender acesso a banco de dados estou com estas três class DB,RS e DisplayAuthors
estou querendo saber porque não estou conseguindo ter resposta da classe DB com o comando select será o q falta eh um iterator para percorrer, ja estou com um exemplo de banco no access na minha máquina alguem pode me ajudar na resolução deste problema.
Valeu !!


DB

import java.sql.*;

public class DB {
private static Connection connection = null;

static {

try {

Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

connection = DriverManager.getConnection(jdbc:odbc:Books, “”, “”);

} catch (ClassNotFoundException cnfex) {

System.err.println(Failed to load JDBC/ODBC driver.);

cnfex.printStackTrace();

System.exit(1);

} catch (SQLException sqlex) {

System.err.println( Unable to connect );

sqlex.printStackTrace();

}

}
public static PreparedStatement prepare(String statementString) {

try {

PreparedStatement dec = connection.prepareStatement(statementString);

return dec;

} catch (SQLException e) {

e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.

}

return null;

}
public static void cleanUP() {

try {

connection.close();

} catch (SQLException sqlex) {

System.err.println(Unable to disconnect);

sqlex.printStackTrace();

}

}

}

RS

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.sql.Types;

import java.util.Vector;
public class RS {

public static Vector getColumnHeads(ResultSet rs) {

ResultSetMetaData rsmd = null;

Vector columnHeads = new Vector();
try {

rsmd = rs.getMetaData();

for (int i = 1; i <= rsmd.getColumnCount(); ++i)

columnHeads.addElement(rsmd.getColumnName(i));

} catch (SQLException e) {

e.printStackTrace();

}

return columnHeads;

}
public static Vector getRows(ResultSet rs) {

Vector rows = new Vector();

try {

do {

rows.addElement(getNextRow(rs));

} while (rs.next());

} catch (SQLException e) {

e.printStackTrace();

}

return rows;

}
private static Vector getNextRow(ResultSet rs) throws SQLException {

ResultSetMetaData rsmd = null;

Vector currentRow = new Vector();
rsmd = rs.getMetaData();

for (int i = 1; i <= rsmd.getColumnCount(); ++i)

switch (rsmd.getColumnType(i)) {

case Types.VARCHAR:

currentRow.addElement(rs.getString(i));

break;

case Types.INTEGER:

currentRow.addElement(new Long(rs.getLong(i)));

break;

case Types.DOUBLE:

currentRow.addElement(new Double(rs.getDouble(i)));

break;

default:

System.out.println("Type was: " +

rsmd.getColumnTypeName(i));

}

return currentRow;

}

}

import javax.swing.<em>;

import java.awt.</em>;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.sql.*;

import java.util.Vector;
public class DisplayAuthors extends JFrame {

private PreparedStatement statement;

private ResultSet resultSet;

public DisplayAuthors() {
super(“Authors Table of Books Database”);

// connect to database books and query database

try {

statement = DB.prepare(SELECT * FROM authors);

resultSet = statement.executeQuery();

} catch (SQLException e) {

e.printStackTrace();

}
//obtém títulos de coluna

Vector columnHeads = RS.getColumnHeads(resultSet);

//obtém dados das linhas

Vector rows = RS.getRows(resultSet);

JTable table = new JTable(rows, columnHeads);

// set up GUI and display window

Container c = getContentPane();

c.add(table);

setSize(300, 100); // set window size
setVisible(true); // display window
}

public static void main(String args[]) {

DisplayAuthors window = new DisplayAuthors();

window.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

DB.cleanUP();

System.exit(0);

}

});

}

}

<img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/c.pngool.png?v=9" title=":cool:" class="emoji" alt=":cool:">

1 Resposta

C

iae blz
sou totalmente iniciante em java, pode se q eu diga besteira(muita), mas
pelo q eu vi na classe BD vc ta usando um bloco estatico, onde se encontra toda a parte de coneccao etc. mas o seu objeto conection foi instanciado fora desse bloco
pelo o q eu li sobre esses blocos eh q eles sao executados antes mesmo da sua classe ser instanciada (ou algo assim)
quem sabe naum seja algo assim
:lol:

Criado 20 de janeiro de 2005
Ultima resposta 21 de jan. de 2005
Respostas 1
Participantes 2