上次我使用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 dict 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>
效果:
时间: 2024-10-10 16:08:08