但是如果这个字段已经存在的话,运行程序直接会崩溃,我们可以在添加字段之前,对数据库进行判断看是否已经存在该字段了,方法如下:
SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列),但是我们不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称、数据类型、限定符等等。
改变表让仿名 - ALTER TABLE 旧表名 RENAME TO 新表名
增加一列 - ALTER TABLE 表搜祥名 ADD COLUMN 列名 数据类型
而修改一列无法像其他数据库那样直接以“ALTER TABLE 表名 ADD COLUMN 列名 数据类型”的方式来完成,所以要换种思路,具体步骤看下面:
将表名改为临时表
ALTER TABLE "Student" RENAME TO "_Student_old_20140409"
创建新表
CREATE TABLE "Student" (
"Id" INTEGER PRIMARY KEY AUTOINCREMENT,
"Name" Text)
导入数据
INSERT INTO "Student" ("Id", "Name") SELECT "Id", "Title" FROM "_Student_old_20140409"
更新sqlite_sequence
UPDATE "sqlite_sequence" SET seq = 3 WHERE name = 'Student'
由于在Sqlite中使世滑搏用自增长字段,引擎会自动产生一个sqlite_sequence表,用于记录每个表的自增长字段的已使用的最大值,所以要一起更新下。如果有没有设置自增长,则跳过此步骤。
删除临时表(可选)
DROP TABLE _Student_old_20140409
sqlite数据库中插入date类型用string类型含盯,如下旁老誉:public void insert(String dailyGuid, String dailyCreateDate, String dailyUpdateDate, String dailyContactGuid,
String dailyEmployeeGuid, String dailyContent, String dailyType, String dailyTypeValue,
String dailyEstimateRate, String dailyRealRate, String dailyMemo, String dailyApproval,
String dailyExecuteDate, String dailyRemindSign, String dailyTime, String dailyIsdel){
SQLiteDatabase db=this.getWritableDatabase()
db.execSQL("INSERT INTO TBL_DAILY(dailyGuid, dailyCreateDate, dailyUpdateDate, dailyContactGuid, " +
"dailyEmployeeGuid, dailyContent, dailyType, dailyTypeValue, " +
"dailyEstimateRate, dailyRealRate, dailyMemo, dailyApproval, " +
"dailyExecuteDate, dailyRemindSign, dailyTime, dailyIsdel) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
new String[]{dailyGuid, dailyCreateDate, dailyUpdateDate, dailyContactGuid,
dailyEmployeeGuid, dailyContent, dailyType, dailyTypeValue,
dailyEstimateRate, dailyRealRate, dailyMemo, dailyApproval,
dailyExecuteDate, dailyRemindSign, dailyTime, dailyIsdel})
}
更新动运段作如下:
public void update(String dailyGuid, String dailyCreateDate, String dailyUpdateDate, String dailyContactGuid,
String dailyEmployeeGuid, String dailyContent, String dailyType, String dailyTypeValue,
String dailyEstimateRate, String dailyRealRate, String dailyMemo, String dailyApproval,
String dailyExecuteDate, String dailyRemindSign, String dailyTime, String dailyIsdel){
SQLiteDatabase db=this.getWritableDatabase()
ContentValues cv=new ContentValues()
cv.put("dailyGuid", dailyGuid)
cv.put("dailyCreateDate", dailyCreateDate)
cv.put("dailyUpdateDate", dailyUpdateDate)
cv.put("dailyContactGuid", dailyContactGuid)
cv.put("dailyEmployeeGuid", dailyEmployeeGuid)
cv.put("dailyContent", dailyContent)
cv.put("dailyType", dailyType)
cv.put("dailyTypeValue", dailyTypeValue)
cv.put("dailyEstimateRate", dailyEstimateRate)
cv.put("dailyRealRate", dailyRealRate)
cv.put("dailyMemo", dailyMemo)
cv.put("dailyApproval", dailyApproval)
cv.put("dailyExecuteDate", dailyExecuteDate)
cv.put("dailyRemindSign", dailyRemindSign)
cv.put("dailyTime", dailyTime)
cv.put("dailyIsdel", dailyIsdel)
db.update("TBL_DAILY", cv, "dailyGuid=?", new String[]{dailyGuid})
}
public void delete(String dailyGuid){
SQLiteDatabase db=this.getWritableDatabase()
db.delete("TBL_DAILY", "dailyGuid=?", new String[]{dailyGuid})
}
注意:sqlite其中的数据 类型是可以很容易的进行转换的,提取的时候如果需要可以将String在转为date类型就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)