android学习之-SQLiteOpenHelper的应用

简介:

通过这个小例子大致了解了手机数据库的一些功能,见主类

 
  1. package com.android.sucre;  
  2.  
  3. import android.app.Activity;  
  4. import android.database.Cursor;  
  5. import android.database.sqlite.SQLiteCursor;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8. import android.view.Menu;  
  9. import android.view.MenuItem;  
  10. import android.view.View;  
  11. import android.widget.AdapterView;  
  12. import android.widget.EditText;  
  13. import android.widget.ListView;  
  14. import android.widget.SimpleCursorAdapter;  
  15. /**  
  16.  * 数据库简单应用  
  17.  * @author qiaolei  
  18.  *  
  19.  */ 
  20. public class EX05_05_SQLite extends Activity {  
  21.     private ToDoDB myToDoDB;  
  22.     private Cursor myCursor;  
  23.     private EditText myEditText;  
  24.     private ListView myListView;  
  25.     private int _id;  
  26.     protected final static int  MENU_ADD = Menu.FIRST;  
  27.     protected final static int  MENU_EDIT = Menu.FIRST + 1;  
  28.     protected final static int  MENU_DELETE = Menu.FIRST + 2;  
  29.     /** Called when the activity is first created. */ 
  30.     @Override 
  31.     public void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.main);  
  34.         myEditText = (EditText)findViewById(R.id.myEditText);  
  35.         myListView = (ListView)findViewById(R.id.myListView);  
  36.         myToDoDB = new ToDoDB(this);  
  37.         myCursor = myToDoDB.select();//取得database中的数据  
  38.         //R.layout.list为layout文件夹下的list文件  
  39.         //R.id.listView指向list文件的ID  
  40.         SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list, myCursor, new String[]{ToDoDB.FIELD_TEXT}, new int[]{R.id.listView});  
  41.         myListView.setAdapter(adapter);  
  42.         myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
  43.             public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  44.                     long arg3) {  
  45.                 myCursor.moveToPosition(arg2);//将myCursor移到所单击的值,这个值是数据库中的行标是固定不变的  
  46.                 _id = myCursor.getInt(0);//取得第0列字段_id的值,这个值相当于数据库的主键处于自增状态,相对于整个数据库而言,这个值是实际数据库中字段的真实值  
  47.                 Log.d("arg2:_id", arg2+":"+_id);  
  48.                 myEditText.setText(myCursor.getString(1));//取得第1列字段的值  
  49.             }  
  50.         });  
  51.         myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
  52.  
  53.             public void onItemSelected(AdapterView<?> arg0, View arg1,  
  54.                     int arg2, long arg3) {  
  55.                 SQLiteCursor sc = (SQLiteCursor)arg0.getSelectedItem();  
  56.                 _id = sc.getInt(0);  
  57.                 myEditText.setText(sc.getString(1));  
  58.             }  
  59.  
  60.             public void onNothingSelected(AdapterView<?> arg0) {  
  61.                   
  62.             }  
  63.         });  
  64.     }  
  65.     @Override 
  66.     public boolean onCreateOptionsMenu(Menu menu) {  
  67.         super.onCreateOptionsMenu(menu);  
  68.         menu.add(Menu.NONE, MENU_ADD, 0, R.string.create);  
  69.         menu.add(Menu.NONE, MENU_EDIT, 0, R.string.edit);  
  70.         menu.add(Menu.NONE, MENU_DELETE, 0, R.string.delete);  
  71.         return true;  
  72.     }  
  73.     @Override 
  74.     public boolean onOptionsItemSelected(MenuItem item) {  
  75.         super.onOptionsItemSelected(item);  
  76.         switch (item.getItemId()) {  
  77.         case MENU_ADD:  
  78.             this.addToDo();  
  79.             break;  
  80.         case MENU_EDIT:  
  81.             this.editToDo();  
  82.             break;  
  83.         case MENU_DELETE:  
  84.             this.deleteToDo();  
  85.             break;  
  86.         }  
  87.         return true;  
  88.     }  
  89.     private void addToDo(){  
  90.         if(!"".equals(myEditText.getText().toString())){  
  91.             myToDoDB.insert(myEditText.getText().toString());  
  92.             myCursor.requery();  
  93.             myListView.invalidateViews();  
  94.             myEditText.setText("");  
  95.             _id = 0;  
  96.         }  
  97.     }  
  98.     private void editToDo(){  
  99.         if(!"".equals(myEditText.getText().toString())){  
  100.             myToDoDB.update(_id, myEditText.getText().toString());  
  101.             myCursor.requery();//更新游标  
  102.             myListView.invalidateViews();//更新ListView内容  
  103.             myEditText.setText("");  
  104.             _id = 0;  
  105.         }  
  106.     }  
  107.     private void deleteToDo(){  
  108.         if(_id!=0){  
  109.             myToDoDB.delete(_id);  
  110.             myCursor.requery();  
  111.             myListView.invalidateViews();  
  112.             myEditText.setText("");  
  113.             _id = 0;  
  114.         }  
  115.     }  

 

 
  1. package com.android.sucre;  
  2.  
  3. import android.content.ContentValues;  
  4. import android.content.Context;  
  5. import android.database.Cursor;  
  6. import android.database.sqlite.SQLiteDatabase;  
  7. import android.database.sqlite.SQLiteDatabase.CursorFactory;  
  8. import android.database.sqlite.SQLiteOpenHelper;  
  9. /**  
  10.  * 创建数据库  
  11.  * @author qiaolei  
  12.  *  
  13.  */ 
  14. public class ToDoDB extends SQLiteOpenHelper{  
  15.     private final static String DATABASE_NAME= "todo_db";  
  16.     private final static int DATABASE_VERSION = 1;  
  17.     private final static String TABLE_NAME = "todo_table";  
  18.     public final static String FIELD_id = "_id";  
  19.     public final static String FIELD_TEXT = "todo_text";  
  20.     public ToDoDB(Context context) {  
  21.         super(context, DATABASE_NAME, null, DATABASE_VERSION);  
  22.     }  
  23.  
  24.     @Override 
  25.     public void onCreate(SQLiteDatabase db) {  
  26.         //创建的表有两列,FIELD_ID为主键自动增长  
  27.         String sql = "create table "+TABLE_NAME+" ("+FIELD_id+" integer primary key autoincrement,"+FIELD_TEXT+" text)";  
  28.         db.execSQL(sql);  
  29.     }  
  30.  
  31.     @Override 
  32.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  33.         String sql = "drop table if exists "+TABLE_NAME+"";  
  34.         db.execSQL(sql);  
  35.         onCreate(db);  
  36.     }  
  37.     public Cursor select(){  
  38.         SQLiteDatabase db = this.getReadableDatabase();  
  39.         Cursor cursor = db.query(TABLE_NAME, nullnullnullnullnullnull);  
  40.         return cursor;  
  41.     }  
  42.     public long insert(String text){  
  43.         SQLiteDatabase db = this.getReadableDatabase();  
  44.           
  45.         ContentValues cv = new ContentValues();  
  46.         cv.put(FIELD_TEXT, text);  
  47.         long row = db.insert(TABLE_NAME, null, cv);  
  48.         return row;  
  49.     }  
  50.     public void delete(int id){  
  51.         SQLiteDatabase db = this.getReadableDatabase();  
  52.         String where = FIELD_id + "=?";  
  53.         String[] whereValue = {Integer.toString(id)};  
  54.         db.delete(TABLE_NAME, where, whereValue);  
  55.     }  
  56.     public void update(int id,String text){  
  57.         SQLiteDatabase db = this.getReadableDatabase();  
  58.         String where = FIELD_id + "=?";  
  59.         String[] whereValue = {Integer.toString(id)};  
  60.         ContentValues cv = new ContentValues();  
  61.         cv.put(FIELD_TEXT, text);  
  62.         db.update(TABLE_NAME, cv, where, whereValue);  
  63.     }  
  64. }  

