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

Android开发之——SQLite使用方法

2012-04-01 16:04 489 查看
本来通过简单的实例来实现安卓对SQLite的操作。

package mars.sqlite3;

import mars.sqlite3.db.DatabaseHelper;

import android.app.Activity;

import android.content.ContentValues;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class SQliteActivity extends Activity {

    /** Called when the activity is first created. */

    private Button createDBButton ;

    private Button insertDBButton ;

    private Button updateDBButton ;

    private Button queryDBButton ;

    private Button deleteDBButton ;

    private EditText input_id ;

    private EditText input_name ;

    private TextView test ;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //此处为创建数据库, 通过按钮监听器来实现

        createDBButton = (Button) findViewById(R.id.creatDB) ;

        createDBButton.setOnClickListener(new CreateDBListener()) ;

        //此处为插入数据到数据库中

        insertDBButton = (Button) findViewById(R.id.insert) ;

        insertDBButton.setOnClickListener(new InsertListener()) ;

        //此处为更新数据表

        updateDBButton = (Button) findViewById(R.id.update) ;

        updateDBButton.setOnClickListener(new updateListener()) ;

        //此处为更新数据表

        queryDBButton = (Button) findViewById(R.id.query) ;

        queryDBButton.setOnClickListener(new queryListener()) ;

        //此处为删除数据内容

        deleteDBButton = (Button) findViewById(R.id.delete) ;

        deleteDBButton.setOnClickListener(new deleteListener()) ;

        //此处为显示查询结果

        test = (TextView) findViewById(R.id.result) ;

        test.setText("name") ;

        //此处为添加数据的选项

        input_id = (EditText) findViewById(R.id.input_id) ;

        input_name = (EditText) findViewById(R.id.input_name) ;

    }

    class CreateDBListener implements OnClickListener{

        @Override

        public void onClick(View v) {
            // 此处为调用另外一个类中的方法来创建数据库, 或者直接来创建数据库

           String db_name = "test_mars_db_one" ;

            DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, db_name ;

            SQLiteDatabase db = dbHelper.getReadableDatabase() ;

        }       

    }

    class InsertListener implements OnClickListener{

        public void onClick(View v){

            //生成一个ContentValues对象

            ContentValues values = new ContentValues() ;

            values.put("id", input_id.getText().toString()) ;

            values.put("name", input_name.getText().toString()) ;

            DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;

            SQLiteDatabase db = dbHelper.getWritableDatabase() ;

            //调用insert方法, 就可以将数据插入到数据库中

            db.insert("user", null, values) ;

        }

    }

    class updateListener implements OnClickListener{

        @Override

        public void onClick(View v) {

            // 此处为更新数据内容  

            DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;

            SQLiteDatabase db = dbHelper.getWritableDatabase() ;

            ContentValues values = new ContentValues() ;

            values.put("name", "Two china") ;

            //第一个参数为要更新的表名

            //第二个参数为一个ContentValues对象

            //第三个参数是where语句

            db.update("user", values, "id=?", new String[]{"2"}) ;

        }

    }

    class queryListener implements OnClickListener{

        @Override

        public void onClick(View v) {

            // 此处为查询数据内容,
并用到cursor来实现

            DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;

            SQLiteDatabase db = dbHelper.getWritableDatabase() ;

            Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"2"},null,null,null,null) ;

            while(cursor.moveToNext()){

                String name = cursor.getString(cursor.getColumnIndex("name")) ;

                System.out.print("query---> " + name) ;

                //name += name ;

                test.setText(name) ;

            }

        }

    }

    class deleteListener implements OnClickListener{
        public void onClick(View v) {

         //此处为实现删除数据

            DatabaseHelper dbHelper = new DatabaseHelper(SQliteActivity.this, "test_mars_db_one") ;
            SQLiteDatabase db = dbHelper.getWritableDatabase() ;

            //删除特定条件的数据

            //db.delete("user","id=?",new String[]{"2"});
            //删除所有数据

            db.delete("user",null,null);

        }

    }
}

DatabaseHelper.class , 将其独立出来, 便于管理

package mars.sqlite3.db;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.database.sqlite.SQLiteOpenHelper;

public class DatabaseHelper extends SQLiteOpenHelper{

    private static final int VERSION = 1 ;

    public DatabaseHelper(Context context, String name, CursorFactory factory,

            int version) {

        //必须通过super调用父类当中的构造函数

        super(context, name, factory, version);

        // TODO Auto-generated constructor stub

    }

    public DatabaseHelper(Context context, String name){

        this(context, name, VERSION) ;

    }

    public DatabaseHelper(Context context, String name, int version){

        this(context, name,null, version) ;

    }

    //该函数是在第一次创建数据库的时候执行, 实际上是在第一次得到SQLiteDatabase对象的时候执行

    @Override

    public void onCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub

        System.out.print("Create a Database. ") ;

        //execSQL方法用于执行SQL语句

        db.execSQL("create table user(id int,name varchar(20))") ;

    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        // TODO Auto-generated method stub

        System.out.print("Update a Database. ") ;

    }

}

PS:

1. SQLiteDatabase(android.database.sqlite.SQLiteDatabase)

        关于操作数据库的工作(增、删、查、改)都在这个类里

        execSQL(sql): 执行SQL语句,用这个方法+SQL语句可以非常方便的执行增、删、查、改

        除此之外,Android还提供了功过方法实现增、删、查、改

        long insert(TABLE_NAME, null, contentValues)添加记录

        int delete(TABLE_NAME, where, whereValue)删除记录

        int update(TABLE_NAME, contentValues, where, whereValue) 更新记录

        Cursor query(TABLE_NAME, null, null, null, null, null, null) 查询记录

        除此之外,还有很多方法,如:beginTransaction()开始事务、endTransaction()结束事务...有兴趣的可以自己看api,这里就不多赘述了

2. Cursor(android.database.Cursor)

        游标(接口),这个很熟悉了吧,Cursor里的方法非常多,常用的有:

        boolean moveToPosition(position)将指针移动到某记录

        getColumnIndex(Contacts.People.NAME)按列名获取id

        int  getCount()获取记录总数

        boolean requery()重新查询

        boolean  isAfterLast()指针是否在末尾

        boolean  isBeforeFirst()时候是开始位置

        boolean  isFirst()是否是第一条记录

        boolean  isLast()是否是最后一条记录

        boolean  moveToFirst()、        boolean  moveToLast()、        boolean  moveToNext()同moveToPosition(position)

3. db.query(

                                                tbname,

                                                new String[]{"_id","tname","tage","ttel","taddr"},

                                                null,

                                                null, null, null, "_id desc");

                        }

                        关于db.query方法的参数,有很多,为了防止大家弄乱,我简单说一下

                        参数1:表名

                        参数2:返回数据包含的列信息,String数组里放的都是列名

                        参数3:相当于sql里的where,sql里where后写的内容放到这就行了,例如:tage>?

                        参数4:如果你在参数3里写了?(知道我为什么写tage>?了吧),那个这里就是代替?的值 接上例:new String[]{"30"}

                        参数5:分组,不解释了,不想分组就传null

                        参数6:having,想不起来的看看SQL

                        参数7:orderBy排序

可以参考: http://android.tgbus.com/Android/tutorial/201103/346179.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息