Foros del Web » Programación para mayores de 30 ;) » Java »

java.lang.NullPointerException Insertar en Base de datos

Estas en el tema de java.lang.NullPointerException Insertar en Base de datos en el foro de Java en Foros del Web. Hola! Recojo de un formulario una serie de parámetros y quiero insertarlos en mi base de datos pero me da el siguiente error: Código: java.lang.NullPointerException ...
  #1 (permalink)  
Antiguo 04/07/2011, 09:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
java.lang.NullPointerException Insertar en Base de datos

Hola!

Recojo de un formulario una serie de parámetros y quiero insertarlos en mi base de datos pero me da el siguiente error:

Código:
java.lang.NullPointerException
	insertarCasaBD.doPost(insertarCasaBD.java:72)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
Cómo puedo saber qué es lo que falla? Aquí dejo mi código:

Código:
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class insertarCasaBD extends HttpServlet{

// globales se ocupan varias veces

PrintWriter pagina;

Connection canal = null;

ResultSet tabla= null;

Statement instruccion=null;

String strcon= "jdbc:mysql://localhost:3306/proyectocasarural";

public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

pagina =response.getWriter();

response.setContentType("text/html");

pagina.println("<HTML>");


try { 

Class.forName("com.mysql.jdbc.Driver");

canal=DriverManager.getConnection(strcon);

instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};

//cargando los demas campos a grabar

String Nombre = request.getParameter("Nombre");
String Provincia = request.getParameter("Provincia");
String Poblacion = request.getParameter("Poblacion");
int NumHabitaciones = Integer.parseInt(request.getParameter("NumHabitaciones"));
int Capacidad = Integer.parseInt (request.getParameter("Capacidad"));
String TipoAlquiler = request.getParameter("TipoAlquiler");
int Precio = Integer.parseInt(request.getParameter("Precio"));
String Aparcamiento = request.getParameter("Aparcamiento");
			String Terraza = request.getParameter("Terraza");
			String Television = request.getParameter("Television");
			String Internet = request.getParameter("Internet");
			String AireAcondicionado = request.getParameter("AireAcondicionado");
			String Calefaccion = request.getParameter("Calefaccion");
			String Spa = request.getParameter("Spa");
			String CercaMontana = request.getParameter("CercaMontana");
			String CercaPlaya = request.getParameter("CercaPlaya");
// insert into tabla values(clave, 'nom', edad);

String q="INSERT INTO casarural (Nombre, Poblacion, Provincia, NumHabitaciones, Capacidad, TipoAlquiler, Precio, Aparcamiento, Terraza, Television, Internet, AireAcondicionado, Calefaccion, Spa, CercaMontana, CercaPlaya) VALUES ("+ Nombre +", "+ Poblacion +", " + Provincia +", "+ NumHabitaciones +", " + Capacidad + ", " + TipoAlquiler + ", " + Precio + ", " + Aparcamiento + ", " + Terraza + ", "+ Television + ", " + Internet + ", " + AireAcondicionado + ", " + Calefaccion + ", " + Spa + ", " + CercaMontana + ", " + CercaPlaya + ")";

try {

// agregando renglon (insert)

int n=instruccion.executeUpdate(q);

//avisando que se hizo la instruccion

pagina.println("YA SE INSERTO, BACK PARA REGRESAR");

} catch(SQLException e) {};

try {canal.close(); instruccion.close(); } catch(SQLException e) {};

pagina.println("</HTML>");

pagina.close();

};
Gracias!
  #2 (permalink)  
Antiguo 04/07/2011, 10:08
 
Fecha de Ingreso: abril-2011
Ubicación: mexico
Mensajes: 104
Antigüedad: 13 años
Puntos: 10
Respuesta: java.lang.NullPointerException Insertar en Base de datos

revisa que "instruccion" este bien inicializado. de ahi en fuera no se que mas podria ser-
  #3 (permalink)  
Antiguo 04/07/2011, 10:34
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Pues como estoy comenzando con esto de los servlets, etc... pues tampoco encuentro el motivo...

