Android自學筆記-10-Sqlite的簡單使用

在android中已經內置瞭Sqlite數據庫,如果我們需要使用Sqlite數據庫,谷歌已經給我們提供瞭比較方便的方法,我們隻需要自己編寫一個java類,然後繼承SQLiteOpenHelper,實現其中的方法就可以使用瞭。下面是一段代碼:

package com.mxy;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {


	public PersonSQLiteOpenHelper(Context context) {
		//參數分別為上下文、數據庫文件、CursorFactory、數據庫版本
		//CursorFactory如果為null 則使用默認的CursorFactory
		super(context, "person.db", null, 1);
	}

	/**
	 * 數據庫第一次被創建的時候調用 可以初始化表和參數等
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		//創建表 底層以string格式存儲  所以varchar的字符不會起作用
		db.execSQL("create table person (id integer primary key autoincrement,name varchar(20),number varchar(20))");

	}

	/**
	 * 數據庫版本發生變化的時候調用 可以用於修改數據表結構 數據庫參數等
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

然後我們可以創建該類的實例去操作數據庫,但是我們在調用getReadableDatabase()或getWritableDatabase()之前,並不會真正的創建數據庫文件。在真正操作數據庫的時候,我們可以直接使用sql語句,也可以使用谷歌給我們封裝好的一些方法,這裡建議使用谷歌提供的方法,可以提高我們的正確率。下面是一個代碼:

package com.mxy;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //直接使用sql語句操作數據庫
//        sqlString();
        //使用android封裝的api
        PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(this);
        //調用下面兩者之一 才會真正的創建數據庫文件
//        helper.getReadableDatabase();
        SQLiteDatabase db = helper.getWritableDatabase();
        
        ContentValues values = new ContentValues();
        values.put("name", "lisi");
        values.put("number", "222222");
        
        long rowid = db.insert("person", null, values);
        
        if(rowid != -1){
        	Log.i("mxy", "添加成功");
        }else{
        	Log.i("mxy", "添加失敗");
        }
        
        
        Cursor cursor = db.query("person", null, "name=?", new String[]{"zhangsan"}, null, null, null);
        
        while(cursor.moveToNext()){
        	int id = cursor.getInt(cursor.getColumnIndex("id"));
        	String number = cursor.getString(2);
        	Log.i("mxy", "id:" + id + "  number:" + number);
        }
        
        cursor.close();
        
        db.close();
    }


	private void sqlString() {
		PersonSQLiteOpenHelper helper = new PersonSQLiteOpenHelper(this);
        //調用下面兩者之一 才會真正的創建數據庫文件
//        helper.getReadableDatabase();
        SQLiteDatabase db = helper.getWritableDatabase();
        
        db.execSQL("insert into person (name,number) values (?,?)", new Object[]{"zhangsan","12222"});
        
        Cursor cursor = db.rawQuery("select * from person where name=?", new String[]{"zhangsan"});
        
        while(cursor.moveToNext()){
        	int id = cursor.getInt(cursor.getColumnIndex("id"));
        	String number = cursor.getString(2);
        	Log.i("mxy", "id:" + id + "  number:" + number);
        }
        
        cursor.close();
        
        db.close();
	}


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

轉載請註明出處:https://blog.csdn.net/mengxiangyu

發佈留言