一、應用場景
最近在項目中使用了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_master
爲 SQLite
隱藏系統表
select * from sqlite_master where name='表名' and sql like '%列名%';
(2)ResultSet 判斷結果集是否爲空
ResultSet
表示 select 語句
的查詢結果集。
ResultSet
對象具有指向其當前數據行的指針最初,指針被置於第一行記錄之前,通過 next()方法
可以將指針移動到下一行記錄。
next()方法
在 ResultSet對象
沒有一行記錄時返回 false
,因此可以在while循環中使用它來
遍歷結果集,也可以利用 if()方法
判斷結果集是否爲空。