He cambiado alguna cosa y ahora el error me da en la línea en la que cierro la conexión... así que estoy más perdida que antes...

Vuelvo a dejar el código:

Código:
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class insertarCasaBD extends HttpServlet{

// globales se ocupan varias veces

PrintWriter pagina;

Connection conn = null;

ResultSet rs= null;

Statement st=null;

public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

	pagina =response.getWriter();

	response.setContentType("text/html");

	pagina.println("<HTML>");


	try { 

		String userName="root";
        String password ="";
        String urlBD ="jdbc:mysql://localhost:3306/proyectocasarural";
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn= DriverManager.getConnection(urlBD, userName, password);
		st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);


	} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};

	//cargando los demas campos a grabar

	String Nombre = request.getParameter("Nombre");
	String Provincia = request.getParameter("Provincia");
	String Poblacion = request.getParameter("Poblacion");
	int NumHabitaciones = Integer.parseInt(request.getParameter("NumHabitaciones"));
	int Capacidad = Integer.parseInt (request.getParameter("Capacidad"));
	String TipoAlquiler = request.getParameter("TipoAlquiler");
	int Precio = Integer.parseInt(request.getParameter("Precio"));
	String Aparcamiento = request.getParameter("Aparcamiento");
			String Terraza = request.getParameter("Terraza");
			String Television = request.getParameter("Television");
			String Internet = request.getParameter("Internet");
			String AireAcondicionado = request.getParameter("AireAcondicionado");
			String Calefaccion = request.getParameter("Calefaccion");
			String Spa = request.getParameter("Spa");
			String CercaMontana = request.getParameter("CercaMontana");
			String CercaPlaya = request.getParameter("CercaPlaya");
// insert into rs values(clave, 'nom', edad);

String q="INSERT INTO casarural (Nombre, Poblacion, Provincia, NumHabitaciones, Capacidad, TipoAlquiler, Precio, Aparcamiento, Terraza, Television, Internet, AireAcondicionado, Calefaccion, Spa, CercaMontana, CercaPlaya) VALUES ("+ Nombre +", "+ Poblacion +", " + Provincia +", "+ NumHabitaciones +", " + Capacidad + ", " + TipoAlquiler + ", " + Precio + ", " + Aparcamiento + ", " + Terraza + ", "+ Television + ", " + Internet + ", " + AireAcondicionado + ", " + Calefaccion + ", " + Spa + ", " + CercaMontana + ", " + CercaPlaya + ")";

try {

// agregando renglon (insert)

	int n=st.executeUpdate(q);

	//avisando que se hizo la st

	pagina.println("YA SE INSERTO, BACK PARA REGRESAR");

} catch(SQLException e) {};

try {
	conn.close();
	 st.close(); 
} catch(SQLException e) {};

pagina.println("</HTML>");

pagina.close();

};
  #4 (permalink)  
Antiguo 04/07/2011, 10:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Por favor, ayudaaaaaaaaaaaaaaa
  #5 (permalink)  
Antiguo 04/07/2011, 11:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Pensaba que el error tenía que ser una tontería, pero esto de que no lo sepa nadie...
  #6 (permalink)  
Antiguo 04/07/2011, 13:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

He estado toda la tarde con esto, y no consigo nada!

