Android Studio SQLite错误:“0”;没有这样的专栏……”;

Android Studio SQLite错误:“0”;没有这样的专栏……”;,android,sqlite,Android,Sqlite,当我的应用程序创建数据库时,它似乎没有创建“cardname”列。我一直在查看我的代码,但找不到我做错了什么。有人能帮我吗 DBAdapter类 public class DBAdapter { static final String KEY_ROWID = "_id"; static final String KEY_USERNAME = "name"; static final String KEY_PASSWORD = "password"; static final String KEY

当我的应用程序创建数据库时,它似乎没有创建“cardname”列。我一直在查看我的代码,但找不到我做错了什么。有人能帮我吗

DBAdapter类

public class DBAdapter {
static final String KEY_ROWID = "_id";
static final String KEY_USERNAME = "name";
static final String KEY_PASSWORD = "password";
static final String KEY_CARDNUM = "cardnum";
static final String KEY_CARDNAME = "cardname";
static final String TAG = "DBAdapter";

static final String DATABASE_NAME = "CPDB";
static final String DATABASE_TABLE = "Users";
static final int DATABASE_VERSION = 1;

static final String DATABASE_CREATE =
        "create table Users (_id integer primary key autoincrement, "
                + "name text not null,"
                  +"password text not null,"
                   +"cardnum text not null,"
                    + "cardname text not null"
                      + ");";


final Context context;

DatabaseHelper DBHelper;
SQLiteDatabase db;

public DBAdapter (Context ctx){
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
}

private static class DatabaseHelper extends SQLiteOpenHelper
{
    DatabaseHelper(Context context){
        super (context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db){
        try{
            db.execSQL(DATABASE_CREATE);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version" + oldVersion + "to" + newVersion + "which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS Users");
        onCreate (db);

    }
}
DBAdapter类内的查询

  //--retrieves cards for the user--
public Cursor getCards(String username) throws SQLException{
    Cursor mCursor =
            db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_USERNAME, KEY_CARDNAME}, KEY_USERNAME + "= '" + username + "'", null, null, null, null,null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
主要活动类(发生错误时)

  if (view.getId() == R.id.bttn_show)
    {
        EditText username = (EditText) findViewById(R.id.tf_username);
        String tesco = "tesco";

        DBAdapter db= new DBAdapter(this);

    db.open();
    Cursor c = db.getCards(username.getText().toString());

    ArrayList<String> usersCards = new ArrayList<>();

    if(c.moveToFirst()) {
        do {
            String aCard = c.getString(c.getColumnIndex("cardname"));
            usersCards.add(aCard);

        } while (c.moveToNext());

    }
    if (usersCards.contains(tesco)) {
        ImageButton tb1 = (ImageButton) findViewById(R.id.ib_1);

        tb1.setBackgroundResource(R.drawable.tesco);

    }
    else {
        Toast.makeText(this, "Please Add a Card", Toast.LENGTH_LONG).show();
    }
}
if(view.getId()==R.id.bttn\u show)
{
EditText用户名=(EditText)findViewById(R.id.tf_用户名);
字符串tesco=“tesco”;
DBAdapter db=新的DBAdapter(此);
db.open();
游标c=db.getCards(username.getText().toString());
ArrayList usersCards=新的ArrayList();
if(c.moveToFirst()){
做{
字符串aCard=c.getString(c.getColumnIndex(“cardname”);
usersCards.add(aCard);
}而(c.moveToNext());
}
if(usersCards.contains(特易购)){
ImageButton tb1=(ImageButton)findViewById(R.id.ib_1);
tb1.挫折资源(R.drawable.tesco);
}
否则{
Toast.makeText(这是“请添加一张卡片”,Toast.LENGTH_LONG.show();
}
}
Logcat错误日志

        --------- beginning of crash
02-07 13:13:08.100    2109-2109/com.cardpocket.cardpocket E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.cardpocket.cardpocket, PID: 2109
java.lang.IllegalStateException: Could not execute method of the activity
        at android.view.View$1.onClick(View.java:4007)
        at android.view.View.performClick(View.java:4756)
        at android.view.View$PerformClick.run(View.java:19749)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at         com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at android.view.View$1.onClick(View.java:4002)
 



 at android.view.View.performClick(View.java:4756)
            at android.view.View$PerformClick.run(View.java:19749)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: android.database.sqlite.SQLiteException: no such column:     cardname (code 1): , while compiling: SELECT DISTINCT _id, name, cardname FROM Users WHERE name= 'cliff'
        at     android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at     android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnecti    on.java:889)
        at     android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at     android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>    (SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at     android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.    java:44)
        at     android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
        at     android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
        at     android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
        at com.cardpocket.cardpocket.DBAdapter.getCards(DBAdapter.java:148)
        at     com.cardpocket.cardpocket.mainactivity.onClick(mainactivity.java:78)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at android.view.View$1.onClick(View.java:4002)
            at android.view.View.performClick(View.java:4756)
            at android.view.View$PerformClick.run(View.java:19749)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
-----------崩溃开始
02-07 13:13:08.100 2109-2109/com.cardpocket.cardpocket E/AndroidRuntime﹕ 致命异常:主
进程:com.cardpocket.cardpocket,PID:2109
java.lang.IllegalStateException:无法执行活动的方法
在android.view.view$1.onClick上(view.java:4007)
在android.view.view.performClick上(view.java:4756)
在android.view.view$PerformClick.run(view.java:19749)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5221)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在android.view.view$1.onClick上(view.java:4002)
 
在android.view.view.performClick上(view.java:4756)
在android.view.view$PerformClick.run(view.java:19749)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5221)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
原因:android.database.sqlite.SQLiteException:没有这样的列:cardname(代码1):,编译时:从name='cliff'的用户中选择DISTINCT _id,name,cardname
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection on.java:889)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
在android.database.sqlite.sqlite程序中。(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:37)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
位于android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
位于android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
在com.cardpocket.cardpocket.DBAdapter.getCards上(DBAdapter.java:148)
位于com.cardpocket.cardpocket.mainactivity.onClick(mainactivity.java:78)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在android.view.view$1.onClick上(view.java:4002)
在android.view.view.performClick上(view.java:4756)
在android.view.view$PerformClick.run(view.java:19749)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:135)
位于android.app.ActivityThread.main(ActivityThread.java:5221)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

提前感谢。

您似乎正在尝试获取未在DBAdapter类中创建的cardesc列。你能发布更多的logcat日志吗?

表中是否有一条名为“tesco”的记录


将乐购插入表格后,尝试搜索乐购。

请发布更多代码?更新dabase版本11您是否在您的
密钥卡名中使用了正确的列名?ved是什么意思?很抱歉,这是ol提供的