Cordial Saludo
estoy ensayando un codigo para conectar a mysql pero, me sale error al conectar y no estoy seguro si es algo en el codigo:
Exception in thread "main" java.lang.NullPointerException
at co.madesoft.db.DbEstudiante.getEstudiantes(DbEstudiante.java:71)
at co.madesoft.gui.GuiEstudiante.<init>(GuiEstudiante.java:35)
at co.madesoft.gui.GuiEstudiante.main(GuiEstudiante.java:28)
este es el error y adjunto el codigo:
DbConnection para la conexion con la base de datos
package co.madesoft.db;
import java.sql.*;
/**
* Clase que permite conectar con la base de datos
* @author alejo
*/
public class DbConnection {
static String bd = "clase";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost/"+bd;
Connection conn = null;
/** Constructor de DbConnection */
public DbConnection() {
try{
//obtenemos el driver de para mysql
Class.forName("com.mysql.jdbc.Driver");
//obtenemos la conexión
conn = DriverManager.getConnection(url,login,password);
if (conn!=null){
System.out.println("Conección a base de datos "+bd+" OK");
}
}catch(SQLException e){
System.out.println(e);
}catch(ClassNotFoundException e){
System.out.println(e);
}
}
/**Permite retornar la conexión*/
public Connection getConnection(){
return conn;
}
public void desconectar(){
conn = null;
}
}
DbEstudiante para la manipulación de la tabla estudiante
package co.madesoft.db;
import java.sql.*;
public class DbEstudiante {
DbConnection cn;
/** Constructor de DbUser */
public DbEstudiante() {
cn = new DbConnection();
}
/** Obtiene las notas de un estudiante por su codigo */
public Object[][] getNotasByEstudiante(String cod){
int registros = 0;
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +
" FROM asignatura a " +
" inner join nota n on a.asi_codigo = n.asi_codigo" +
" where n.est_codigo = ? ");
pstm.setString(1, cod);
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("cont");
res.close();
}catch(SQLException e){
System.out.println(e);
}
Object [][] data = new Object[registros][5];
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT n.asi_codigo, " +
" a.asi_nombre, " +
" n.nota " +
" FROM asignatura a " +
" inner join nota n on a.asi_codigo = n.asi_codigo " +
" where n.est_codigo = ? order by n.asi_codigo ");
pstm.setString(1, cod);
ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
String asiCodigo = res.getString("asi_codigo");
String asiNombre = res.getString("asi_nombre");
Double asiNota = res.getDouble("nota");
data
[0] = asiCodigo;
data[1] = asiNombre;
data[2] = asiNota;
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
/** trae todos los estudiantes */
public Object[][] getEstudiantes(){
int registros = 0;
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT count(1) as cont" +
" FROM estudiante ");
ResultSet res = pstm.executeQuery();
res.next();
registros = res.getInt("cont");
res.close();
}catch(SQLException e){
System.out.println(e);
}
Object [][] data = new Object[registros][5];
try{
Statement stm = cn.getConnection().createStatement();
PreparedStatement pstm = cn.getConnection().prepareStatement("SELECT est_codigo, " +
" est_nombre " +
" FROM estudiante " +
" ORDER BY est_codigo ");
ResultSet res = pstm.executeQuery();
int i = 0;
while(res.next()){
String estCodigo = res.getString("est_codigo");
String estNombre = res.getString("est_nombre");
data[0] = estCodigo;
data[1] = estNombre;
i++;
}
res.close();
}catch(SQLException e){
System.out.println(e);
}
return data;
}
}
package co.madesoft.gui;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import co.madesoft.db.*;
public class GuiEstudiante implements ActionListener {
JFrame frame;
JScrollPane spEstudiantes,spNotas;
DefaultTableModel dtmEstudiantes,dtmNotas;
JTable jtbEstudiantes,jtbNotas;
JPanel pnlEstudiantes;
JLabel lblCodigo,lblNombre;
JTextField txtCodigo,txtNombre;
Object[][] dtEstudiantes;
Object[][] dtNotas;
DbEstudiante us = new DbEstudiante();
int fila = -1;
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
GuiEstudiante g = new GuiEstudiante();
}
public GuiEstudiante(){
frame = new JFrame("Notas de estudiantes");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dtEstudiantes = us.getEstudiantes();
String[] columNames = {"codigo","nombres"};
dtmEstudiantes= new DefaultTableModel(dtEstudiantes, columNames);
String[] columNamesNotas = {"codigo","asignatura","nota"};
dtmNotas = new DefaultTableModel(dtNotas,columNamesNotas);
jtbEstudiantes = new JTable(dtmEstudiantes);
jtbEstudiantes.setPreferredScrollableViewportSize(new Dimension(500, 120));
jtbNotas = new JTable(dtmNotas);
jtbNotas.setPreferredScrollableViewportSize(new Dimension(500,80));
spEstudiantes = new JScrollPane(jtbEstudiantes);
spNotas = new JScrollPane(jtbNotas);
lblCodigo = new JLabel("Codigo");
lblNombre = new JLabel("Nombre");
txtCodigo = new JTextField(10);
txtNombre = new JTextField(10);
pnlEstudiantes = new JPanel(new GridLayout(2,2));
pnlEstudiantes.add(lblCodigo);
pnlEstudiantes.add(txtCodigo);
pnlEstudiantes.add(lblNombre);
pnlEstudiantes.add(txtNombre);
jtbEstudiantes.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
fila = jtbEstudiantes.rowAtPoint(e.getPoint());
int columna = jtbEstudiantes.columnAtPoint(e.getPoint());
if ((fila > -1) && (columna > -1)){
txtCodigo.setText(String.valueOf(jtbEstudiantes.getValueAt(fila,0)));
txtNombre.setText(String.valueOf(jtbEstudiantes.getValueAt(fila,1)));
dtNotas = us.getNotasByEstudiante(String.valueOf(jtbEstudiantes.getValueAt(fila,0)));
int contRows = dtmNotas.getRowCount();
for(int i=0;i<contRows;i++){
dtmNotas.removeRow(0);
}
for(int i=0;i<dtNotas.length;i++){
Object[] newRow={dtNotas[0],dtNotas[1],dtNotas[2]};
dtmNotas.addRow(newRow);
}
}
}
});
frame.getContentPane().add(spEstudiantes,BorderLayout.NORTH);
frame.getContentPane().add(pnlEstudiantes,BorderLayout.CENTER);
frame.getContentPane().add(spNotas,BorderLayout.SOUTH);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(frame.getParent());
frame.setVisible(true);
}
public void limpiarCampos(){
txtCodigo.setText("");
txtNombre.setText("");
}
public void actionPerformed(ActionEvent e){
int resultado = -1;
}
}