Java JComboBox返回空指针异常
我正在做一个Java软件包交付项目 我试图用数据库中的数据加载两个Java JComboBox返回空指针异常,java,mysql,swing,jcombobox,Java,Mysql,Swing,Jcombobox,我正在做一个Java软件包交付项目 我试图用数据库中的数据加载两个JComboBox组件,并得到以下错误 麻袋痕迹 下面是我在名为UsuarioDAO的类中填充组合框的代码 public JComboBox usuarios_combo(){ JComboBox cbox_usuarios = new JComboBox(); try { String sql = "SELECT usu_ci FROM usuar
JComboBox
组件,并得到以下错误
麻袋痕迹
下面是我在名为UsuarioDAO
的类中填充组合框的代码
public JComboBox usuarios_combo(){
JComboBox cbox_usuarios = new JComboBox();
try {
String sql = "SELECT usu_ci FROM usuarios";
Connection conn = this.getConexion(); // in here i have a message which prints ok if connection succeeded so i guess the problem won't be here
PreparedStatement pst1 = conn.prepareStatement(sql);
pst1.setQueryTimeout(5);
ResultSet rs = pst1.executeQuery();
while ((rs != null) && (rs.next())) {
String ci = rs.getString("usu_ci");
cbox_usuarios.addItem(ci);
}
pst1.close();
rs.close();
conn.close();
}
catch (Exception e) {
System.err.println("Names : " + e.getClass().getName() + ": " + e.getMessage());
e.printStackTrace();
}
return cbox_usuarios;
}
然后,在我要加载两个组合框的框架中,我有以下代码:
public class ListarEncomiendasAdmin extends JFrame {
private JPanel contentPane;
private JTextField txtEstado;
private JTextField txtOrigen;
private JTextField txtDestino;
private static JTable tblEncomiendas;
private static EncomiendasDAO eDAO = new EncomiendasDAO();
private static Object[][] dtEncomienda;
private static JComboBox cmbRemitente;
private static JComboBox cmbDestinatario;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
UsuarioDAO uDAO = new UsuarioDAO();
try {
cmbRemitente = new JComboBox();
cmbDestinatario = new JComboBox();
ListarEncomiendasAdmin frame = new ListarEncomiendasAdmin();
frame.setVisible(true);
Actualizar_Tabla();
cmbRemitente = uDAO.usuarios_combo();
cmbDestinatario = uDAO.usuarios_combo();
} catch (Exception e) {
e.printStackTrace();
}
}
});
连接代码
public class ConexionBD {
/* Datos para la conexion */
private String bd = "proy_encomiendas";//Base de datos
private String user = "root"; //Usuario
private String password = ""; //Contraseña
private String host = "jdbc:mysql://localhost/"+bd; //Servidor + Base de datos
public static Connection conn = null; //Inicializamos con valor null la conexion
/* Constructor de la clase que se conecta a la Base de Datos */
public ConexionBD(){
try{
//Driver para MySQL
Class.forName("com.mysql.jdbc.Driver");
//Obtenemos la conexión
conn = DriverManager.getConnection(host,user,password);
if (conn!=null){
System.out.println("Se conecto a la base de datos "+bd+"");
}
}catch(SQLException e){
System.out.println("Error en la ejecución:" + e.getErrorCode() + " " + e.getMessage());
}catch(ClassNotFoundException e){
System.out.println(e);
}
}
public Connection getConexion(){
return ConexionBD.conn;
}
我调试了应用程序,结果是,它从数据库中获取数据(我可以看到迭代次数以及它应该加载到组合框中的不同数字),但最终当框架显示时,两个组合框都是空的,我得到一个SQLNonTransient
异常
因此,如果您能提供任何帮助,我们将不胜感激。提前谢谢
编辑:连接是通过JDBC进行的,我使用的是包含MYSQL的wampserver。更改ConexionBD类代码如下:在静态块中加载驱动程序,每次调用getConexion方法时创建新的db连接
static {
try{
//Driver para MySQL
Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException e){
System.out.println(e);
}
}
public ConexionBD() {
}
public Connection getConexion(){
Connection conn = null;
try {
conn = DriverManager.getConnection(host,user,password);
if (conn!=null){
System.out.println("Se conecto a la base de datos "+bd+"");
}
} catch(SQLException e){
System.out.println("Error en la ejecución:" + e.getErrorCode() + " " + e.getMessage());
}
return conn;
}
正如您在stacktrace中看到的,在执行语句之前,连接是关闭的。您可以添加连接代码吗?也许这会对您有所帮助:@ItFreak在那里添加了连接代码。似乎类ConexionBD没有实例化(使用new关键字创建)。您将其称为.getCeonnexion,因此我认为从未创建到数据库的连接
static {
try{
//Driver para MySQL
Class.forName("com.mysql.jdbc.Driver");
} catch(ClassNotFoundException e){
System.out.println(e);
}
}
public ConexionBD() {
}
public Connection getConexion(){
Connection conn = null;
try {
conn = DriverManager.getConnection(host,user,password);
if (conn!=null){
System.out.println("Se conecto a la base de datos "+bd+"");
}
} catch(SQLException e){
System.out.println("Error en la ejecución:" + e.getErrorCode() + " " + e.getMessage());
}
return conn;
}