使用SQLiteOpenHelper操控数据库

coding

上次我使用SQLiteDatabase来操作数据库,但更常见的是使用SQLiteDatabase来操作SQLite.

一般的用法是创建SQLiteOPenHelper的子类,扩展它的onCreatea(SQLiteDatabase db) 和 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法。


Synchronized SQLiteDatabase getReadableDatabase()

-->以读写的方式打开数据库对应的SQLiteDatabase对象。

Synchronized SQLiteDatabase getWritableDatabase()

-->以写的方式打开数据库对应的SQLiteDatabase对象。

abstract void onCreate(SQLiteDatabase db)

-->第一次创建数据库时,回调该方法。

abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

-->当数据库版本更新时,回调该方法。

Synchronized void close()

-->关闭所有打开的数据库。


        得到SQLiteDatabase对象后,就 不需用SQLiteDatabase的静态方法创建SQLiteDatabase对象,而可以用getWritableDatabase()或getReadableDatabase()方法来获取一个SQLiteDatabase对象。

       当数据库的磁盘空间满了时, 数据库就只能读,不能写, 而 getWritableDatabase()以读写方式打开数据库,此时用getWritableDatabase()打开数据库会出错

        getReadableDatabase()先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,但失败后会继续尝试以只读的方式打开数据库。


        当然,说那么多废话,还不如代码来的爽快。

自定义MyDatabaseHelper

--MyDatabaseHelper.java

public class MyDatabaseHelper extends SQLiteOpenHelper {

final String CREATE_TABLE = "create table dict(_id integer primary key autoincrement, word, detail)";

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

super(context, name, null, version);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(CREATE_TABLE);

}

@Override

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

}

}


---Main.java

public class Main extends Activity {

MyDatabaseHelper dbHelper;

EditText editText1 ,editText2, editText3;

Button insert, search;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//此处使用相对路径,数据库文件自动保存在程序的数据库文件的database目录下

dbHelper = new MyDatabaseHelper(this, "mydict.db3", 1);

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

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

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

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

search = (Button) findViewById(R.id.button2);

insert.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

insertIntoDatabase(dbHelper.getReadableDatabase(), editText1.getText().toString(),editText2.getText().toString());

Toast.makeText(Main.this, "插入成功", Toast.LENGTH_SHORT).show();

}

});

search.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String key = editText3.getText().toString();

if(key.equals("")||key==null)

return;

Cursor cursor = dbHelper.getReadableDatabase().rawQuery("select * from mydict where word like ? or detail like ?", 

new String[]{"%"+key+"%", "%"+key+"%"});

Bundle bundle = new Bundle();

bundle.putSerializable("data", converCursorToList(cursor));

Intent intent = new Intent(Main.this, ResultDict.class);

intent.putExtras(bundle);

startActivity(intent);

}

});

}

protected ArrayList<Map<String, String>>  converCursorToList(Cursor cursor){

ArrayList<Map<String, String>> result = new ArrayList<Map<String,String>>();

while(cursor.moveToNext()){

Map<String, String> map = new HashMap<String, String>();

map.put("word", cursor.getString(1));

map.put("detail", cursor.getString(2));

result.add(map);

}

return result;

}

private void insertIntoDatabase(SQLiteDatabase db, String word, String detail){

db.execSQL("insert into dict values(null, ?, ?)", new String[]{word, detail});

}

@Override

protected void onDestroy() {

super.onDestroy();

if(dbHelper!=null){

dbHelper.close();

}

}

}

--ResultDict.java

public class ResultDict extends Activity {

ListView listView ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.resultdict);

listView = (ListView) findViewById(R.id.listView1);

Intent intent = getIntent();

Bundle bundle=intent.getExtras();

@SuppressWarnings("unchecked")

List<Map<String, String>> list = (List<Map<String, String>>) bundle.getSerializable("data");

SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.item, 

new String[]{"word", "detail"}, new int[]{R.id.textView_2, R.id.textView_4} );

listView.setAdapter(adapter);

}

}

主布局文件:

--main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="${relativePackage}.${activityClass}" >

    <EditText

        android:id="@+id/editText1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:ems="10" >

        <requestFocus />

    </EditText>

    <EditText

        android:id="@+id/editText2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/editText1"

        android:ems="10" />

    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/editText2"

        android:layout_marginTop="80dp"

        android:text="添加单词" />

    <Button

        android:id="@+id/button2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/button1"

        android:layout_marginTop="80dp"

        android:text="查找" />

    <EditText

        android:id="@+id/editText3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_below="@+id/button1"

        android:layout_marginTop="45dp"

        android:ems="10" />

</RelativeLayout>

--resultdict.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content" >

    <ListView

        android:id="@+id/listView1"

        android:layout_width="200dp"

        android:layout_height="200dp"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>

--item.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <TextView

        android:id="@+id/textView_1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="单词" />

    <TextView

        android:id="@+id/textView_2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="TextView" />

    <TextView

        android:id="@+id/textView_3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="解释" />

    <TextView

        android:id="@+id/textView_4"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="TextView" />

</LinearLayout>

效果:

以上是 使用SQLiteOpenHelper操控数据库 的全部内容, 来源链接: utcz.com/z/509700.html

回到顶部