当我尝试将值插入数据库时,我无法弄清楚这个奇怪的错误
ERROR
01-01 15:48:56.065 10056-10056/com.autophone E/SQLiteLog﹕ (1) table mainTable has no column named status_date
01-01 15:48:56.100 10056-10056/com.autophone E/SQLiteDatabase﹕ Error inserting status_date=1 בינו 2000 15:48:56 problem=non model=N9005 phone_number=123 in_date=1 בינו 2000 15:48:56 status=received name=ian
android.database.sqlite.SQLiteException: table mainTable has no column named status_date (code 1): , while compiling: INSERT INTO mainTable(status_date,problem,model,phone_number,in_date,status,name) VALUES (?,?,?,?,?,?,?)
它的主要观点是我在主表中没有“status_date” 但是怎么可能呢?
public static final String KEY_ROWID = "_id";
public static final int COL_ROWID = 0;
private static final String KEY_NAME = "name";//1
private static final String KEY_MODEL = "model";//2
private static final String KEY_PHONE_NUMBER = "phone_number";//3
private static final String KEY_PROBLEM = "problem";//4
private static final String KEY_STATUS = "status";//5
private static final String KEY_IN_DATE = "in_date";//6
private static final String KEY_STATUS_DATE = "status_date";//7
public static final String DATABASE_NAME = "MyDb";
public static final String DATABASE_TABLE = "mainTable";
public static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE_SQL =
"create table " + DATABASE_TABLE
+ " (" + KEY_ROWID + " integer primary key autoincrement, "
+ KEY_NAME + " text not null, "
+ KEY_MODEL + " text not null, "
+ KEY_PHONE_NUMBER + " text not null, "
+ KEY_PROBLEM + "text not null, "
+ KEY_STATUS + "text not null, "
+ KEY_IN_DATE + "text not null, "
+ KEY_STATUS_DATE + "text not null "
+");";
这里是......
这是输入部分
long newID=myDB.insertRow(new LogEntery("ian","N9005","123","non"));
logentery是我使用的类,它还为数据添加了其余的
public LogEntery(String name,String model,String phone_number,String problem)
{
super();
this.name=name;
this.model=model;
this.phone_number=phone_number;
this.problem=problem;
this.in_date = DateFormat.getDateTimeInstance().format(new Date());
this.status_date = DateFormat.getDateTimeInstance().format(new Date());
this.status = "received";
}
顺便说一下......我如何更改getDateTimeInstance以获取DD / MM / YYYY而不是完整的数据/时间?
答案 0 :(得分:3)
常见的错误来源是数据库版本。
如果您在桌面中没有KEY_STATUS_DATE
字段的情况下至少运行了一次应用,然后添加了该字段并运行了应用,则表格将不会更新(onUpgrade()
将不会被调用),因为系统认为数据库没有改变。
尝试提升版本。
public static final int DATABASE_VERSION = 2;
有了这个,系统就会想到“哦,有一个新版本的数据库,让我们调用onUpgrade()”。理想情况下,通过此方法,您可以手动删除表onCreate(SQLiteDatabase db)
,或执行一些DDL语句以添加缺少的字段。
答案 1 :(得分:1)
您可以检查手机中的数据库,看看是否真的没有名为status_date的列。
解决你的“顺便说一句”:
SimpleDateFormat dateFormatGmt = new SimpleDateFormat(“dd / MM / yyyy”); String dateString = dateFormatGmt.format(new Date());
答案 2 :(得分:0)
我的建议是从一个有效的基本模式开始,然后编写你的抽象层。我退后一步,确保所有假设都是正确的。
例如,构造函数有4个参数,而表中有8列,构造函数中有7个setter。看起来你可能只是一个接一个,一目了然。如果没有,它仍然有点混乱。我要么在构造函数中要求语句的所有参数,要么以某种方式标记可选字段(即使用no-args构造函数重载方法调用等)。
希望我的意见有用。
布兰登