Android数据库异常,找不到数据库

时间:2017-06-25 02:33:09

标签: android sqlite

我一直在研究Head First Android的SQLite,我试图利用它,但我得到一个例外作为我的答案。 数据库创建 `

package com.example.motorhead_luffy.tv;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by MOTORHEAD_LUFFY on 10-06-2017.
 */
class Anime extends SQLiteOpenHelper {
Anime(Context context)
{super(context,"ANIME",null,1);
}
@Override
    public void onCreate(SQLiteDatabase database)
{
    database.execSQL("CREATE TABLE ANIME (_id INTEGER PRIMARY KEY AUTOINCREMENT, "
                        + "NAME TEXT, "
                        + "DESCRIPTION TEXT, "
                        + "IMAGE INTEGER);");
    insertmore(database,"Naruto","A anime about ninjas",R.drawable.narut);
    insertmore(database,"One Piece","A anime about pirates",R.drawable.one);
    insertmore(database,"Death Note","A anime about shinigamis",R.drawable.deathnote);

}
@Override
    public void onUpgrade(SQLiteDatabase database, int n,int o)
{
if(o<1)
{
    database.execSQL("CREATE TABLE ANIME (_ID INTEGER PRIMARY KEY AUTOINCREMENT, "
            + "NAME TEXT, "
            + "DESCRIPTION TEXT, "
            + "IMAGE INTEGER);");
    insertmore(database,"Naruto","A anime about ninjas",R.drawable.narut);
    insertmore(database,"One Piece","A anime about pirates",R.drawable.one);
    insertmore(database,"Death Note","A anime about shinigamis",R.drawable.deathnote);

}
else if(o<3)
{
    database.execSQL("ALTER TABLE ANIME ADD COLUMN FAVOURITE NUMERIC;");
}
}
    private static void insertmore(SQLiteDatabase database,String name,String desc,int id)
    {
        ContentValues contentValues = new ContentValues();
        contentValues.put("NAME",name);
        contentValues.put("DESCRIPTION",desc);
        contentValues.put("IMAGE",id);
        database.insert("ANIME",null,contentValues);
    }
}

我在哪里使用

package com.example.motorhead_luffy.tv;

import android.app.ListActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;


public class SecondActivity extends ListActivity{
private SQLiteDatabase database;
private Cursor cursor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ListView listView = getListView();
        try
        {
            SQLiteOpenHelper anime = new Anime(this);
            database = anime.getReadableDatabase();
            cursor = database.query("ANIME",
                                    new String[]{"_id","NAME"},
                                    null,null,null,null,null);
            CursorAdapter listAdapter = new SimpleCursorAdapter(this,
                                                            android.R.layout.simple_list_item_1,
                                                            cursor,
                                                            new String[]{"NAME"},
                                                            new int[]{android.R.id.text1},
                                                            0);
                listView.setAdapter(listAdapter);
        }
        catch (Exception e)
        {
            Toast toast = Toast.makeText(this,"UNAVAILABLE",Toast.LENGTH_SHORT);
            toast.show();
        }
    }
    @Override
    public void onDestroy()
    {
        super.onDestroy();
        cursor.close();
        database.close();
    }
    @Override
    public void onListItemClick(ListView listView, View view,int pos, long id)
    {
        Intent intent = new Intent(SecondActivity.this, NextActivity.class);
        intent.putExtra("id",(int)id);
        startActivity(intent);
    }
}

我得到的输出是UNAVAILABLE(用catch编写),有人可以纠正吗?

这是logcat(printstacktrace)的输出

06-22 15:45:39.064 576-576/com.example.motorhead_luffy.tv W/System.err: java.lang.IllegalArgumentException: column '_id' does not exist
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:303)
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.widget.CursorAdapter.init(CursorAdapter.java:172)
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.widget.CursorAdapter.<init>(CursorAdapter.java:149)
06-22 15:45:39.070 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.widget.ResourceCursorAdapter.<init>(ResourceCursorAdapter.java:91)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:104)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err:     at com.example.motorhead_luffy.tv.SecondActivity.onCreate(SecondActivity.java:31)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.Activity.performCreate(Activity.java:5248)
06-22 15:45:39.071 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.ActivityThread.access$800(ActivityThread.java:139)
06-22 15:45:39.072 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.os.Looper.loop(Looper.java:136)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5086)
06-22 15:45:39.073 576-576/com.example.motorhead_luffy.tv W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
06-22 15:45:39.074 576-576/com.example.motorhead_luffy.tv W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
06-22 15:45:39.074 576-576/com.example.motorhead_luffy.tv W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
06-22 15:45:39.075 576-576/com.example.motorhead_luffy.tv W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
06-22 15:45:39.075 576-576/com.example.motorhead_luffy.tv W/System.err:     at dalvik.system.NativeStart.main(Native Method)

该应用程序在Android 4.4.4 kitkat(API-19)上出现故障,但在5.1(API-21)上正常工作。两者都是不同的设备。

1 个答案:

答案 0 :(得分:0)

列'_id'不存在 检查ID列是否正确显示。 尝试通过调试调试代码来调试代码,并查看异常的确切位置。

相关问题