您的位置:首页 > 移动开发 > Android开发

Android 数据库SQLiteDatabase的使用!!

2013-07-09 18:51 399 查看
Android 提供了三种数据存储方式,第一种是文件存储;第二种是SharedPreferences 存储;第三种就是数据库SQLiteDatabase 存储。

文件存储我就不用多说了,而SharedPreferences 可以存取简单的数据(int,double,float.etc),它经常用于数据缓存,因为它读取存储简单。详细可以参见本系列。Android
高手进阶教程(七)之----Android 中Preferences的使用!

今天我们将讲一下SQLiteDatabase 的使用。 而掌握SqliteDatabase ,将会我们接下来掌握ContentProvider 打下良好的基石

为了让大家更好的掌握,我们手把手完成该节的Demo 。

第一步:新建一个Android工程,命名为SQLiteDatabaseDemo.



第二步:创建一个新的类BooksDB.java 这个类要继承于android.database.sqlite.SQLiteOpenHelper抽象类,我们要实现其中两个方法:onCreate(),onUpdate.具体代码如下:

[java] view
plaincopy

package com.android.tutor;  

import android.content.ContentValues;  

import android.content.Context;  

import android.database.Cursor;  

import android.database.sqlite.SQLiteDatabase;  

import android.database.sqlite.SQLiteOpenHelper;  

public class BooksDB extends SQLiteOpenHelper {  

      private final static String DATABASE_NAME = "BOOKS.db";  

      private final static int DATABASE_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 BooksDB(Context context) {  

        // TODO Auto-generated constructor stub  

          super(context, DATABASE_NAME, null, DATABASE_VERSION);  

    }  

    //创建table  

    @Override  

    public void onCreate(SQLiteDatabase db) {  

          String sql = "CREATE TABLE " + TABLE_NAME + " (" + BOOK_ID  

            + " INTEGER primary key autoincrement, " + BOOK_NAME + " text, "+  BOOK_AUTHOR +" text);";  

          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() {  

        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.getWritableDatabase();  

        /* 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;  

      }  

     //删除操作  

      public void delete(int id)  

      {  

        SQLiteDatabase db = this.getWritableDatabase();  

        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.getWritableDatabase();  

        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);  

      }  

}  

 

 

第三步:修改main.xml布局如下,由两个EditText和一个ListView组成,代码如下:

[java] view
plaincopy

<?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>  

第四步:修改SQLiteDatabaseDemo.java代码如下:

[java] view
plaincopy

package com.android.tutor;  

import android.app.Activity;  

import android.content.Context;  

import android.database.Cursor;  

import android.os.Bundle;  

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 SQLiteDatabaseDemo extends Activity implements AdapterView.OnItemClickListener {  

    private BooksDB  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;  

      

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

        setUpViews();  

    }  

      

    public void setUpViews(){  

        mBooksDB = new BooksDB(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);  

    }  

      

    @Override  

    public boolean onCreateOptionsMenu(Menu 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;  

    }  

      

    public boolean onOptionsItemSelected(MenuItem item)  

    {  

      super.onOptionsItemSelected(item);  

      switch (item.getItemId())  

      {  

        case MENU_ADD:  

            add();  

            break;  

        case MENU_DELETE:  

            delete();  

            break;  

        case MENU_UPDATE:  

            update();  

            break;  

      }  

      return true;  

    }  

      

    public void add(){  

        String bookname = BookName.getText().toString();  

        String author  = BookAuthor.getText().toString();  

        //书名和作者都不能为空,或者退出  

        if (bookname.equals("") || author.equals("")){  

            return;  

        }  

         mBooksDB.insert(bookname, author);  

         mCursor.requery();  

         BooksList.invalidateViews();  

         BookName.setText("");  

         BookAuthor.setText("");  

         Toast.makeText(this, "Add Successed!", Toast.LENGTH_SHORT).show();  

    }  

      

    public void delete(){  

        if (BOOK_ID == 0) {  

            return;  

        }  

        mBooksDB.delete(BOOK_ID);  

        mCursor.requery();  

        BooksList.invalidateViews();  

        BookName.setText("");  

        BookAuthor.setText("");  

        Toast.makeText(this, "Delete Successed!", Toast.LENGTH_SHORT).show();  

    }  

      

    public void update(){  

        String bookname = BookName.getText().toString();  

        String author  = BookAuthor.getText().toString();  

        //书名和作者都不能为空,或者退出  

        if (bookname.equals("") || author.equals("")){  

            return;  

        }  

        mBooksDB.update(BOOK_ID, bookname, author);  

        mCursor.requery();  

        BooksList.invalidateViews();  

        BookName.setText("");  

        BookAuthor.setText("");  

        Toast.makeText(this, "Update Successed!", Toast.LENGTH_SHORT).show();  

    }  

      

    @Override  

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  

          

        mCursor.moveToPosition(position);  

        BOOK_ID = mCursor.getInt(0);      

        BookName.setText(mCursor.getString(1));  

        BookAuthor.setText(mCursor.getString(2));  

          

    }  

      

    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() {  

            return mCursor.getCount();  

        }  

        @Override  

        public Object getItem(int position) {  

            return null;  

        }  

        @Override  

        public long getItemId(int position) {  

            return 0;  

        }  

        @Override  

        public View getView(int position, View convertView, ViewGroup parent) {  

            TextView mTextView = new TextView(mContext);  

            mCursor.moveToPosition(position);  

            mTextView.setText(mCursor.getString(1) + "___" + mCursor.getString(2));  

            return mTextView;  

        }  

          

    }  

}  

第五步:运行程序效果如下:

 





 





 


    


 

第六步:查看我们所建的数据库。有两种方法:第一种用命令查看:adb shell ls data/data/com.android.tutor/databases。

另一种方法是用DDMS查看,在data/data下面对应的应用程序的包名 下会有如下数据库,如图所示:

 



源码下载:Android
数据库SQLiteDatabase的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQLite Database