表信息在编译插入时没有名为 Desc 的列
Posted
技术标签:
【中文标题】表信息在编译插入时没有名为 Desc 的列【英文标题】:table info has no column named Desc while compiling insert 【发布时间】:2019-02-27 05:06:42 【问题描述】:package pdatabase.rakesh.phobia.pdatabase;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
class MyDatabase
public static final String DB_NAME = "Tasks.db";
public static final int DB_VER = 2;
public static final String DB_TABLE = "Info";
public static final String C_TASK = "task";
public static final String C_DESC = "desc";
public static final String Q_CREATE = "CREATE TABLE "+ DB_TABLE + " (C_TASK TEXT, C_DESC TEXT)";
Context context;
SQLiteDatabase database;
public MyDatabase(Context c)
context = c;
public MyDatabase open()
DBHelper dbh = new DBHelper(context);
database = dbh.getWritableDatabase();
return this;
public void write(String task, String desc)
ContentValues cv = new ContentValues();
cv.put(C_TASK, task);
cv.put(C_DESC, desc);
database.insert( DB_TABLE,null, cv);
public void close()
database.close();
public String read()
String result = "";
String[] colms = C_TASK,C_DESC;
Cursor cur = database.query(DB_TABLE, colms,null,null,null,null,null);
int iTask=cur.getColumnIndex(C_TASK);
int iDesc=cur.getColumnIndex(C_DESC);
for(cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext())
result = result + cur.getString(iTask) + "\t" + cur.getString(iDesc) + "\n";
return result;
private class DBHelper extends SQLiteOpenHelper
public DBHelper(Context context)
super(context, DB_NAME,null, DB_VER);
@Override
public void onCreate(SQLiteDatabase db)
db.execSQL(Q_CREATE);
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
在上面的代码中,我既不能读也不能写 C_DESC。我收到了 android studio 中这篇文章主题中所写的错误。这是我负责所有数据库操作的数据库类。当且仅当存在 C_TASK 时,它才能读写。如果两者都存在,则无法正常工作。该应用程序的目的是保存任务和描述并查看它。
【问题讨论】:
desc
是 SQL 中的保留字,因此您的代码可能不起作用。您正在检查错误并不明显。您应该修复您的代码,以便捕获错误。
我在需要的地方将 desc 更改为 descr 仍然在行代码处出现错误:: database.insert(DB_TABLE,null, cv);
在 logcat 09-23 19:28:17.964 26075-26075/pdatabase.rakesh.phobia.pdatabase E/SQLiteLog: (1) 表信息没有名为descr 09-23 19:28的列: 17.976 26075-26075/pdatabase.rakesh.phobia.pdatabase E/SQLiteDatabase: Error inserting descr=hcch task=jvf android.database.sqlite.SQLiteException: table Info 没有名为 descr (code 1) 的列:,编译时:INSERT INTO信息(描述,任务)值(?,?)
【参考方案1】:
您已使用实际列名C_DESC
创建了一个表,而不是使用该变量的内容。注意,顺便说一句,desc
是 SQL 中的保留字,所以如果你绝对必须将它用作列名,你应该用双引号将它括起来 ("
):
public static final String Q_CREATE =
"CREATE TABLE "+ DB_TABLE + " (" +
"\"" + C_TASK + "\" TEXT, " +
"\"" + C_DESC + "\" TEXT)";
【讨论】:
以上是关于表信息在编译插入时没有名为 Desc 的列的主要内容,如果未能解决你的问题,请参考以下文章