玩转android sqlLite---(附android DB的图行工具)

标签: android sqllite android | 发表时间:2011-12-16 12:25 | 作者:baolong47
出处:http://blog.csdn.net

捣鼓android一年多了,总结一下sqlLite的开发经验。

 

sqlLite就像个迷你数据库,配套的操作工具还不完善,操作起来不直观。不像oracle、mysql那样有图形化的操作工作。

 

偶然在网上发现一款操作sqlLite的图形化工具  ----  SQLiteSpy(后附上链接)。如下图:

 

 怎么样!嘿嘿,虽然功能还显简单,但对开发者来说,起码说看到比较直观的界面。

 

操作步骤很简单,首先导入sqlLite 的DB文件(即File Explorer   /data /data/   ),然后进行各种sql操作。

 

顺便写一下,我常用到的sqlLite操作类,对增删查改进行了简单的封装。

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper {
	static private DatabaseHelper mDbHelper;
	static private SQLiteDatabase mDb;

	private static final String DATABASE_NAME = "zhyy.db";
	
	private static final int DATABASE_VERSION = 1;

	private final Context mCtx;

	private static class DatabaseHelper extends SQLiteOpenHelper {

		DatabaseHelper(Context context) {
			super(context, DATABASE_NAME, null, DATABASE_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			
		}
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			
		}
	}

	public DBHelper(Context ctx) {
		this.mCtx = ctx;
	}

	public DBHelper open() throws SQLException {
		mDbHelper = new DatabaseHelper(mCtx);
		mDb = mDbHelper.getWritableDatabase();
		return this;
	}

	public void closeclose() {
		
		mDb.close();
		mDbHelper.close();
	}

	/**
	 * 插入数据
	 * 参数:tableName 表名
	 * initialValues 要插入的列对应值
	 *   */
	public long insert(String tableName,ContentValues initialValues) {
		
		return mDb.insert(tableName, null, initialValues);
	}

	
	/**
	 * 删除数据
	 * 参数:tableName 表名
	 * deleteCondition 删除的条件
	 * deleteArgs 如果deleteCondition中有“?”号,将用此数组中的值替换
	 *   */
	public boolean delete(String tableName,String deleteCondition,String[] deleteArgs) {
		
		return mDb.delete(tableName, deleteCondition, deleteArgs) > 0;
	}
	
	
	/**
	 * 更新数据
	 * 参数:tableName 表名
	 * initialValues 要更新的列
	 * selection 更新的条件
	 * selectArgs 如果selection中有“?”号,将用此数组中的值替换
	 *   */
	public boolean update(String tableName,ContentValues initialValues,String selection,String[] selectArgs) {
		int returnValue = mDb.update(tableName, initialValues, selection, selectArgs);
		
		return  returnValue > 0;
 	}

	/**
	 * 取得一个列表
	 * 参数:tableName 表名
	 * columns 返回的列
	 * selection 查询条件
	 * selectArgs 如果selection中有“?”号,将用此数组中的值替换
	 *   */
	public Cursor findList(String tableName,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy) {

		return mDb.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy);
	}

	/**
	 * 取得单行记录
	 * 参数:tableName 表名
	 * columns 返回的列
	 * selection 查询条件
	 * selectArgs 如果selection中有“?”号,将用此数组中的值替换
	 *   */
	public Cursor findInfo(String tableName,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit,boolean distinct) throws SQLException {

		Cursor mCursor = mDb.query(distinct, tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit);
		
		
		if (mCursor != null) {
			mCursor.moveToFirst();
		}
		return mCursor;

	}

	/**
	 * 执行sql
	 * 参数:sql 要执行的sql
	 
	 *   */
	public void execSQL(String sql){
		mDb.execSQL(sql);
		
	}
	
	/**
	    * 判断某张表是否存在
	    * @param tabName 表名
	    * @return
	    */
	public boolean isTableExist(String tableName){
	           boolean result = false;
	           if(tableName == null){
	                   return false;
	           }
	          
	           try {
	        	   Cursor cursor = null;
	                   String sql = "select count(1) as c from sqlite_master where type ='table' and name ='"+tableName.trim()+"' ";
	                   cursor = mDb.rawQuery(sql, null);
	                   if(cursor.moveToNext()){
	                           int count = cursor.getInt(0);
	                           if(count>0){
	                                   result = true;
	                           }
	                   }
	                   
	                   
	                   cursor.close();
	           } catch (Exception e) {
	                   // TODO: handle exception
	           }                
	           return result;
	   }
		 
		
			/**
		    * 判断某张表中是否存在某字段(注,该方法无法判断表是否存在,因此应与isTableExist一起使用)
		    * 
		    * @param tabName 表名
		    * @return
		    */
			 public boolean isColumnExist(String tableName,String columnName){
		           boolean result = false;
		           if(tableName == null){
		                   return false;
		           }
		         
		          
		           try {
		        	   Cursor cursor = null;
		                   String sql = "select count(1) as c from sqlite_master where type ='table' and name ='"+tableName.trim()+"' and sql like '%"+ columnName.trim() +"%'" ;
		                   cursor = mDb.rawQuery(sql, null);
		                   if(cursor.moveToNext()){
		                           int count = cursor.getInt(0);
		                           if(count>0){
		                                   result = true;
		                           }
		                   }
		                   
		                   
		                   cursor.close();
		           } catch (Exception e) {
		                   // TODO: handle exception
		           }                
		           return result;
		   }
			 
			 
			 
			

	
}


