package com.metoo.girls;

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

/**
 * @author wbhuang
 * @time 20130912
 * @description 数据库操作封装
 */
public class GirlsDbHelper {
	private static String TAG = "GirlsDbHelper";
	private static GirlsDbHelper girlsDbHelper = null;
	private static DatabaseHelper dbHelper;
	private static SQLiteDatabase db;
	private static final String GRILS_DB_NAME = "girls.db";
	private static final int GIRLS_DB_VERSION = 1;
	private Context context;

	private GirlsDbHelper(Context c) {
		context = c;
	}

	private static class DatabaseHelper extends SQLiteOpenHelper {
		public DatabaseHelper(Context c) {
			super(c, GRILS_DB_NAME, null, GIRLS_DB_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase arg0) {
		}

		@Override
		public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
		}
	} 

	public static GirlsDbHelper getInstance(Context c) {
		if (null == girlsDbHelper) {
			girlsDbHelper = new GirlsDbHelper(c);
		}
		return girlsDbHelper;
	}

	/**
	 * 打开数据库
	 */
	public void open() {
		Log.v(TAG, "open");
		dbHelper = new DatabaseHelper(context);
		db = dbHelper.getWritableDatabase();
	}

	/**
	 * 关闭数据库
	 */
	public void close() {
		Log.v(TAG, "close");
		db.close();
		dbHelper.close();
	}

	/**
	 * 插入数据
	 * @param tblName 表名
	 * @param values 要插入的列对应值
	 * @return
	 */
	public long insert(String tblName, ContentValues values) {
		return db.insert(tblName, null, values);
	}

	/**
	 * 删除数据
	 * @param tblName 表名
	 * @param deleteCondition 删除条件
	 * @param deleteArgs 如果deleteCondition中有"?"号,将用次数组替换
	 * @return
	 */
	public long delete(String tblName, String deleteCondition, String[] deleteArgs) {
		return db.delete(tblName, deleteCondition, deleteArgs);
	}

	/**
	 * 更新数据
	 * @param tblName 表名
	 * @param values 要更新的列
	 * @param selection 更新的条件
	 * @param selectArgs 如果selection中有"?"将由此数组中的值替换
	 * @return
	 */
	public long update(String tblName, ContentValues values, String selection, String[] selectArgs) {
		return db.update(tblName, values, selection, selectArgs);
	}

	/**
	 * 查询多行数据
	 * @param tblName 表名
	 * @param columns 查询的列
	 * @param selection 查询条件
	 * @param selectionArgs 如果selection中有"?"将由此数组中的值替换
	 * @return
	 */
	public Cursor queryList(String tblName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
		return db.query(tblName, columns, selection, selectionArgs, groupBy, having, orderBy);
	}

