table abc没有名为xyz的列(代码1):,编译时:INSERT INTO abc(xyz,a,b)VALUES(?,?,?)

时间:2016-06-22 10:03:13

标签: android sqlite

  

06-22 09:28:25.456 26616-26616 / com.example.dell.regform   E / SQLiteDatabase:插入消息时出错= dfdsfsdf phone = 123 name = Name                                                                         android.database.sqlite.SQLiteException:表reg没有命名列   消息(代码1):,编译时:INSERT INTO   reg(消息,电话,姓名)VALUES(?,?,?)                                                                             在   android.database.sqlite.SQLiteConnection.nativePrepareStatement(母语   方法)                                                                             在   android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)                                                                             在   android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)                                                                             在   android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)                                                                             在android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58)                                                                             在   android.database.sqlite.SQLiteStatement。(SQLiteStatement.java:31)                                                                             在   android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)                                                                             在   android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)                                                                             at com.example.dell.regform.myDbHandler.addUser(myDbHandler.java:52)                                                                             在   com.example.dell.regform.MainActivity.addDetail(MainActivity.java:32)                                                                             at java.lang.reflect.Method.invokeNative(Native Method)                                                                             在java.lang.reflect.Method.invoke(Method.java:511)                                                                             在   android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)                                                                             在android.view.View.performClick(View.java:4204)                                                                             在android.view.View $ PerformClick.run(View.java:17355)                                                                             在android.os.Handler.handleCallback(Handler.java:725)                                                                             在android.os.Handler.dispatchMessage(Handler.java:92)                                                                             在android.os.Looper.loop(Looper.java:137)                                                                             在android.app.ActivityThread.main(ActivityThread.java:5041)                                                                             at java.lang.reflect.Method.invokeNative(Native Method)                                                                             在java.lang.reflect.Method.invoke(Method.java:511)                                                                             在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)                                                                             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)                                                                             在dalvik.system.NativeStart.main(本地方法)

package com.example.dell.regform;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by dell on 17-Jun-16.
 */
public class myDbHandler extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "register.db";
    private static final String TABLE_REG = "reg";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_NAME = "name";
    private static final String COLUMN_PHONE = "phone";
    private static final String COLUMN_MESSAGE = "message";

   public myDbHandler(Context context) {
       super(context, DATABASE_NAME,null,DATABASE_VERSION);
   }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE "+ TABLE_REG +"("
                + COLUMN_ID +" INTEGER PRIMARY KEY AUTOINCREMENT,"+
                COLUMN_NAME + " TEXT," +
                COLUMN_PHONE + " TEXT," +
                COLUMN_MESSAGE + " TEXT" +
                ")";
        db.execSQL(query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_REG);

        onCreate(db);

    }

    public void addUser(Registration reg) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME, reg.getName());
        values.put(COLUMN_PHONE, reg.getPhone());
        values.put(COLUMN_MESSAGE, reg.getMessage());
        db.insert(TABLE_REG, null, values);
        db.close();


    }
    public String databaseToString(){
        String dbString = "";
        SQLiteDatabase db = getReadableDatabase();
        String query = "SELECT name FROM "+TABLE_REG;
        Cursor c = db.rawQuery(query, null);
        c.moveToFirst();

        while (!c.isAfterLast()) {
            if (c.getString(c.getColumnIndex("name"))!= null){
                dbString += c.getString(c.getColumnIndex("name"));
                dbString += "\n";
            }

        }
        db.close();
        return dbString;
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码只是正确的。请尝试卸载并运行您的应用程序(如RRR所示)。发生这种情况是因为在第一次运行应用程序之后,您可能在create table查询中添加了Message列。在创建SQLiteOpenHelper时,将仅在第一次获得调用(或者它应该是升级)。

请尝试使用任何sqllite查看器查看应用程序的db文件 - 查找下面的链接

To Pull the Application DB file using adb

Sqlite viewer - software

SQLite Manager - Firefox plugin

SQLiteOpenHelper