好吧,也顺便写一下各种增删查改的sql。

 

package com.android.mission.test;

import com.android.mission.util.DBHelper;

import android.content.ContentValues;
import android.database.Cursor;
import android.test.AndroidTestCase;
import android.util.Log;
/**
 * 单元测试操作sqlLite的各种sql
 */
public class testSqlLite extends AndroidTestCase{
	
	/**
	 * 创建表
	 * @throws Exception
	 */
	public void createTable() throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		
		String deleteSql = "drop table if exists user ";   
		dbHelper.execSQL(deleteSql);
		
		 //id是自动增长的主键,username和 password为字段名, text为字段的类型
		String sql = "CREATE TABLE user (id integer primary key autoincrement, username text, password text)";  
		dbHelper.execSQL(sql);
		dbHelper.closeclose();
	}
	
	/**
	 * 插入数据
	 * @throws Exception
	 */
	public void insert() throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		
		ContentValues values =  new ContentValues();  //相当于map
		
		values.put("username", "test");
		values.put("password", "123456");

		dbHelper.insert("user", values);
		
		dbHelper.closeclose();
	}
	
	/**
	 * 更新数据
	 * @throws Exception
	 */
	public void update() throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		ContentValues initialValues = new ContentValues();
		initialValues.put("username", "changename");  //更新的字段和值
		dbHelper.update("user", initialValues, "id = '1'", null);   //第三个参数为 条件语句
		
		dbHelper.closeclose();
	}
	
	
	/**
	 * 删除数据
	 * @throws Exception
	 */
	public void delete() throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		
		String testId = "1";
		dbHelper.delete("user", "id = '"+ testId +"'", null);
		
		dbHelper.closeclose();
	}
	
	
	/**
	 * 增加字段
	 * @throws Exception
	 */
	public void addColumn() throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		
		String updateSql = "alter table user add company text";
		dbHelper.execSQL(updateSql);
	}
	
	/**
	 * 查询列表
	 * @throws Exception
	 */
	public void selectList()throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		Cursor returnCursor = dbHelper.findList("user",new String[] {"id","username", "password"}, "username = 'test'", null,null, null, "id desc");
		while(returnCursor.moveToNext()){
			String id = returnCursor.getString(returnCursor.getColumnIndexOrThrow("id"));
			String username = returnCursor.getString(returnCursor.getColumnIndexOrThrow("username"));
			String password = returnCursor.getString(returnCursor.getColumnIndexOrThrow("password"));
		}
	}
	
	/**
	 * 某条信息
	 * @throws Exception
	 */
	public void selectInfo()throws Exception{
		DBHelper dbHelper = new DBHelper(this.getContext());
		dbHelper.open();
		Cursor returnCursor = dbHelper.findList("user",new String[] {"id","username", "password"}, "id = '1'", null,null, null, "id desc");
		if (returnCursor.getCount() > 0) {
			returnCursor.moveToFirst();
			String id = returnCursor.getString(returnCursor.getColumnIndexOrThrow("id"));
			String username = returnCursor.getString(returnCursor.getColumnIndexOrThrow("username"));
			String password = returnCursor.getString(returnCursor.getColumnIndexOrThrow("password"));
		}
	}
}


 

 