Ahora no me da ningún "error", pero sigue sin insertar en la base de datos.
He impreso por pantalla la sentencia de sql y se muestra bien, pero cuando llega a:
"int n=st.executeUpdate(q);" no hace nada de nada (ni siquiera sale el out.println que he puesto después...

Ayuda por favor!!!

Código:
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class insertarCasaBD extends HttpServlet{

PrintWriter out;

Connection conn = null;

ResultSet rs= null;

Statement st=null;

public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

	out =response.getWriter();

	response.setContentType("text/html");

	out.println("<HTML>");


	try { 
 		Class.forName("com.mysql.jdbc.Driver").newInstance();
		 }catch (Exception e){};
 
 try{
		String userName="root";
        String password ="";
        String urlBD ="jdbc:mysql://localhost:3306/proyectocasarural";
       
        Connection conn= DriverManager.getConnection(urlBD, userName, password);
		

		if(conn!=null){
			st = conn.createStatement();

			String Nombre = request.getParameter("Nombre");
			String Provincia = request.getParameter("Provincia");
			String Poblacion = request.getParameter("Poblacion");
			int NumHabitaciones = Integer.parseInt(request.getParameter("NumHabitaciones"));
			int Capacidad = Integer.parseInt (request.getParameter("Capacidad"));
			String TipoAlquiler = request.getParameter("TipoAlquiler");
			int Precio = Integer.parseInt(request.getParameter("Precio"));
			String Aparcamiento = request.getParameter("Aparcamiento");
			String Terraza = request.getParameter("Terraza");
			String Television = request.getParameter("Television");
			String Internet = request.getParameter("Internet");
			String AireAcondicionado = request.getParameter("AireAcondicionado");
			String Calefaccion = request.getParameter("Calefaccion");
			String Spa = request.getParameter("Spa");
			String CercaMontana = request.getParameter("CercaMontana");
			String CercaPlaya = request.getParameter("CercaPlaya");
			
		
		String q="INSERT INTO casarural (Nombre, Poblacion, Provincia, NumHabitaciones, Capacidad, TipoAlquiler, Precio, Aparcamiento, Terraza, Television, Internet, AireAcondicionado, Calefaccion, Spa, CercaMontana, CercaPlaya) VALUES ("+ Nombre +", "+ Poblacion +", " + Provincia +", "+ NumHabitaciones +", " + Capacidad + ", " + TipoAlquiler + ", " + Precio + ", " + Aparcamiento + ", " + Terraza + ", "+ Television + ", " + Internet + ", " + AireAcondicionado + ", " + Calefaccion + ", " + Spa + ", " + CercaMontana + ", " + CercaPlaya + ")";
		
			int n=st.executeUpdate(q);
			out.println("YA SE INSERTO, BACK PARA REGRESAR");
			conn.close();
			}	

	} catch(SQLException e) {};


	try { 
		st.close(); 
	
	} catch(SQLException e) {};

	out.println("</HTML>");

	out.close();

}
}
  #7 (permalink)  
Antiguo 04/07/2011, 14:05
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Bueno, cuando pasas de los tratamientos de errores corres el riesgo de no enterarte de que hay un error.

Cita:
catch(SQLException e) {}
Es de lo peor que se puede hacer programando, creer que si hay un problema y lo tapas dejará de existir.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #8 (permalink)  
Antiguo 04/07/2011, 14:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Pero si he hecho 3 tratamientos de errores! pero bueno, os doy las gracias a tí y a akki por molestaros en contestar...

Al final he encontrado el error.
Estaba en la sentencia sql (en algunas tenía que poner las comillas simples) y ya está, así de fácil (y para eso casi toda la tarde...)
  #9 (permalink)  
Antiguo 04/07/2011, 23:47
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Cita:
catch(SQLException e) {}
Esto no es un tratamiento de error, es una ocultación de error. Y como he dicho, no deberías hacerlo nunca.

Lo que haces es capturar el error y luego nada, por lo que cuando aparezca el error ni te vas a enterar ni a solucionar nada. Si lo tuvieras bien, el error de las comillas te habría aparecido desde el principio indicándote que la consulta estaba mal hecha.

Cita:
catch(SQLException e) {
e.printStackTrace();
}
Esto hace que en caso de error por lo menos te muestre por consola el texto del error.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #10 (permalink)  
Antiguo 05/07/2011, 10:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Pues ahora me pasa algo parecido (estoy con la actualización), tambíen he puesto en el catch lo de e.printStackTrace() y no me sale ninguna frase ni nada...

Dejo el código a ver si alguien sabe qué puede ser, estoy convencida de que el error está en la sentencia SQL pero no logro ver qué es lo que está mal...

Código:
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

public class modificarCasaBD extends HttpServlet{

PrintWriter out;

Connection conn = null;

ResultSet rs= null;

Statement st=null;

public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

