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

Respuesta
 
Herramientas
  #1  
Viejo 06/03/12, 10:44:47
Array

[xs_avatar]
brenero brenero no está en línea
Usuario novato en la web
 
Fecha de registro: feb 2012
Mensajes: 12
Tu operador: Movistar

Problema con SQLite

Hola a todos:

Soy nuevo en esto de la programación en Android y me he embarcado en un pequeño proyecto pero me encuentro atascado en temas de acceso a BD, SQLite. ¿Alguno podría ayudarme?

El problema que tengo, al menos de momento.... (espero que no salgan muchos más, y si salen que no me traigan de cabeza como este), parece que esta en la creación de las tablas. El log me devuelve un error de No such table: "nombre de la tabla".

La creación de la tabla, así como su inicialización, se encuentran en una clase, por ejemplo uno de los métodos para la creación de tablas sería el siguiente:


private static final String DATABASE_CREATE_1 = "create table "
+ DATABASE_TABLE_1 + " (" + Jugadores_DORSAL
+ " integer primary key, " + Jugadores_NOMBRE + " text not null,"
+ Jugadores_PUESTO + " text not null," + Jugadores_ALTURA
+ " text not null," + Jugadores_FECHA_NACIMIENTO
+ " text not null," + Jugadores_PROCEDENCIA + " text not null"
+ ");";

Con sus variables inicializadas anteriormente del siguiente modo:

public static final String DATABASE_TABLE_1 = "Plantilla";
public static final String DATABASE_TABLE_3 = "Rivales";
public static final String Jugadores_PROCEDENCIA = "Procedencia";

Los datos integrados en la BD se encontrarían en el método onCreate del siguiente modo:

public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE_3);
db.execSQL("INSERT INTO Rivales VALUES ('Palestra')");
db.execSQL("INSERT INTO Rivales VALUES ('Rochelambert')");

Aparte también está implementado el método onUpgrade.

Una de las pantallas debe de mostrar un spinner en el que al seleccionar un equipo me muestre una información (también incluida en la BD). Para ello hago lo siguiente.

En el XML: <Spinner
android:id="@+id/spinner"
android:layout_marginTop="60dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/equipos_prompt"
/>

En una clase DataSource se encuentra la consulta a la BD con el siguiente método:

public Cursor getAllEquipos(){
return database.rawQuery("select rowid_id,* from "
+ EstaVoleyDataBase.DATABASE_TABLE_3,null);
}

En la clase Activity de dicha pantalla la tengo de dicha forma:

private Cursor equipos;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ultimos_resultados);

Spinner spinner = (Spinner) findViewById(R.id.spinner);

PlantillaDataSource db = new PlantillaDataSource(
getApplicationContext());
db.open();

startManagingCursor(equipos);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item);

adapter.setDropDownViewResource(android.R.layout.s imple_spinner_dropdown_item);

spinner.setAdapter(adapter);

try {
equipos = db.getAllEquipos();
int accountnameIndex = equipos
.getColumnIndexOrThrow(ACCOUNT_SERVICE);

if (equipos.moveToFirst()) {
do {
adapter.add(equipos.getString(accountnameIndex));
} while (equipos.moveToFirst());
}
}

finally {
db.close();
}

}

}

Cuando arranco el emulador y entro en la pantalla sale el error de: No such table: Rivales

Otra pantalla debe mostrarme un listado y en función del que pulses acceda a una pantalla u otra, que tengo implementada de dicha manera

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="5dip" >

<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@+id/nombre_jugador"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center_vertical"

/>

<TextView
android:id="@+id/posicion_jugador"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="9.39"
android:ellipsize="marquee"
android:singleLine="true" />
</ListView>

</LinearLayout>


DataSource

public Cursor getAllJugadoresCursor() {
return database.rawQuery("select rowid _id,* from "
+ EstaVoleyDataBase.DATABASE_TABLE_1, null);
}

Y la clase Activity:

private Cursor jugadores;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PlantillaDataSource db = new PlantillaDataSource(
getApplicationContext());
db.open();
jugadores = db.getAllJugadoresCursor();
startManagingCursor(jugadores);
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.two_line_list_item, jugadores, new String[] {
"Dorsal", "Nombre" }, new int[] { android.R.id.text1,
android.R.id.text2 });
setListAdapter(adapter);
db.close();
}

public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_plantilla,menu);
return true;
}

protected void onListItemClick(ListView parent, View v, int position,
long id) {

if(position == 0){
Intent jugador = new Intent(Plantilla.this,VictorDuque.class);
startActivity(jugador);
}

}

Por favor, ¿alguien me podría echar una mano? Estoy ya desesperado buscando una solución

Muchas Gracias
Responder Con Cita


  #2  
Viejo 06/03/12, 12:08:21
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Echa un vistazo a esto:

http://www.sgoliver.net/blog/?p=1611
Responder Con Cita
  #3  
Viejo 06/03/12, 20:22:24
Array

[xs_avatar]
brenero brenero no está en línea
Usuario novato en la web
 
Fecha de registro: feb 2012
Mensajes: 12
Tu operador: Movistar

Esa web ya la había visitado pero el problema radica en que el tema listas, spinner... todo lo que encuentro es insertando los datos a mano, no tirando de una BD.

He estado toqueteando y modificando el código y ahora muestra otro error:

He comentado las variables que le daban nombre a las tablas, para meterle el nombre directamente y la sql la he dejado así

String createTabla1 = "CREATE TABLE Plantilla ( " + Jugadores_DORSAL + " integer primary key, " + Jugadores_NOMBRE + " text not null," + Jugadores_PUESTO + " text not null," + Jugadores_ALTURA + " text not null," + Jugadores_FECHA_NACIMIENTO + " text not null," + Jugadores_PROCEDENCIA + " text not null)";

Hago los cambios oportunos de variables, he cambiado el nombre de la BD, arranco y salta lo siguiente

03-06 17:30:03.938: E/AndroidRuntime(403): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.proyecto.estavoley/com.proyecto.estavoley.Plantilla}: android.database.sqlite.SQLiteException: near "Plantilla": syntax error: Plantilla

Y me sigo quedando con cara de pijota. Error de sintaxis......una query sencilla sin mucha complejidad.....y no veo el fallo de sintaxis
Responder Con Cita
Respuesta

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



Hora actual: 17:01:23 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /