【SQLite】常用操作SQL及压缩SQLite的实例代码

本文介绍了一个具体的数据库操作实现案例,包括创建ID自增的数据表、查询数据、更新数据、删除记录和整理数据库文件等内容。该实现涵盖了基本的数据库操作流程。

1、创建ID自增的Data表

	/**
	 * 创建发送失败的信息的Data表的SQL
	 */
	public static final String createDataTable = 
			"CREATE TABLE IF NOT EXISTS "+ DataModel.TABLE_DATA_NAME + "(" 
			+ DataModel.DATA_MODEL_ID + " integer PRIMARY KEY AUTOINCREMENT,"
			+ DataModel.DATA_MODEL_MAC + " varchar(30),"
			+ DataModel.DATA_MODEL_TYPE + " varchar(20),"
			+ DataModel.DATA_MODEL_RRCODE + " integer(10),"
			+ DataModel.DATA_MODEL_SENDCOUNT + " integer(5),"
			+ DataModel.DATA_MODEL_CREATETIME + " varchar(20),"
			+ DataModel.DATA_MODEL_SENDLASTTIME + " varchar(20),"
			+ DataModel.DATA_MODEL_CONTENT + " varchar(800)"
			+")";

2、查询

	/**
	 * 将ID按升序排序,并取出前count条数据
	 * @param count
	 * @return
	 */
	public List<DataModel> queryDataModelListByCount(int count){
		String sql = "select * from " + DataModel.TABLE_DATA_NAME +" order by " + DataModel.DATA_MODEL_ID + " asc" + " limit 0," + count;
		List<DataModel> dmList = queryDataModelList(sql, null);
		return dmList;
	}	
	
	/**
	 * 查询指定条件的Data表记录
	 * @param sql
	 * @param params
	 * @return
	 */
	private List<DataModel> queryDataModelList(String sql, String[] params){
			List<DataModel> dmList=new ArrayList<DataModel>();
			try{
				Cursor cs=db.rawQuery(sql, params);
				if(cs!=null && cs.getCount()>0){
					if(GamConstants.DebugMode){
						Log.d(TAG, "queryMobileModelList count="+cs.getCount());
					}
					int i=0;
					for( cs.moveToFirst(); i<cs.getCount(); cs.moveToNext(), ++i){
						DataModel dm=new DataModel();
						dm.setId(cs.getInt(cs.getColumnIndex(DataModel.DATA_MODEL_ID)));
						dm.setMac(cs.getString(cs.getColumnIndex(DataModel.DATA_MODEL_MAC)));
						dm.setType(cs.getString(cs.getColumnIndex(DataModel.DATA_MODEL_TYPE)));
						dm.setReasonResultCode(cs.getInt(cs.getColumnIndex(DataModel.DATA_MODEL_RRCODE)));
						dm.setSendCount(cs.getInt(cs.getColumnIndex(DataModel.DATA_MODEL_SENDCOUNT)));
						dm.setCreateTime(cs.getString(cs.getColumnIndex(DataModel.DATA_MODEL_CREATETIME)));
						dm.setSendLastTime(cs.getString(cs.getColumnIndex(DataModel.DATA_MODEL_SENDLASTTIME)));
						dm.setContent(cs.getString(cs.getColumnIndex(DataModel.DATA_MODEL_CONTENT)));
						dmList.add(dm);
					}
				}
			}catch(Exception e){
				e.printStackTrace();
				Log.e(TAG, "queryDataModelList error");
				close();
			}
			return dmList;
	}