本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/765101,如需转载请自行联系原作者

相关文章
|
10月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
961 4
|
5月前
|
存储 Android开发
如何查看Flutter应用在Android设备上已被撤销的权限?
如何查看Flutter应用在Android设备上已被撤销的权限?
255 64
|
3月前
|
JSON 移动开发 Java
ArkUI-X通过Stage模型开发Android端应用指南(二)
本文介绍了StageApplication的三种初始化方式及Ability与原生Activity之间的交互方法。包括通过继承StageApplication、使用StageApplicationDelegate,以及在Activity中初始化;还详细说明了如何通过Intent传递参数,支持手动构建JSON或使用WantParams工具类,并列举了支持的数据类型和注意事项。
|
3月前
|
开发工具 Android开发 开发者
ArkUI-X通过Stage模型开发Android端应用指南(一)
本文介绍了如何将ArkUI框架扩展至Android平台,开发者可基于OpenHarmony复用应用代码并部署到Android,降低跨端开发成本,并详解了关键类及配置方法。
|
7月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
411 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
7月前
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
165 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
10月前
|
算法 Java 数据库
Android 应用的主线程在什么情况下会被阻塞?
【10月更文挑战第20天】为了避免主线程阻塞,我们需要合理地设计和优化应用的代码。将耗时操作移到后台线程执行,使用异步任务、线程池等技术来提高应用的并发处理能力。同时,要注意避免出现死循环、不合理的锁使用等问题。通过这些措施,可以确保主线程能够高效地运行,提供流畅的用户体验。
462 58
|
9月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
241 14
|
9月前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
178 13
|
9月前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。