	/**
	 * 查询单行数据
	 * @param tblName 表名
	 * @param columns 查询的列
	 * @param selection 查询条件
	 * @param selectionArgs 如果selection中有"?"将由此数组中的值替换
	 * @return
	 */
	public Cursor queryOne(String tblName, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {
		Cursor cursor = db.query(tblName, columns, selection, selectionArgs, groupBy, having, orderBy);
		if (cursor != null) {
			cursor.moveToFirst();
		}
		return cursor;
	}

	/**
	 * 执行SQL语句
	 * @param sql
	 */
	public void execSQL(String sql){
		db.execSQL(sql);
	}  

	/**
	 * 判断表是否存在
	 * @param tableName
	 * @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 = db.rawQuery(sql, null);
			if(cursor.moveToNext()){
				int count = cursor.getInt(0);
				if(count > 0){
					result = true;
				}
			}
			cursor.close();
		} catch (Exception e) {
			Log.e(TAG, "isTableExist exception");
		}
		return result;
	}  

	 /**
	  * 判断是否存在某字段(要先判断表是否存在)
	  * @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 = db.rawQuery(sql, null);
			if(cursor.moveToNext()){
				int count = cursor.getInt(0);
				if(count > 0){
					result = true;
				}
			}
			cursor.close();
		} catch (Exception e) {
			Log.e(TAG, "isColumnExist exception");
		}
		return result;
	}  

}
package com.metoo.girls;

import android.content.ContentValues;
import android.database.Cursor;
import android.test.AndroidTestCase;
import android.util.Log;
/**
 * 单元测试操作sqlLite的各种sql
 */
public class GirlsDbHelperTest extends AndroidTestCase{
	/**
	 * 创建表
	 * @throws Exception
	 */
	public void createTable() throws Exception{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(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.close();
	}

	/**
	 * 插入数据
	 * @throws Exception
	 */
	public void insert() throws Exception{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(this.getContext());
		dbHelper.open();
		ContentValues values =  new ContentValues();  //相当于map
		values.put("username", "test");
		values.put("password", "123456");
		dbHelper.insert("user", values);
		dbHelper.close();
	}

	/**
	 * 更新数据
	 * @throws Exception
	 */
	public void update() throws Exception{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(this.getContext());
		dbHelper.open();
		ContentValues initialValues = new ContentValues();
		initialValues.put("username", "changename");  //更新的字段和值
		dbHelper.update("user", initialValues, "id = '1'", null);   //第三个参数为 条件语句
		dbHelper.close();
	}

	/**
	 * 删除数据
	 * @throws Exception
	 */
	public void delete() throws Exception{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(this.getContext());
		dbHelper.open();
		String testId = "1";
		dbHelper.delete("user", "id = '"+ testId +"'", null);
		dbHelper.close();
	}

	/**
	 * 增加字段
	 * @throws Exception
	 */
	public void addColumn() throws Exception{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(this.getContext());
		dbHelper.open();
		String updateSql = "alter table user add company text";
		dbHelper.execSQL(updateSql);
	}

	/**
	 * 查询列表
	 * @throws Exception
	 */
	public void selectList() throws Exception{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(this.getContext());
		dbHelper.open();
		Cursor returnCursor = dbHelper.queryList("tbl_sexy_state", new String[] {"id", "index", "unlocked"}, "index = ", 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{
		GirlsDbHelper dbHelper = GirlsDbHelper.getInstance(this.getContext());
		dbHelper.open();
		Cursor returnCursor = dbHelper.queryList("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"));
		}
	}
}

关于android的DB操作的更多相关文章

  1. [Android] Android 使用 Greendao 操作 db sqlite(2)-- 封装DaoUtils类

    继续接上文: Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用 布局文件同上文一致,这里就不贴了. 一.封装DaoUtils类 User ...

  2. [Android] Android 使用 Greendao 操作 db sqlite(1)-- 直接在MainActivity中调用

    继续接上文: Android 使用 Greendao 操作 db sqlite 布局文件: activity_test_green.xml <?xml version="1.0&quo ...

  3. [Android] Android 使用 Greendao 操作 db sqlite

    Android 使用 Greendao 操作 db sqlite GreenDAO是一个开源的安卓ORM框架,能够使SQLite数据库的开发再次变得有趣.它减轻开发人员处理低级数据库需求,同时节省开发 ...

  4. android管理联系人操作

    ContentProvider扩展之管理系统联系人 我们都知道ContentProvider是用来共享数据的,然而android本身就提供了大量的ContentProvider,例如联系人信息,系统的 ...

  5. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  6. 【转】Android 使用ORMLite 操作数据库

    Android 使用ORMLite 操作数据库   用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步: 下载ormlite-android-4.41.jar和ormlite-core-4.4 ...

  7. Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容

    Android开发---如何操作资源目录中的资源文件4 XML,位于res/xml/,这些静态的XML文件用于保存程序的数据和结构. XmlPullParser可以用于解释xml文件 效果图: 描述: ...

  8. Android开发---如何操作资源目录中的资源文件3--圆角边框、背景颜色渐变效果、边框颜色

    Android开发---如何操作资源目录中的资源文件3 效果图 1.圆角边框 2.背景颜色渐变效果 1.activity_main.xml 描述: 定义了一个shape资源管理按钮 <?xml ...

  9. Android开发 ---如何操作资源目录中的资源文件2

    Android开发 ---如何操作资源目录中的资源文件2 一.颜色资源管理 效果图: 描述: 1.改变字体的背景颜色 2.改变字体颜色 3.改变按钮颜色 4.图像颜色切换 操作描述: 点击(1)中的颜 ...

随机推荐

  1. Morris Traversal 方法遍历二叉树(非递归、不用栈,O(1)空间)

    http://www.cnblogs.com/AnnieKim/archive/2013/06/15/MorrisTraversal.html

  2. docker命令解析

    1.docker run --name lllllll  -d -p 8080:8080 -p 9000:9000  镜像id          将docker8080端口映射到服务器的8080端口 ...

  3. jmeter录制接口以及并发测试

    http://jingyan.baidu.com/article/15622f2475601dfdfdbea548.html

  4. XPath用法详解

    1.XPath是什么 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航(你可以理解为一种类似正则表达式的方法) 2.XPath的语法 表达式 ...

  5. css解析规则

    1.因为css对空格不敏感,因此在每个样式后都要加一个分号,不然会把写在后面的样式当成一个整体来解析,直到遇到分号为止. 2.当遇见不认识的属性或值时,将忽略这个属性,继续解析后面的属性. 3.对于复 ...

  6. db2数据备份与恢复

    备份:先关掉所有tomcat运行:db2cmd db2Stop force db2Start DB2 FORCE APPLICATIONS ALL DB2 BACKUP DATABASE histes ...

  7. 【Vue 学习系列 - 01】- 环境搭建(Win7)

    1. 根据系统下载Node.js 下载地址:http://nodejs.cn/download 2. 安装Node.js 点击安装Node.js,在安装目录D:\Program Files\nodej ...

  8. 【flyway】Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' def

    报错如下: "2018-03-20 12:58:09.585 WARN 18026 — [ restartedMain] ConfigServletWebServerApplicationC ...

  9. IOS常见错误分析解决(一直更新) 你值得收藏-综合贴

    -来自收藏总结 综合了好多的常见错误 1:clang failed with exit code 254 一:检測代码中 是否 有 NSLog 打印了 返回 void 的值. 2:Verify exi ...

  10. 源码编译安装php

    原文:https://klionsec.github.io/2017/11/23/phpsec/#menu After compile install php 5.3.1, I can not fin ...