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;
}
}
答案 0 :(得分:0)
您的代码只是正确的。请尝试卸载并运行您的应用程序(如RRR所示)。发生这种情况是因为在第一次运行应用程序之后,您可能在create table查询中添加了Message列。在创建SQLiteOpenHelper时,将仅在第一次获得调用(或者它应该是升级)。
请尝试使用任何sqllite查看器查看应用程序的db文件 - 查找下面的链接
To Pull the Application DB file using adb