创建一个DataBaseHelper的类,这个类是继承SQLiteOpenHelper类的,这个类中包含创建数据库、打开数据库、创建表、添加数据和查询数据的方法。代码如下:
package com.example.message_board;
import java.io.FileOutputStream;
import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import android.R.bool;
import android.R.integer;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteException;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class DataBaseHelper extends SQLiteOpenHelper
{
private static String DB_PATH= ""; private static String DB_NAME="Message.db"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor * Takes and keeps a reference of the passed context in order to access to the application assets and resources. * @param context */ public DataBaseHelper(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; Log.v("DB_PATH1",DB_PATH); DB_PATH=myContext.getDatabasePath(DB_NAME).getPath(); Log.v("DB_PATH2",DB_PATH); } /** * Creates a empty database on the system and rewrites it with your own database. * */ public void createDataBase() throws IOException{
boolean dbExist = checkDataBase(); if(dbExist) { //do nothing - database already exist } else { //By calling this method and empty database will be created into the default system path //of your application so we are gonna be able to overwrite that database with our database. this.getReadableDatabase(); try { copyDataBase(); }catch (IOException e)
{ throw new Error("Error copying database"); } } } /** * Check if the database already exist to avoid re-copying the file each time you open the application. * @return true if it exists, false if it doesn't */ private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch(SQLiteException e) { //database does't exist yet. } if(checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created empty database in the * system folder, from where it can be accessed and handled. * This is done by transfering bytestream. * */ private void copyDataBase() throws IOException { //Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH; //Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0) { myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException { //Open the database String myPath = DB_PATH ; Log.v("myPath",myPath); myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); }//create a table
public void createTable() throws SQLException { try { myDataBase.execSQL("CREATE TABLE MessageTable (_id INTEGER PRIMARY KEY AUTOINCREMENT,content TEXT);"); } catch (Exception e) { // TODO: handle exception } }//insert the data to the database
public void insertrecord(String contentString) throws SQLException { try { //String content=contentString; String sql="insert into MessageTable(content) values('"+contentString+"');"; Log.v("aaa", sql); myDataBase.execSQL(sql); Log.v("aaa_a", sql); } catch (Exception e) { Log.v("aaa_e", e.toString()); } }//select record
public List<String> selectrecord() throws SQLException { List<String> list = new ArrayList<String>(); //String[] strArr = new String[list.size()]; //list.toArray(strArr); try { Cursor cr = myDataBase.rawQuery("select * from MessageTable", null); while(cr.moveToNext()) { //Content+=cr.getString(1); Log.v("Record",cr.getString(1)); list.add(cr.getString(1)); } } catch (Exception e) { // TODO: handle exception Log.v("ERR", e.toString()); } return list; } @Override public synchronized void close() { if(myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }