Android开发-从硬件到APP(十) : 数据库的读写

Android开发-从硬件到APP(十) : 数据库的读写

        说好的写博客的事情又被搁浅了。真是~,每天光看星际老男孩的直播了,博客的事情被丢到了他奶奶家。现在终于回来写了,反正慢慢补吧,我也不知道能不能写到第十章,反正就这么起名字了。

高呼一声,干死黄旭东!!

        其实android是有一个SQLiteOpenHelper类来操作数据库的,不过限制多多(比如不能保存在SD卡中),而且对于学习SQL语句也没什么帮助,所以还是打算自己写一个类来操作数据库。鉴于我的数据库结构已经确定了,而且不会更改数据库里面的数据,所以就不重写update的方法了。。。。


我目前的项目是一个传感器采集的项目,涉及的气体有CH4,CO,O2,NO2。大体的就是这样了。

1.插入数据
我的表中有:
id:主键,自增的。
gas_type:气体类型
gas_original_value:采集气体原始数据
gas_valtage_value:转换后的电压值
gas_actual_value:  表示气体浓度的实际值
templeture:             采集数据时的温度值
system_date:          采集数据时的系统时间

我的这些方法全是写在一个Databaes的类中。所以使用的时候可以这样

		DataBase database = new DataBase();

		for(int i = 0;i<2000;i++)
			database.insertData("xxx.db3", "o2", 1234, 2.123, 1234.12354, i, date.getSystemDate());


         
        /**向一个表中插入数据,如果该表不存在,则创建他*/  
	public void insertData(String databaseFile ,String gas_type , int gas_original_value  
	,double gas_valtage_value,double gas_actual_value,int templeture ,String system_date)  
	{  
		SQLiteDatabase db;  
		db = SQLiteDatabase.openOrCreateDatabase("/sdcard/MultGasDetecter/database/"+databaseFile,null);  
		  
		  
		try  
		{  
			db.execSQL("insert into gas_data values(null, ? , ? , ? , ? , ? , ?)"  
			,new String[]{gas_type , gas_original_value+"",gas_valtage_value+"",gas_actual_value+""  
			,templeture+"",system_date+""});  
		}  
		catch(SQLiteException e2)  
		{   
			db.execSQL("create table gas_data(id integer primary key autoincrement,"  
			 +" gas_type varchar(30),"  
			 +" gas_original_value integer,"  
			 +" gas_valtage_value double precision,"  
			 +" gas_actual_value double precision,"  
			 +" templeture integer,"  
			 +" system_date varchar(30))");   
			db.execSQL("insert into gas_data values(null, ? , ? , ? , ? , ? , ?)"  
			,new String[]{gas_type , gas_original_value+"",gas_valtage_value+"",gas_actual_value+""  
			,templeture+"",system_date+""});  
			e2.printStackTrace();  
		}  
		debug("insertData");  
		if((db != null)&&db.isOpen())  
		{  
			db.close();  
		}  
	}  

