Android Sqlite学习
来源:互联网 发布:aes加密算法java 编辑:程序博客网 时间:2024/06/05 18:42
前言
最近修改的考务和培训系统将用户收藏的题目和考试错题通过Sqlite存储在手机客户端,趁着这个机会彻底实测了一把.
Android实现数据存储主要有三种方式:文件,SharedPreferences和数据库SqliteDatabase存储.
SQlite是什么? The following specification is defined By Baidu.com
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
Sqlite的操作与其它数据库SqlServer,MySql类似.
**
Step 1.
**
首先,定义自己的类继承Android提供的 SQLiteOpenHelper,需要重写父类提供的两个方法onCreate(),onUpgrade().
myDbHelper:
package com.elvis.tools;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class MyDbHelper extends SQLiteOpenHelper { private final static String DATABASE_NAME = "BOOKS.db"; private final static int DATABSE_VERSION = 1; private final static String TABLE_NAME = "books_table"; public final static String BOOK_ID = "book_id"; public final static String BOOK_NAME = "book_name"; public final static String BOOK_AUTHOR = "book_author"; public MyDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABSE_VERSION); // TODO Auto-generated constructor stub } //OnCreate()创建了一张数据表 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub //String sql = "CRETE TABLE " + TABLE_NAME + " (" +BOOK_ID // + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, " + // BOOK_AUTHOR + " text);"; String sql = "CREATE TABLE " + TABLE_NAME + " (" + BOOK_ID + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, "+ BOOK_AUTHOR + " text);"; // db.execSQL(sql); db.execSQL(sql); } //保证table是最新创建的. @Override public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { // TODO Auto-generated method stub String sql = "DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } //query public Cursor select() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME,null,null,null,null,null,null); return cursor; } //增加操作 public long insert(String bookname,String author) { SQLiteDatabase db = this.getReadableDatabase(); //插入操作必须要用到ContentValues ContentValues cv = new ContentValues(); cv.put(BOOK_NAME, bookname); cv.put(BOOK_AUTHOR, author); long row = db.insert(TABLE_NAME, null, cv); return row; } //删除操作 (id代表 要删除的Book_ID) public void delete(int id) { SQLiteDatabase db = this.getReadableDatabase(); String where = BOOK_ID + " =?"; String[] whereValue = {Integer.toString(id)}; db.delete(TABLE_NAME, where, whereValue); } //修改操作 public void update(int id,String bookname,String author) { SQLiteDatabase db = this.getReadableDatabase(); String where = BOOK_ID + " =?"; String[] whereValue = {Integer.toString(id)}; ContentValues cv = new ContentValues(); cv.put(BOOK_NAME, bookname); cv.put(BOOK_AUTHOR, author); db.update(TABLE_NAME, cv, where, whereValue); }}
MyDbHelper类定义了数据的增删改查操作.
Step2. MyActivity.java
在menu菜单中添加了三个子菜单,分别为 add, delete和update.分别为这三个子菜单添加了响应事件.注意要实现Menu类的onCreateOptionsMenu(Menu menu)和onOptionsItemSelected(MenuItem item)方法.(这是android面试宝典中的一道题目.)
采用了ListView,并为ListView中的Item添加了响应事件,必须要绑定Adapter.实现了AdapterView.OnItemClickListener()事件.
package com.elvis.sqliteandroid;import com.elvis.tools.MyDbHelper;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.database.Cursor;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;public class SqlActivity extends Activity implements AdapterView.OnItemClickListener{ private MyDbHelper mBooksDB; private Cursor mCursor; private EditText BookName; private EditText BookAuthor; private ListView BooksList; private int BOOK_ID = 0; protected final static int MENU_ADD = Menu.FIRST; protected final static int MENU_DELETE = Menu.FIRST + 1; protected final static int MENU_UPDATE = Menu.FIRST + 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sql); initView(); } public void initView() { mBooksDB = new MyDbHelper(this); mCursor = mBooksDB.select(); BookName = (EditText)findViewById(R.id.bookname); BookAuthor = (EditText)findViewById(R.id.author); BooksList = (ListView)findViewById(R.id.bookslist); BooksList.setAdapter(new BooksListAdapter(this,mCursor)); BooksList.setOnItemClickListener(this); } public class BooksListAdapter extends BaseAdapter { private Context mContext; private Cursor mCursor; public BooksListAdapter(Context context,Cursor cursor) { mContext = context; mCursor = cursor; } @Override public int getCount() { // TODO Auto-generated method stub return mCursor.getCount(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub TextView mTextView = new TextView(mContext); mCursor.moveToPosition(position); mTextView.setText(mCursor.getString(1)+ "___" + mCursor.getString(2)); return mTextView; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //getMenuInflater().inflate(R.menu.sql, menu); super.onCreateOptionsMenu(menu); menu.add(Menu.NONE,MENU_ADD,0,"ADD"); menu.add(Menu.NONE,MENU_DELETE,0,"DELETE"); menu.add(Menu.NONE,MENU_UPDATE,0,"UPDATE"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub super.onOptionsItemSelected(item); switch(item.getItemId()) { case MENU_ADD: add(); break; case MENU_DELETE: delete(); break; case MENU_UPDATE: update(); break; } return true; } @SuppressWarnings("deprecation") public void add() { String bookname = BookName.getText().toString(); String bookauthor = BookAuthor.getText().toString(); if(bookname.trim().length() == 0 || bookauthor.trim().length() == 0) { return ; } mBooksDB.insert(bookname, bookauthor); mCursor.requery(); BooksList.invalidateViews(); BookName.setText(""); BookAuthor.setText(""); Toast.makeText(this, "Add Success!", Toast.LENGTH_SHORT).show(); } //onItemSelected的时候,BOOK_ID进行了修改 public void delete() { if(BOOK_ID == 0) { return; } mBooksDB.delete(BOOK_ID); mCursor.requery(); BooksList.invalidateViews(); BookName.setText(""); BookAuthor.setText(""); Toast.makeText(this, "Delete Success!", Toast.LENGTH_SHORT).show(); } public void update() { String bookname = BookName.getText().toString(); String bookauthor = BookAuthor.getText().toString(); if(bookname.trim().length() == 0 || bookauthor.trim().length() == 0) { return ; } mBooksDB.update(BOOK_ID, bookname,bookauthor); mCursor.requery(); BooksList.invalidateViews(); BookName.setText(""); BookAuthor.setText(""); Toast.makeText(this, "Delete Success!", Toast.LENGTH_SHORT).show(); } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub mCursor.moveToPosition(position); BOOK_ID = mCursor.getInt(0); BookName.setText(mCursor.getString(1)); BookAuthor.setText(mCursor.getString(2)); }}
Step3. 布局文件xx.xml.
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"><EditText android:id="@+id/bookname" android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText><EditText android:id="@+id/author" android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText><ListView android:id="@+id/bookslist" android:layout_width="fill_parent" android:layout_height="wrap_content"></ListView></LinearLayout>
多动手,多实践,多测验!
- Android SQLite学习
- ANDROID SQLITE学习总结
- Android SQLite学习
- Android学习笔记---SQLite
- Android学习之SQLite
- android学习-SQLite使用
- Android学习:SQLite使用
- Android之SQLite学习
- Android学习之SQLite
- android sqlite学习
- Android SQLite学习
- android 学习 sqlite
- Android学习笔记 - SQLite
- Android Sqlite学习
- Android SQLite数据库学习
- android SQLite学习手册
- Android SQLite 的学习
- Android学习之SQLite
- Android -- Activity接收另一个Activity返回的数据
- jquery自定义动画animate()
- HTML5手机定位-使用百度API
- OC 类的加载和初始化
- Aerospike C客户端手册———Debian 6 安装
- Android Sqlite学习
- 欢迎使用CSDN-markdown编辑器
- 各主流浏览器使用的内核
- vsftpd ftp client pwd implementation source code
- 使用WebLogic时控制台输出中文乱码解决方法
- Aerospike C客户端手册———Debian 7 安装
- px,dp,dip,sp的区别
- 解码库区别 一些应该学习的开源框架与库用途和差别
- android anim 动画效果