阅读别样的SQLite数据

问题描述 投票:0回答:1

好吧,我得让学校的一个项目;因为我的项目有很多的领域,我想表明它在RecyclerView,创造了许多对象,以显示它们。

那么,事情是,有时我得到一个String和一个Int。我的目的是创建一些对象是他们(字符串的ColumnName,int值)。

我已经尝试了很多关于这个代码,但我不知道这样做它的工作原理,现在它说,它无法在第一次如果。让我们深入到代码。

public AdminSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

@Override
public void onCreate(SQLiteDatabase BaseDeDatos) {
        BaseDeDatos.execSQL("create table personajes(apellido text primary key, nombre text, edad int, genero text, raza text, clase text, " +
                "fuerza int, destreza int, resistencia int, inteligencia int, percepcion int, voluntad int, carisma int, apariencia int, manipulacion int, " +
                "pelea int, atletismo int, robar int, sigilo int, nadar int, montar int, abrirCerr int, resDolorF int, escalar int, evadir int, esquivar int, bloquear int, " +
                "alerta int, supervivencia int, rastrear int, concentracion int, buscar int, esconderse int, resDolorM int, estrategia int, escuchar int, conGeneral int, tasar int, " +
                "mentir int, empatia int, liderazgo int, intimidar int, callejeo int, comercio int, seducir int, protocolo int, convencer int, actuar int, timar int, disfraz int, " +
                "tecnicasHechizos text, inventario text)");


}

AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "personajes",null, 5);

    SQLiteDatabase BaseDeDatos = admin.getReadableDatabase();

    Cursor fila = BaseDeDatos.rawQuery("select * from personajes", null);

    int n = 0;

    if(fila.moveToFirst()){
        apellido.setText(fila.getString(n));
        n = fila.getColumnCount();

        System.out.println("apellido");
    }

    fila.moveToNext();
    do{

        if (fila.getColumnName(n).equalsIgnoreCase("nombre")) {
            nombre.setText(fila.getString(n));
            n = fila.getColumnCount();
            System.out.println("nombre");
        } else if (fila.getColumnName(n).equalsIgnoreCase("edad")) {
            edad.setText(fila.getInt(n) + "");
            n = fila.getColumnCount();
            System.out.println("edad");
        } else if (fila.getColumnName(n).equalsIgnoreCase("genero")) {
            genero.setText(fila.getString(n));
            n = fila.getColumnCount();
        } else if (fila.getColumnName(n).equalsIgnoreCase("raza")) {
            raza.setText(fila.getString(n));
            n = fila.getColumnCount();
        } else if (fila.getColumnName(n).equalsIgnoreCase("clase")) {
            clase.setText(fila.getString(n));
            n = fila.getColumnCount();
        } else if (fila.getColumnName(n).equalsIgnoreCase("tecnicasHechizos")) {

        } else if(fila.getColumnName(n).equalsIgnoreCase("inventario")){

        }else{
            if(fila.isNull(n)){
                Tiradas_Ficha secundarias = new Tiradas_Ficha(fila.getColumnName(n), 0);
                this.tiradas.add(secundarias);
            }else{
                Tiradas_Ficha secundarias = new Tiradas_Ficha(fila.getColumnName(n), fila.getInt(n));
                this.tiradas.add(secundarias);
            }
        }
        n++;
    }while(fila.moveToNext());
    admin.close();
    BaseDeDatos.close();
}

唯一的例外是: -

Caused by: java.lang.ArrayIndexOutOfBoundsException: length=52; index=52
        at android.database.AbstractCursor.getColumnName(AbstractCursor.java:340)
        at com.example.eag.myapplication.Visualizacion_Ficha.actualizarTiradas(Visualizacion_Ficha.java:63)
        at com.example.eag.myapplication.Visualizacion_Ficha.onCreate(Visualizacion_Ficha.java:32)
        at android.app.Activity.performCreate(Activity.java:7383)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3250)
java android sqlite
1个回答
0
投票
n = fila.getColumnCount();

这将设置n是在结果列的数目。如果你使用它来访问列它总是会出界,因为有0到n-1仅列。这依赖于你正在努力实现你必须改变你确定n的方式。

© www.soinside.com 2019 - 2024. All rights reserved.