`
umbrellall1
  • 浏览: 147496 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

第三章:手机增 删 查 改(SQLiteOpenHelper)

阅读更多
效果:





























main.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<EditText
android:id="@+id/text"
android:layout_width="247px"
android:layout_height="wrap_content"
android:textSize="18sp"
android:layout_x="20px"
android:layout_y="10px"
>
</EditText>
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="27px"
android:layout_y="73px"
>
</ListView>


</AbsoluteLayout>




list.xml

<?xml version="1.0" encoding="UTF-8"?>
<TextView
	android:id="@+id/text1"
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="wrap_content"
	android:layout_height="20px"
	android:textSize="14sp"/>





package sqlite.open.helper.test;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class SQLiteOpenHelperTest extends Activity {
	private  DataTest data;
	private Cursor myCursor;
	private ListView myListView;
	private EditText myEditText;
	private int _id;
	protected final static int MENU_ADD=Menu.FIRST;
	protected final static int MENU_EDIT=Menu.FIRST+1;
	protected final static int MENU_DELETE=Menu.FIRST+2;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        /**载入main.xml*/
        setContentView(R.layout.main);
        /**载入通过id找到ListView对象*/
        myListView=(ListView)findViewById(R.id.list);
        /**载入通过id找到EditText对象*/
        myEditText=(EditText)findViewById(R.id.text);
        /**实例化DataTest对象传入当前对象*/
        data=new DataTest(this);
        /**取得DataBase数据*/
        myCursor=data.select();
        /**实例SimpleCursorAdapter 并传入myCursor,数据的字段为data_text*/
        SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.list,myCursor,new String[]{DataTest.FIELD_TEXT},new int[]{R.id.text1});
        /**设置ListView组件内容*/
        myListView.setAdapter(adapter);
        /**设置ListView行的点击事件*/
        myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
		        /**将myCursor移到所点击的值*/
				myCursor.moveToPosition(arg2);
				/**取得字段id的值*/
				_id=myCursor.getInt(0);
				/**取得字段data_text的值*/
				myEditText.setText(myCursor.getString(1));
			}
		});
      
        myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				  /**取得的是SQLiteCursor对象*/
				SQLiteCursor sc=(SQLiteCursor)arg0.getSelectedItem();
				/**取得字段id的值*/
				_id=sc.getInt(0);
				/**取得字段data_text的值*/
				myEditText.setText(sc.getString(1));
			}
			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
			}
		});
        
    }
    /**该方法是判断点击Menu按钮*/
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		super.onOptionsItemSelected(item);
		switch(item.getItemId()){
			case MENU_ADD:
				this.addData();
				break;
			case MENU_EDIT:
				this.editData();
				break;
			case MENU_DELETE:
				this.deleteData();
				break;
		}
		return true;
	}
	 /**该方法是设置添加自定义Menu*/
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menu.add(Menu.NONE,MENU_ADD,0,R.string.add_Menu);
		menu.add(Menu.NONE,MENU_EDIT,0,R.string.edit_Menu);
		menu.add(Menu.NONE,MENU_DELETE,0,R.string.delete_Menu);
		return true;
	}
	
	private void addData(){
		/**输入的是否为空*/
		if(myEditText.getText().toString().equals("")){
			return;
		}
		 /**添加数据到数据库*/
		data.insert(myEditText.getText().toString());
		/**重新查询*/
		myCursor.requery();
		/**刷新ListView*/
		myListView.invalidateViews();
		/**设置EditText组件内容*/
		myEditText.setText("");
		_id=0;
	}

    private void editData(){
    	/**输入的是否为空*/
    	if(myEditText.getText().toString().equals("")){
    		return;
    	}
    	 /**修改数据到数据库*/
    	data.update(_id, myEditText.getText().toString());
    	/**重新查询*/
    	myCursor.requery();
    	/**刷新ListView*/
    	myListView.invalidateViews();
    	/**设置EditText组件内容*/
    	myEditText.setText("");
    	_id=0;
    }
    private void deleteData(){
    	if(_id==0){
    		return;
    	}
    	/**删除数据 */
    	data.delete(_id);
    	/**重新查询*/
    	myCursor.requery();
    	/**刷新ListView*/
    	myListView.invalidateViews();
    	/**设置EditText组件内容*/
    	myEditText.setText("");
    	_id=0;
    }
}



package sqlite.open.helper.test;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DataTest extends SQLiteOpenHelper {
	private final static String DATABASE_NAME="data_db";
	private final static int DATABASE_VERSION=1;
	private final static String TABLE_NAME="data_table";
	public final static String FIELD_id="_id";
	public final static String FIELD_TEXT="data_text";

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

	@Override
	public void onCreate(SQLiteDatabase db) {
		/**创建一张名为data_text的表*/
		String sql="CREATE TABLE "+TABLE_NAME+" ("+FIELD_id+" INTEGER primary key autoincrement, "+" "+FIELD_TEXT+" text)";
		/**执行SQL*/
		db.execSQL(sql);
	}
	
	
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		String sql="DROP TABLE IF EXISTS"+TABLE_NAME;
		db.execSQL(sql);
		onCreate(db);
	}
	/**查询数据*/
	public Cursor select(){
		/**
		 * public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
		 * 
		 * table        	The table name to compile the query against.
		 * columns      	A list of which columns to return. Passing null will return all columns, which is discouraged to prevent reading data from storage that isn't going to be used.
		 * selection		A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given table
		 * selectionArgs	You may include ?s in selection, which will be replaced by the values from selectionArgs, in order that they appear in the selection. The values will be bound as Strings.
		 * groupBy			A filter declaring how to group rows, formatted as an SQL GROUP BY clause (excluding the GROUP BY itself). Passing null will cause the rows to not be grouped.
		 * having			A filter declare which row groups to include in the cursor, if row grouping is being used, formatted as an SQL HAVING clause (excluding the HAVING itself). Passing null will cause all row groups to be included, and is required when row grouping is not being used.
		 * orderBy			How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.
		 * 
		 * Returns
		 * A Cursor object, which is positioned before the first entry
		 * */
		
		SQLiteDatabase db=this.getReadableDatabase();
		Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, null);
		return cursor;
	}
	/**添加数据*/
	public long insert(String text){
		SQLiteDatabase db=this.getWritableDatabase();
		/**将添加的数据放入 ContentValues*/
		ContentValues cv=new ContentValues();
		cv.put(FIELD_TEXT, text);
		/**
		 * public long insert (String table, String nullColumnHack, ContentValues values)
		 * 
		 * table			the table to insert the row into
		 * nullColumnHack	SQL doesn't allow inserting a completely empty row, so if initialValues is empty this column will explicitly be assigned a NULL value.
		 * values			this map contains the initial column values for the row. The keys should be the column names and the values the column values。
		 * 
		 * Returns
		 * the row ID of the newly inserted row, or -1 if an error occurred
		 */
		long row=db.insert(TABLE_NAME, null, cv);
		return row;
	}
	/**删除数据*/
	public void delete(int id){
		SQLiteDatabase db=this.getWritableDatabase();
		String where=FIELD_id+"=?";
		String[] whereValue={Integer.toString(id)};
		/**
		 * public int delete (String table, String whereClause, String[] whereArgs)
		 * 
		 * table		the table to delete from
		 * whereClause	the optional WHERE clause to apply when deleting. Passing null will delete all rows.
		 * 
		 * Returns
		 * the number of rows affected if a whereClause is passed in, 0 otherwise. To remove all rows and get a count pass "1" as the whereClause.
		 * */
		db.delete(TABLE_NAME, where, whereValue);
	}
	/**修改数据*/
	public void update(int id,String text){
		SQLiteDatabase db=this.getWritableDatabase();
		String where=FIELD_id+"=?";
		String[] whereValue={Integer.toString(id)};
		/**将添加的数据放入 ContentValues*/
		ContentValues cv=new ContentValues();
		cv.put(FIELD_TEXT, text);
		/**
		 * public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
		 * 
		 * table		the table to update in
		 * values		a map from column names to new column values. null is a valid value that will be translated to NULL
		 * whereClause	the optional WHERE clause to apply when updating. Passing null will update all rows.
		 * 
		 * Returns
		 * the number of rows affected
		 * */
		db.update(TABLE_NAME, cv, where, whereValue);
	}
}







  • 大小: 5.2 KB
  • 大小: 10.2 KB
  • 大小: 5.3 KB
  • 大小: 12.3 KB
  • 大小: 5.4 KB
  • 大小: 11.6 KB
分享到:
评论

相关推荐

    Android移动应用开发(第3版)卷Ⅰ基础篇.pdf

    - **操作**:通过SQLiteOpenHelper创建数据库,使用SQL语句进行增删改查操作。 #### 3. SharedPreferences - **用途**:用于保存简单的键值对数据,常用于存储应用设置等。 以上内容仅为《Android移动应用开发(第3...

    Android第七章数据存储

    数据库操作通常涉及增删改查(CRUD):创建表、插入数据、更新数据、删除数据以及查询数据。 4. SharedPreferences SharedPreferences是Android用于存储轻量级键值对配置数据的机制,适合保存用户设置或应用状态。...

    【光子晶体】基于matlab FDTD模拟一维光子晶体中光波传输【含Matlab源码 11059期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【海洋】基于matlab海洋卫星测高数据仿真DEM信息【含Matlab源码 10984期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【光学】基于matlab蒙特卡洛方法求解辐射传输方程【含Matlab源码 10968期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    log凑字数 12345678910

    log凑字数 12345678910

    【毕业设计】java+springboot+vue电影评论网站系统设计与实现(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计】java+springboot+vue电影评论网站系统设计与实现(完整前后端+mysql+说明文档+LunW).zip

    【图像分割】基于matlab方差标准四叉树分解图像分割【含Matlab源码 9827期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    双向全桥LLC谐振变换器与非对称拓扑的双向模型仿真研究:正向LLC与反向LC的变频控制闭环模型在Matlab Simulink及PLECS环境下的应用,双向全桥LLC谐振变换器:非对称拓扑与双向模型的

    双向全桥LLC谐振变换器与非对称拓扑的双向模型仿真研究:正向LLC与反向LC的变频控制闭环模型在Matlab Simulink及PLECS环境下的应用,双向全桥LLC谐振变换器:非对称拓扑与双向模型的Matlab Simulink及PLECS仿真研究,双向全桥LLC谐振变器仿真,非对称拓扑,双向模型 正向LLC,反向LC 采用变频控制的闭环模型 运行环境包括matlab simulink,plecs等 ~ ,双向全桥LLC谐振变换器仿真; 非对称拓扑; 双向模型; 变频控制; Matlab Simulink; PLECS。,双向全桥LLC谐振变换器仿真研究:非对称拓扑与变频控制模型

    Jordan标准型行列互逆方法-程序求解

    Jordan标准型行列互逆方法-程序求解

    DIN-SQL:分解式上下文学习的文本到SQL转换及自校正

    目前,在复杂任务(如Spider数据集上的文本到SQL转换)中,使用大型语言模型(LLMs)的微调模型和提示方法之间存在显著差距。为了提高LLMs在推理过程中的性能,我们研究了将任务分解为较小子任务的有效性。特别是,我们展示了将生成问题分解为子问题,并将这些子问题的解决方案输入给LLMs,可以显著提高其性能。我们的实验表明,这种方法使三个LLMs的简单少样本性能提高了大约10%,使其准确性接近或超过最先进水平(SOTA)。在Spider数据集的保留测试集中,以执行准确率为衡量标准,最先进水平是79.9,而使用我们方法的新最先进水平为85.3。我们的方法在上下文中学习,比许多经过深度微调的模型高出至少5%。此外,在BIRD基准测试中,我们的方法实现了55.9%的执行准确率,创下了该基准测试保留测试集的新最先进水平

    MATLAB-GUI-平台的手势识别.zip

    程序可以参考,非常好的思路建设,完美!

    【语音编码】基于matlab语音信号PCM编解码(含前后波形对比 SNR)【含Matlab源码 11159期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    (源码)基于FreeRTOS的ARM926EJS实验系统_2.zip

    # 基于FreeRTOS的ARM926EJS实验系统 ## 项目简介 本项目将FreeRTOS移植到基于ARM926EJ S CPU的ARM Versatile Platform Baseboard上,当前版本基于FreeRTOS 10.4.0,后续会随FreeRTOS新版本发布而更新。项目处于早期开发阶段,包含基础的演示任务,可用于学习和研究实时操作系统的基本功能与应用。 ## 项目的主要特性和功能 1. FreeRTOS内核移植实现FreeRTOS内核在ARM926EJ S架构上的移植,支持任务管理、信号量、队列、事件标志、互斥量等功能。 2. 中断处理具备中断服务例行程序,能处理中断事件并切换任务。 3. 任务切换有任务切换机制,支持手动切换和定时器中断切换。 4. 定时器管理可进行定时器的创建、启动、停止、查询等操作。 5. 内存管理实现动态内存分配与释放,支持运行时动态操作。

    【图像加密解密】基于matlab混沌系统和DNA编码图像分块加密解密(含直方图 密钥 相关性)【含Matlab源码 9695期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【车间调度】基于matlab多元宇宙算法MVO求解分布式置换流水车间调度DPFSP【含Matlab源码 6138期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于MATLAB Simulink R2015b的三电平中性点钳位(NPC)逆变器高级仿真模型,基于MATLAB Simulink R2015b的三电平中性点钳位(NPC)逆变器高级仿真模型,Thre

    基于MATLAB Simulink R2015b的三电平中性点钳位(NPC)逆变器高级仿真模型,基于MATLAB Simulink R2015b的三电平中性点钳位(NPC)逆变器高级仿真模型,Three_Level_NPC_Inverter:基于MATLAB Simulink的三电平中性点钳位(NPC)逆变器仿真模型。 仿真条件:MATLAB Simulink R2015b,拿后前如需转成低版本格式请提前告知,谢谢。 ,核心关键词:Three_Level_NPC_Inverter; MATLAB Simulink; 仿真模型; R2015b版本。,基于MATLAB Simulink的三电平NPC逆变器仿真模型(R2015b版)

    【形状检测】形状特征圆和矩形检测(含尺寸)【含Matlab源码 4625期】.md

    CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【地震】基于matlab两自由度体系非线性的地震响应【含Matlab源码 11062期】.mp4

    海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

Global site tag (gtag.js) - Google Analytics