|
||
|
|
|
|||||||
| 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
|
||||
|
||||
|
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 |
|
|
|
#3
|
||||
|
||||
|
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 |