SQLite 添加列时,判断该列是否存在

一、应用场景

最近在项目中使用了SQLite,由于前期设计表结构不合理,后期需要添加新的字段。

当添加该字段时,需要先判断该列是否存在。如果不存在,则使用 ALTER 添加该字段。

二、代码实现

// 不能重复插入
String ADD_COLUMNS_PRINCIPAL = "ALTER TABLE project ADD COLUMN principal TEXT";
String ADD_COLUMNS_PHONE = "ALTER TABLE project ADD COLUMN phone TEXT";
ResultSet resultSetPrincipal =  stmt.executeQuery("select * from sqlite_master where name='project' and sql like '%principal%'");
if (!resultSetPrincipal.next()) { // 结果集为空
    stmt.execute(ADD_COLUMNS_PRINCIPAL);
}
ResultSet resultSetPhone = stmt.executeQuery("select * from sqlite_master where name='project' and sql like '%phone%'");
if (!resultSetPhone.next()) {
    stmt.execute(ADD_COLUMNS_PHONE);
}

三、原理

(1)判断某列是否存在

sqlite_masterSQLite 隐藏系统表

select * from sqlite_master where name='表名' and sql like '%列名%';

(2)ResultSet 判断结果集是否为空

ResultSet 表示 select 语句 的查询结果集。
ResultSet 对象具有指向其当前数据行的指针最初,指针被置于第一行记录之前,通过 next()方法 可以将指针移动到下一行记录。

next()方法ResultSet对象 没有一行记录时返回 false ,因此可以在while循环中使用它来
遍历结果集,也可以利用 if()方法 判断结果集是否为空。

你可能感兴趣的:(SQLIte,SQLite)