	out =response.getWriter();
	response.setContentType("text/html");
	out.println("<HTML>");

	try { 
 		Class.forName("com.mysql.jdbc.Driver").newInstance();
	 }catch (Exception e){};
 
	try{
		String userName="root";
        String password ="";
        String urlBD ="jdbc:mysql://localhost:3306/proyectocasarural";
        Connection conn= DriverManager.getConnection(urlBD, userName, password);
		

		if(conn!=null){
				
			st = conn.createStatement();
			
			String IdCasa = request.getParameter("IdCasa");
			String Nombre = request.getParameter("Nombre");
			String Provincia = request.getParameter("Provincia");
			String Poblacion = request.getParameter("Poblacion");
			int NumHabitaciones = Integer.parseInt(request.getParameter("NumHabitaciones"));
			int Capacidad = Integer.parseInt (request.getParameter("Capacidad"));
			String TipoAlquiler = request.getParameter("TipoAlquiler");
			int Precio = Integer.parseInt(request.getParameter("Precio"));
			String Aparcamiento = request.getParameter("Aparcamiento");
			String Terraza = request.getParameter("Terraza");
			String Television = request.getParameter("Television");
			String Internet = request.getParameter("Internet");
			String AireAcondicionado = request.getParameter("AireAcondicionado");
			String Calefaccion = request.getParameter("Calefaccion");
			String Spa = request.getParameter("Spa");
			String CercaMontana = request.getParameter("CercaMontana");
			String CercaPlaya = request.getParameter("CercaPlaya");
				
					
				String q="UPDATE casarural SET(Nombre='"+ Nombre +"', Poblacion='"+ Poblacion +"', Provincia='" + Provincia +"' , NumHabitaciones='"+ NumHabitaciones +"', Capacidad='" + Capacidad + "', TipoAlquiler='" + TipoAlquiler + "', Precio='" + Precio + "', Aparcamiento=" + Aparcamiento + ", Terraza=" + Terraza + ", Television="+ Television + ", Internet=" + Internet + ", AireAcondicionado=" + AireAcondicionado + ", Calefaccion=" + Calefaccion + ", Spa=" + Spa + ", CercaMontana=" + CercaMontana + ", CercaPlaya=" + CercaPlaya + ") WHERE IdCasa=" + IdCasa +"";
				out.println(q);
				try{
				int n=st.executeUpdate(q);
				}catch(SQLException e) { e.printStackTrace(); };
				out.println("YA SE MODIFICÓ, BACK PARA REGRESAR");
				conn.close();	
				
		}				

	} catch(SQLException e) { e.printStackTrace(); };


	try { 
		st.close(); 
	
	} catch(SQLException e) {e.printStackTrace(); };

	out.println("</HTML>");

	out.close();

	}
}

Última edición por una_xikilla; 05/07/2011 a las 10:57 Razón: (se me había olvidado poner la última versión)
  #11 (permalink)  
Antiguo 05/07/2011, 10:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

La sentencia SQL que me da es:

UPDATE casarural SET(Nombre='Los Balcones', Poblacion='Cudillero', Provincia='Asturias ' , NumHabitaciones='20', Capacidad='100', TipoAlquiler='Por habitaciones ', Precio='30', Aparcamiento=0, Terraza=0, Television=0 , Internet=0 , AireAcondicionado=0 , Calefaccion=0, Spa=0, CercaMontana=0 , CercaPlaya=0) WHERE IdCasa=0

He sacado el error por pantalla y sale:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(Nombre='Los Balcones', Poblacion='Cudillero', Provincia='Asturias ' , NumHabit' at line 1 YA SE MODIFICÓ, BACK PARA REGRESAR

Última edición por una_xikilla; 05/07/2011 a las 11:04
  #12 (permalink)  
Antiguo 05/07/2011, 11:24
 
Fecha de Ingreso: agosto-2008
Mensajes: 161
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: java.lang.NullPointerException Insertar en Base de datos

Ya he descubierto lo que estaba mal.

Los paréntesis del SET (los que quitado y va perfercto)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:21.