作者:baolong47 发表于2011-12-16 12:25:02 原文链接
阅读:13 评论:0 查看评论

相关 [android sqllite android] 推荐:

玩转android sqlLite---(附android DB的图行工具)

- - CSDN博客推荐文章
捣鼓android一年多了,总结一下sqlLite的开发经验. sqlLite就像个迷你数据库,配套的操作工具还不完善,操作起来不直观. 不像oracle、mysql那样有图形化的操作工作. 偶然在网上发现一款操作sqlLite的图形化工具  ----  SQLiteSpy(后附上链接). 嘿嘿,虽然功能还显简单,但对开发者来说,起码说看到比较直观的界面.

SQLLite的适用场景

- - ITeye博客
作为数据库引擎SQLite适用于中小规模流量的网站(也就是说, 99.9%的网站). SQLite可以处理多少网站流量在于网站的数据库有多大的压力. 通常来说, 如果一个网站的点击率少于100000次/天的话, SQLite是可以正常运行的. 100000次/天是一个保守的估计, 不是一个准确的上限.

Android 遥控车

- CasparZ - LinuxTOY
您确定您真的会用 Android 手机玩赛车. 16 岁的法国学生 Jonathan Rico 使用 Android 手机通过蓝牙实现了对改装玩具汽车的遥控. 操控的方式和那些标榜的智能手机游戏一样,使用重力感应,差别是这次控制的是现实世界中的遥控汽车. 收藏到 del.icio.us |.

Android免费?毛

- Ruby - FeedzShare
来自: 36氪 - FeedzShare  . 发布时间:2011年08月17日,  已有 2 人推荐. 微软CEO Steve Ballmer在预测竞争对手产品时通常口无遮拦. 比如他去年抨击Google的Android战略时,很多人都不屑一顾. 接着Android蚕食了微软的地盘,后来又开始侵犯苹果的地盘.

GetEd2k (Android应用)

- 某牢 - eMule Fans 电骡爱好者
GetEd2k是一个Android应用程序,作者是anacletus. 此应用可以帮助你把网页中的电驴(eDonkey) 链接添加到你个人电脑的电驴客户端里,不过前提是你的客户端开启了用于远程控制的Web interface(Web服务器,网页接口,Web界面),当然,eMule(电骡), MLDonkey 和 aMule 都支持该功能,所以这三种主流电驴客户端的用户都可以使用GetEd2k.

Android 4.0发布

- coofucoo - Solidot
Shawn the R0ck 写道 "2011年10月19日早上10点,谷歌与三星联手在香港发布了Android 4.0和Galaxy Nexus. " Android 4.0 的主要特性包括:更精细的UI,加强多任务和通知功能,锁屏下可打开摄像头和浏览通知,改进文本输入和拼写检查;增强视频录制和图像编辑功能,支持剪裁和旋转图片、消除红眼、添加效果等;面部识别解锁;Android Beam允许两台支持NFC的设备之间交换应用程序、联系人、音乐和视频;Wi-Fi Direct,蓝牙HDP,等等.

NoScript For Android发布

- John - Solidot
用于屏蔽脚本的浏览器流行扩展NoScript发布了Android版本. 开发者称已经在Firefox for Android测试过,此外也应该能工作在基于Maemo的设备上. 移动版NoScript可以帮助移动用户抵抗基于脚本的攻击. Android平台上的扩展功能和桌面版相似,允许用户对每个网站单独设置脚本执行许可.

Android入门:ContentProvider

- - ITeye博客
一、ContentProvider介绍. ContentProvider翻译为“内容提供者”;. 定义:指该应用包含一些方法,供外界访问,其他应用程序可以调用该方法,比如如果应用A创建了一个数据库“test.db”,默认是私有的,即其他应用程序不能对其进行操作,但是如果应用A使用了ContentProvider,则其他应用程序可以访问该数据库;.

Android Service 详解

- - CSDN博客移动开发推荐文章
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面. 其它的应用程序组件可以启动一个Service,即使在用户切换到另外一个应用程序后,这个Service还是一直会在后台运行. 此外,一个应用程序也可以绑定到一个Service然后使用进程间通信(IPC)方式与Service之间发生交互.