*Hola, espero puedan ayudarme con un problema:
Estoy intentando hacer un insert por medio de jdbc, usando eclipse, con java, MySQL y uso de Servlets. Al hacer la prueba de conexión me envía que se ha conectado
Alejecutar el proyecto, corre sin problema, pero al llenar un formulario ej JSP es cuando me manda la Excepción: *
java.lang.NullPointerException
at net.hector.dao.VacanteDao.insert(VacanteDao.java:21)
at net.hector.controller.VacanteController.doPost(VacanteController.java:34)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
* El error lo manda en esta clase, en la línea del preparedStatement: "PreparedStatement ps = conn.getConnection().prepareStatement(sql);" *
package net.gogo.dao;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import net.gogo.model.Vacante;
public class VacanteDao {
DBConection conn;
public VacanteDao(DBConection conn) {
this.conn = conn;
}
public boolean insert(Vacante vacante) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String sql = "insert into Vacante values (?,?,?,?,?)";
try {
PreparedStatement ps = conn.getConnection().prepareStatement(sql);
ps.setInt(1, vacante.getIdVacante());
ps.setString(2, format.format(vacante.getFechaPublicacion()));
ps.setString(3, vacante.getNombreVacante());
ps.setString(4, vacante.getDescripcionVacante());
ps.setString(5, vacante.getDetalleVacante());
ps.executeUpdate();
return true;
} catch(SQLException e) {
return false;
}
}
}
*
Agrego el código de la conexión:
*
package net.gogo.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBConection {
static String tz = "?useTimezone=true&serverTimezone=UTC";
static String driver = "com.mysql.cj.jdbc.Driver";
static String user = "root";
static String pass = "1234";
static String bd = "sistemadb";
static String url = "jdbc:mysql://localhost/" + bd + tz;
Connection conn = null;
public DBConection() {
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pass);
if(conn != null) {
System.out.println("Conectando a la Base de datos [" + conn + "] Ok");
}
} catch(SQLException e) {
System.out.println("Excepción de conexión: " + e.getMessage());
} catch (ClassNotFoundException e) {
System.out.println("Excepción de Controlador: " + e.getMessage());
}
}
public Connection getConnection() {
return conn;
}
public void cerrarConexion() {
System.out.println("Cerrando conexión: [" + conn + "] Ok");
if(conn != null) {
try {
conn.close();
} catch(SQLException e) {
System.out.println(e);
}
}
}
}
* Y el del Servlet que uso como controlador: *
package net.gogo.controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.gogo.dao.DBConection;
import net.gogo.dao.VacanteDao;
import net.gogo.model.Vacante;
public class VacanteController extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String nombreParam = req.getParameter("nombre");
String descripcionParam = req.getParameter("descripcion");
String detalleParam = req.getParameter("detalle");
Vacante vacante = new Vacante(0);
vacante.setNombreVacante(nombreParam);
vacante.setDescripcionVacante(descripcionParam);
vacante.setDetalleVacante(detalleParam);
System.out.println(vacante);
DBConection conn = new DBConection();
VacanteDao vDao = new VacanteDao(conn);
boolean estatus = vDao.insert(vacante);
String msg = "";
if(estatus) {
msg = "La vacante fue guardada correctamente";
} else {
msg = "Ocurrió un error. La vacante no fue guardada";
}
conn.cerrarConexion();
RequestDispatcher rd;
req.setAttribute("message", msg);
rd = req.getRequestDispatcher("/mensaje.jsp");
rd.forward(req, resp);
}
}
* El código del Bean *
package net.gogo.model;
import java.util.Date;
public class Vacante {
private int idVacante;
private Date fechaPublicacion;
private String nombreVacante;
private String descripcionVacante;
private String detalleVacante;
public Vacante(int idVacante) {
this.fechaPublicacion = new Date();
this.idVacante = idVacante;
}
public int getIdVacante() {
return idVacante;
}
public void setIdVacante(int idVacante) {
this.idVacante = idVacante;
}
public Date getFechaPublicacion() {
return fechaPublicacion;
}
public void setFechaPublicacion(Date fechaPublicacion) {
this.fechaPublicacion = fechaPublicacion;
}
public String getNombreVacante() {
return nombreVacante;
}
public void setNombreVacante(String nombreVacante) {
this.nombreVacante = nombreVacante;
}
public String getDescripcionVacante() {
return descripcionVacante;
}
public void setDescripcionVacante(String descripcionVacante) {
this.descripcionVacante = descripcionVacante;
}
public String getDetalleVacante() {
return detalleVacante;
}
public void setDetalleVacante(String detalleVacante) {
this.detalleVacante = detalleVacante;
}
@Override
public String toString() {
return "Vacante [idVacante=" + idVacante + ", fechaPublicacion=" + fechaPublicacion + ", nombreVacante="
+ nombreVacante + ", descripcionVacante=" + descripcionVacante + ", detalleVacante=" + detalleVacante
+ "]";
}
}
* Y el nombre y los campos de la base de datos: *