3、更新

	/**
	 * 更新相应数据的相应信息,如发送次数,失败码等
	 * @param dmList
	 */
	public void updateDataModelList(List<DataModel> dmList){
		db.beginTransaction();
		
		try{
			for(int i=0; i<dmList.size(); i++){
				DataModel dm = dmList.get(i);
				String sql = "update " + DataModel.TABLE_DATA_NAME 
						+ " set " 
						+ DataModel.DATA_MODEL_SENDCOUNT + "=" + dm.getSendCount() + ", "
						+ DataModel.DATA_MODEL_RRCODE + "=" + dm.getReasonResultCode() + ","
						+ DataModel.DATA_MODEL_SENDLASTTIME + "='" + dm.getSendLastTime() + "'"
						+ " where "
						+ DataModel.DATA_MODEL_ID + "=" + dm.getId();
				db.execSQL(sql);
			}
			db.setTransactionSuccessful();  //设置事务成功完成 
			Log.d(TAG, "updateDataModelList OK");
		}catch(Exception e){
			e.printStackTrace();
			Log.e(TAG, "updateDataModelList error");
			close();
		}finally{
			db.endTransaction();
		}
	}

4、删除记录

	/**
	 * 删除数据库相应记录
	 * @param dmList
	 */
	public void deleteDataModelList(List<DataModel> dmList){
		try{
			String ids = "";
			for(int i=0; i<dmList.size(); i++){
				ids +=dmList.get(i).getId();
				if(i != (dmList.size()-1)){
					ids += ",";
				}
			}
			String sql = "delete from " + DataModel.TABLE_DATA_NAME + " where id in("+ids+")";
			db.execSQL(sql);
		}catch(Exception e){
			e.printStackTrace();
			Log.e(TAG, "deleteDataModelList error");
			close();
		}
	}

5、删除表

/**
	 * 升级数据库,删除相应表结构
	 * @param db
	 */
	public static void dropTables(SQLiteDatabase db){
		db.beginTransaction();
		db.execSQL("DROP TABLE IF EXISTS "+MobileModel.TABLE_MOBILE_NAME);
		db.execSQL("DROP TABLE IF EXISTS "+DataModel.TABLE_DATA_NAME);
		db.setTransactionSuccessful();
		db.endTransaction();
		
	}

6、整理DB文件空闲碎片,压缩DB文件无用空间

	/**
	 * 整理DB文件空闲碎片,压缩DB文件无用空间
	 */
	public void cleanDB(){
		try{
			db.execSQL("VACUUM");
			Log.i(TAG, "execSQL(VACUUM) success");
		}catch(Exception e){
			e.printStackTrace();
			Log.e(TAG, "execSQL(VACUUM) error");
			close();
		}
	}











1.建立C:\sqlite 目录,将解压的文件放入此文件夹中; 文件列表:2017-02-13 23:26 450,048 sqldiff.exe 2017-02-13 23:27 4,963 sqlite3.def 2017-02-13 23:27 845,402 sqlite3.dll 2017-02-13 23:27 701,952 sqlite3.exe 2017-02-13 23:27 1,974,784 sqlite3_analyzer.exe 2015-04-18 10:02 95,137 sqlite3命令方式操作大全.docx 2.添加系统环境变量, 在Path变量值后面添加 C:\sqlite;(英文分号不要忘记了) 3.命令行环境下即可运行sqlite3,运行后出现sqlite> 提示符 压缩包中内含:SQLite3命令操作大全(学习好助手!) 如:创建表: create table 表名(元素名 类型,…); 删除表: drop table 表名; 插入数据: insert into 表名 values(, , ,) ; 创建索引: create [unique] index 索引名on 表名(col….); 删除索引: drop index 索引名(索引是不可更改的,想更改必须删除重新建) 删除数据: delete from 表名; 更新数据: update 表名 set 字段=’修改后的内容’ where 条件; 增加一个列: Alter table 表名 add column 字段 数据类型; 选择查询: select 字段(以”,”隔开) from 表名 where 条件; 日期和时间: Select datetime('now') 日期: select date('now'); 时间: select time('now'); 总数:select count(*) from table1; 求和:select sum(field1) from table1; 平均:select avg(field1) from table1; 最大:select max(field1) from table1; 最小:select min(field1) from table1; 排序:select 字段 from table1 order by 字段(desc或asc) ;(降序或升序) 分组:select 字段 from table1 group by 字段,字段… ; 限制输出:select 字段 from table1 limit x offset y; = select?字段?from?table1 limit y , x; ......
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值