Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 23/11/13, 23:40:00
Avatar de Betico92
Betico92 Betico92 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: nov 2013
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
No such table column "Telefono" Sqlite android

Muy buenas! Encantado de haberme registrado e intentar ayudar y poner mi granito de arena en todo lo que pueda! , Sin mas contemplaciones os traigo un problema que llevo varios dias estancado y no consigo dar con la solucion.. estoy desesperado y tengo que entregar el proyecto en breve.

Dada mi inexperiencia en este mundo que estoy entrando os comento de que va el tema.

El proyecto trata de realizar una aplicación como una "agenda" en la cual yo inserto un usuario con una serie de datos rellenados en text view, y que me aparezcan en un list view.

Hasta ahí todo bien, yo rellenaba 3 campos que eran Nombre Apellido y Edad para comprobar que me lo hacia correctamente y hasta ahí todo funcionaba de maravilla. Es ahí cuando inserté otro campo llamado "Telefono" el cual es el causante de que la aplicación me falle. Me sale el siguiente error: INSERT INTO Personas has not column named Telefono.

No encuentro forma de arreglar ese error y ya son varios dias los que llevo.. os pongo el código a ver si podeis encontrar el fallo.. Muchísimas gracias a todo el mundo de antemano! Smile

public class DatabaseHandler extends SQLiteOpenHelper{
// Ruta por defecto de las bases de datos en el sistema Android.
private static String RUTA_BASE_DATOS = "/data/data/proyectoMiguel.pruebabasedatos/databases/";

// Nombre de la Base de Datos.
private static String NOMBRE_BASE_DATOS = "prueba";

// Version de la Base de Datos.
private static final int VERSION_BASE_DATOS = 2;

// Objeto Base de Datos.
private SQLiteDatabase base_datos;

// Objeto Contexto.
private Context contexto;

// Constante privada
private String SENTENCIA_SQL_CREAR_BASE_DATOS_PERSONAS = "CREATE TABLE if not exists personas (_id INTEGER PRIMARY KEY autoincrement, " +
"nombre TEXT, apellido TEXT, edad TEXT, telefono TEXT, ruta_imagen TEXT)";

/**
* Constructor
* Toma referencia hacia el contexto de la aplicación que lo invoca para poder acceder a los 'assets' y
* 'resources' de la aplicacion.
* Crea un objeto DBOpenHelper que nos permitirá controlar la apertura de la base de datos.
* @param context
*/
public DatabaseHandler(Context context) {
super(context, NOMBRE_BASE_DATOS, null, VERSION_BASE_DATOS);
this.contexto = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
// Se ejecuta la sentencia SQL de creación de la tabla personas.
db.execSQL(SENTENCIA_SQL_CREAR_BASE_DATOS_PERSONAS );
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Se elimina la versión anterior de la tabla Personas.
db.execSQL("DROP TABLE IF EXISTS Personas");

// Se crea la nueva version de la tabla personas.
db.execSQL(SENTENCIA_SQL_CREAR_BASE_DATOS_PERSONAS );
}

/**
* Metodo publico para insertar una nueva persona.
*/
public void insertarPersona(Persona persona){
ContentValues valores = new ContentValues();
valores.put("nombre", persona.getNombre());
valores.put("apellido", persona.getApellido());
valores.put("edad", persona.getEdad());
valores.put("telefono",persona.getTelefono());
valores.put("ruta_imagen", persona.getRutaImagen());
this.getWritableDatabase().insert("Personas", null, valores);
}

/**
* Metodo publico que retorna una persona especifica.
* @param id
* @return
*/
public Persona getPersona(int p_id) {
String[] columnas = new String[]{"_id", "nombre", "apellido", "edad", "telefono", "ruta_imagen"};
Cursor cursor = this.getReadableDatabase().query("Personas", columnas, "_id" + "= " + p_id, null, null, null, null,null);

if (cursor != null){
cursor.moveToFirst();
}

Persona persona = new Persona(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3),
cursor.getString(4), cursor.getString(5));

// Retorna la persona especifica.
return persona;
}

/**
* Metodo publico que cierra la base de datos.
*/
public void cerrar(){
this.close();
}

/**
* Metodo publico que devuelve todas las personas.
* @return
*/
public Cursor obtenerTodasPersonas(){
//String[] columnas = new String[]{"_id", "nombre", "apellido", "edad", "telefono", "ruta_imagen"};
Cursor cursor = this.getReadableDatabase().rawQuery("select * from personas",null);
//Cursor cursor = this.getReadableDatabase().query("Personas", columnas, null, null, null, null, null, null);

if(cursor != null) {
cursor.moveToFirst();
}
return cursor;
}

----------------------------------------------------------------
Y en la clase donde inserto los datos tengo el siguiente metodo para insertar:

/**
* Metodo privado que insertar una nueva Persona.
*/
private void insertarNuevoPersona() {
baseDatos = new DatabaseHandler(EditarPersonaActivity.this);

try {
// Crear objeto Persona.
Persona persona = new Persona(editTextNombre.getText().toString(),
editTextApellido.getText().toString(), editTextEdad
.getText().toString(), editTextTelefono.getText().toString(), ruta_imagen);

// Se inserta una nueva persona.
baseDatos.insertarPersona(persona);
} catch (Exception e) {
mensaje.mostrarMensajeCorto("Error al insertar!!!");
e.printStackTrace();
} finally {
// Se cierra la base de datos.
baseDatos.cerrar();
}
}


Muchísimas gracias de antemano y perdón por mi inexperiencia en este gran mundo. Encantado de pertenecer a un foro tan grande como este! Un abrazo muy fuerte!
Responder Con Cita


  #2  
Viejo 23/11/13, 23:57:02
Avatar de Betico92
Betico92 Betico92 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: nov 2013
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Todo solucionado! Era tan simple como desistalar la aplicación porque me estaba cargando la base de datos anterior..a veces las cosas mas tontas y simples son las que menos paramos a pensar que ocurre.. otra lección más, lo dejo puesto por si a alguien le ocurre un error similar! Un saludo!
Responder Con Cita
  #3  
Viejo 24/11/13, 00:31:39
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Cada vez que haces un cambio en el SQLite tienes que aumentar el número de versión de la base de datos, para que así cuando la aplicación se inicie se ejecute el onUpgrade.
Responder Con Cita
  #4  
Viejo 24/11/13, 12:39:22
Avatar de Betico92
Betico92 Betico92 no está en línea
Usuario novato en la web
Mensajes: 3
 
Fecha de registro: nov 2013
Mensajes: 3
Modelo de smartphone: Samsung Galaxy S2
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por kriogeN Ver Mensaje
Cada vez que haces un cambio en el SQLite tienes que aumentar el número de versión de la base de datos, para que así cuando la aplicación se inicie se ejecute el onUpgrade.
Ah pues lo desconocía, a partir de ahora lo haré cada vez que realice el cambio, perdón por la ignorancia, soy bastante novato jajajaja.

Muchas gracias por responder, un saludo!
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 09:21:34 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007