zoukankan      html  css  js  c++  java
  • Android平台使用SQLite数据库存储数据

      创建一个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)
    {

    }


    }

  • 相关阅读:
    hive报错 java.sql.SQLException: No suitable driver found for jdbc:hive://localhost:10000/default
    使用Beeline连接Hive
    hive报错 root is not allowed to impersonate root (state=08S01,code=0)
    hive报错 Could not open client transport with JDBC Uri: jdbc:hive2://node01:10000/default:java.net.ConnectException refused
    excel快速删除空值单元格,数据上移
    FineBI 图表选择
    数据库连接池大小设置?
    工作中有待留❤️积累的一些经验
    内存包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。RAM最重要
    我自己ood的复习思路:抄
  • 原文地址:https://www.cnblogs.com/wucaiyun1/p/4668038.html
Copyright © 2011-2022 走看看