对于许久不用的东西,容易忘记。百度许久,也未能找到自己所要。
从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧。
1.创建表
2.表格是否存在
3.删除表格
4..增删改查
5.忽略大小写
1.创建表
public static final String KEY_SQL_WFTT = "CREATE TABLE " + KEY_TABLE_NAME + " (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_ORDER + " VARCHAR(20)," +
KEY_MATERIEL + " VARCHAR(20), " +
KEY_NAME + " VARCHAR(20), " +
KEY_SYS_QTY + " VARCHAR(9), " +
KEY_QTY + " VARCHAR(9), " +
KEY_USERNAME + " VARCHAR(20), " +
KEY_STATE + " VARCHAR(1), " +
KEY_DATE + " VARCHAR(10), " +
KEY_TIME + " VARCHAR(8) " +
")";
db.execSQL(KEY_SQL_WFTT);
注:VARCHAR 不会因为某个字符以“0”开头而省略“0”.
2.查询表是否存在
/**
* 表格是否存在
*
* @return
*/
public boolean hasTable() {
List<String> tab_names = new ArrayList<>();
Cursor cursor = db.rawQuery("select name from sqlite_master where type='table';", null);
while (cursor.moveToNext()) {
String name = cursor.getString(0);
tab_names.add(name);
}
return tab_names.contains(KEY_TABLE_NAME);
}
3.删除表格
/**
* 删除表格
*/
private void deleteTable() {
if (hasTable()) {
db.execSQL("DROP TABLE " + KEY_TABLE_NAME);
}
}
4.增删改查
4.1开启事务插入多笔数据
/**
* 开启事务插入多笔数据
*/
public void insertALLData(List<Info> infos) {
db.beginTransaction();
try {
for (Info info : infos) {
insertData(info);
}
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
db.endTransaction();
}
db.endTransaction();
}
4.2 插入数据
/**
* 插入单笔数据
*
* @param info
*/
public void insertData(Info info) {
ContentValues cv = new ContentValues();
cv.put(KEY_USERNAME, info.getUsername());
db.insert(KEY_TABLE_NAME, null, cv);
}
4.3 删除数据
/**
*删除数据
*/
public void deleteData(int id) {
//删除条件
String whereClause = "id=?";
//删除条件参数
String[] whereArgs = {String.valueOf(id)};
//执行删除
db.delete(KEY_TABLE_NAME,whereClause,whereArgs);
}
4.4 修改数据
/**
* 修改数据
*
* @param materiel
* @param qty
* @param status
* @return
*/
public int updateQty(String materiel, int qty, int status) {
//修改条件
String whereClause = "materiel = ? ;";
ContentValues cv = new ContentValues();
cv.put(KEY_DATE, TimeUtils.getDate());
cv.put(KEY_TIME, TimeUtils.getTime());
cv.put(KEY_USERNAME, SP.newInstance().getValue("username"));
cv.put(KEY_STATE, status);
cv.put(KEY_QTY, qty);
return db.update(KEY_TABLE_NAME, cv, whereClause, new String[]{materiel});
}
4.5 查询所有数据
/**
* 查询 info 所有数据
*
* @return
*/
public List<Info> queryALLInfoData() {
List<Info> infos = new ArrayList<>();
Cursor cursor = db.query(KEY_TABLE_NAME, null, null, null, null, null, null);
while (cursor.moveToNext()) {
Info info = new Info();
info.setUsername(cursor.getString(cursor.getColumnIndex(KEY_USERNAME)));
infos.add(info);
}
return infos;
}
4.6 根据条件查询数据
/**
* 校验扫描数据 物料号
*
* @return
*/
public boolean checkMateriel(String materiel) {
String sql = "SELECT * from " + KEY_TABLE_NAME + " WHERE " + KEY_MATERIEL + " = ? ";
Cursor cursor = db.rawQuery(sql, new String[]{materiel});
return cursor.moveToNext();
}
5.忽略大小写
方法一:使用大小写转换函数LOWER、UPPER(忽略大小写使用的为函数,影响查询速度,避免使用)
SELECT * FROM User WHERE LOWER(User) = ‘zhangsan′;
方法二:在进行比较时强制声明不区分大小写(特定对大小写忽略)
SELECT * FROM User WHERE User= ‘zhangsan′ COLLATE NOCASE;
方法三:创建表时声明该列不区分大小写(查询不变,针对任何时候忽略大小写)
CREATE TABLE User (User VARCHAR(20) COLLATE NOCASE);