Criei um banco de dados em access mesmo para testar.
Cria uma dsn na odbc chamada teste3 com driver access.
Estou usando J2SDK1.4.2_05.
E compilei o seguinte código abaixo:
import java.sql.;
import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.util.*;
public class cadastro extends JFrame {
private Connection cn;
private JTable tab;
public cadastro()
{
String url = "jdbc:obdc:teste3";
String username = "administrador";
String password = "";
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
cn = DriverManager.getConnection(url,username,password);
}
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();
}
getTable();
setSize(450,150);
show();
}
private void getTable()
{
Statement st;
ResultSet rs;
try {
String query = "SELECT * FROM T_PAIS";
st = cn.createStatement();
rs = st.executeQuery(query);
displayResultSet(rs);
st.close();
}
catch (SQLException sqlex) {
sqlex.printStackTrace();
}
}
private void displayResultSet (ResultSet rsd)
throws SQLException
{
boolean moreRecords = rsd.next();
if (!moreRecords) {
JOptionPane.showMessageDialog(this,"Sem registros");
setTitle("Sem registros");
return;
}
setTitle("Pais");
Vector columnHeads = new Vector();
Vector rows = new Vector();
try {
ResultSetMetaData rsmd = rsd.getMetaData();
for (int i=1;i<rsmd.getColumnCount();i++)
columnHeads.addElement(rsmd.getColumnName(i));
do {
rows.addElement(getNextRow(rsd,rsmd));
} while (rsd.next());
tab = new JTable(rows,columnHeads);
JScrollPane scroller = new JScrollPane(tab);
getContentPane().add(
scroller, BorderLayout.CENTER);
validate();
}
catch (SQLException sqlex) {
sqlex.printStackTrace();
}
}
private Vector getNextRow (ResultSet rs,
ResultSetMetaData rsmd)
throws SQLException
{
Vector currentRow = new Vector();
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;
default:
System.out.println("Type was :" + rsmd.getColumnTypeName(i));
}
return currentRow;
}
public void ShutDown()
{
try {
cn.close();
}
catch (SQLException sqlex) {
System.err.println("Unable to disconnect");
sqlex.printStackTrace();
}
}
public static void main (String args[])
{
final cadastro app = new cadastro();
app.addWindowListener(
new WindowAdapter(){
public void windowClosing (WindowEvent e)
{
app.ShutDown();
System.exit(0);
}
}
);
}
}
Compila legal.
Mas na hora que rodo dá o seguinte erro:
Unable to connect
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at cadastro.(cadastro.java:20)
at cadastro.main(cadastro.java:130)
Exception in thread “main” java.lang.NullPointerException
at cadastro.getTable(cadastro.java:47)
at cadastro.(cadastro.java:32)
at cadastro.main(cadastro.java:130)