2.   查询数据:注释写的够清晰了吧。。。。
返回的数据全部都是string型的
使用的方法已经写在注释中的eg:里了!
	 * 查询数据库中的某张表中的某列数据
	 * File:
	 * 		数据库文件名称,路径统一保存到/sdcard/MultGasDetecter/database/下
	 * table:
	 * 		要查询的数据库表名
	 * columnName:
	 * 		要查询的数据库的列名
	 * 
	 * 输入项为:
	 * 		id
	 * 		gas_type
	 * 		gas_original_value
	 * 		gas_valtage_value
	 * 		gas_actual_value
	 * 		templeture
	 * 		system_dat
	 * 
	 * eg::
	 * 		Database database = new Database();
	 * 		int len = database.queryDataByColumnName("test.db3","gas_data","gas_type").length;
	 *		debug("len = "+len);
	 *		String[] string = new String[len];
	 *		string = database.queryDataByColumnName("test.db3","gas_data","gas_type");
	 *	
	 *		for(int i = 0 ; i< len-1 ; i++)
	 *		{
	 *			debug(string[i]);
	 *		}
	 * 
	 * */
	public String[] queryData(String file,String table,String columnName,String begin_time ,String end_time)
	{
		String sqlQuery ;
		int m = 0;
		CharArrayBuffer array = new CharArrayBuffer(128);
		SQLiteDatabase db; 
		db = SQLiteDatabase.openOrCreateDatabase("/sdcard/MultGasDetecter/database/"+file,null);
		if((begin_time!=null)&&(end_time!=null))
		{
			sqlQuery = "select * from "+table+" where system_date>='"+begin_time+"' and system_date<='"+end_time+"';";
		}
		else
			sqlQuery = "select * from "+table+";";
		
		Cursor result = db.rawQuery(sqlQuery, null);
		debug("getColumnCount = "+result.getCount());
		String[] string = new String[result.getCount()];
		result.moveToFirst();
		
		if(columnName != null)
		{
			while(!result.isAfterLast())
			{ 
				try
				{
	//				debug("copyStringToBuffer");
					
					string[m]="";
					if(columnName.indexOf("id")!= -1)
					{
						result.copyStringToBuffer(0, array);
						string[m]+=getStringFromCharArrayBuffer(array);
					}
	
					if(columnName.indexOf("gas_type")!= -1)
					{
						result.copyStringToBuffer(1, array); 
						string[m]+=getStringFromCharArrayBuffer(array);
					}
	
					if(columnName.indexOf("gas_original_value")!= -1)
					{
						result.copyStringToBuffer(2, array);
						string[m]+=getStringFromCharArrayBuffer(array);
					}
	
					if(columnName.indexOf("gas_valtage_value")!= -1)
					{
						result.copyStringToBuffer(3, array);
						string[m]+=getStringFromCharArrayBuffer(array);
					}
	
					if(columnName.indexOf("gas_actual_value")!= -1)
					{
						result.copyStringToBuffer(4, array);
						string[m]+=getStringFromCharArrayBuffer(array);
					}
	
					if(columnName.indexOf("templeture")!= -1)
					{
						result.copyStringToBuffer(5, array);
						string[m]+=getStringFromCharArrayBuffer(array);
					}
	
					if(columnName.indexOf("system_dat")!= -1)
					{
						result.copyStringToBuffer(6, array);
						string[m]+=getStringFromCharArrayBuffer(array);
					}
					
//					debug(string[m]);
					m++;
					result.moveToNext();
				}
				catch(SQLiteException e)
				{
					debug("copy string error");
					e.printStackTrace(); 
				}	
			}
		}
		else
			debug("没有输入columnName");
		
		result.close();
		db.close();
		return string; 
	}
       /**
	 * 根据时间查询数据库中的所有列中的数据
	 * */
	public String[] queryDataByDate(String file,String table,String begin_time ,String end_time)
	{
		return queryData( file, table, "id gas_type gas_original_value gas_valtage_value gas_actual_value templeture system_dat", begin_time , end_time);
	}

	public String[] queryDataByColumnName(String file,String table,String columnName)
	{
		return queryData( file, table, "columnName", null , null);
	}
	
	private String getStringFromCharArrayBuffer(CharArrayBuffer array)
	{
		int i;
		String string = null;
//		debug("array.sizeCopied = "+array.sizeCopied);		
		string = "";
		for(i=0;i<array.sizeCopied;i++)
		{
//			debug(""+(char)array.data[i]);
			string += array.data[i]+"";
		}
		string += "  ";
		return string;
	}


3 . 删除数据 如此清晰,不用我再注释了吧!!

	 * 删除时间间隔内数据库中的数据
	 * 返回值:
	 * 		-1	输入有误
	 * 		0	删除成功
	 * 		-2	删除失败,抛出异常
	 * 
	 * eg:	database.deleteDataByDate("xxx.db3","gas_data","2014-07-21   11:36:57","2014-07-21   11:39:07");
	 * **/
	public int deleteDataByDate(String file,String table ,String begin_time ,String end_time)
	{
		if((begin_time!=null)&&(end_time!=null))
		{
			SQLiteDatabase db;
			db = SQLiteDatabase.openOrCreateDatabase("/sdcard/MultGasDetecter/database/"+file,null);
			
			try
			{
				db.execSQL("delete from "+table+" where system_date>='"+begin_time+"' and system_date<='"+end_time+"';");
			}
			catch(SQLiteException e)
			{	
				debug("delete database error");
				e.printStackTrace();	
				return -2;
			}
			db.close();
			return 0;
		}
		else
			return -1;
	}
	/**
	 * 删除某时间以后数据库中的数据
	 * 返回值:
	 * 		-1	输入有误
	 * 		0	删除成功
	 * 		-2	删除失败,抛出异常
	 * 
	 * eg:	database.deleteDataAfterDate("xxx.db3","gas_data","2014-07-21   11:39:38");
	 * **/
	public int deleteDataAfterDate(String file,String table ,String begin_time)
	{
		if(begin_time == null)
			return -1;
		else
		{
			SQLiteDatabase db;
			db = SQLiteDatabase.openOrCreateDatabase("/sdcard/MultGasDetecter/database/"+file,null);
			
			try
			{
				db.execSQL("delete from "+table+" where system_date>'"+begin_time+"';");
			}
			catch(SQLiteException e)
			{	
				debug("delete database error");
				e.printStackTrace();	
				return -2;
			}
			db.close();
			return 0;
		}
	}
	/**
	 * 删除某时间以前数据库中的数据
	 * 返回值:
	 * 		-1	输入有误
	 * 		0	删除成功
	 * 		-2	删除失败,抛出异常
	 * 
	 * eg:	database.deleteDataBeforeDate("xxx.db3","gas_data","2014-07-21   11:39:10");
	 * **/
	public int deleteDataBeforeDate(String file,String table ,String begin_time)
	{
		if(begin_time == null)
			return -1;
		else
		{
			SQLiteDatabase db;
			db = SQLiteDatabase.openOrCreateDatabase("/sdcard/MultGasDetecter/database/"+file,null);
			
			try
			{
				db.execSQL("delete from "+table+" where system_date<'"+begin_time+"';");
			}
			catch(SQLiteException e)
			{	
				debug("delete database error");
				e.printStackTrace();	
				return -2;
			}
			db.close();
			return 0;
		}
	}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值