Android 使用SQLite本地数据库

您所在的位置:网站首页 安卓读取本地数据库 Android 使用SQLite本地数据库

Android 使用SQLite本地数据库

2024-07-14 09:05| 来源: 网络整理| 查看: 265

二、程序文件

  1、SQLiteHelper.java文件

   然后输入以下代码:

package com.example.yanlei.my; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class SQLiteHelper extends SQLiteOpenHelper { private final static String DATABASE_NAME = "Library"; private final static int DATABASE_VERSION = 1; private final static String TABLE_NAME = "Book"; //构造函数,创建数据库 public SQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } //建表 public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE " + TABLE_NAME + "(_id INTEGER PRIMARY KEY," + " BookName VARCHAR(30) NOT NULL," + " Author VARCHAR(20)," + " Publisher VARCHAR(30))"; db.execSQL(sql); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { String sql = "DROP TABLE IF EXISTS " + TABLE_NAME; db.execSQL(sql); onCreate(db); } //获取游标 public Cursor select() { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); return cursor; } //插入一条记录 public long insert(String bookName,String author,String publisher ) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put("BookName", bookName); cv.put("Author", author); cv.put("Publisher", publisher); long row = db.insert(TABLE_NAME, null, cv); return row; } //根据条件查询 public Cursor query(String[] args) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM "+TABLE_NAME+" WHERE BookName LIKE ?", args); return cursor; } //删除记录 public void delete(int id) { SQLiteDatabase db = this.getWritableDatabase(); String where ="_id = ?"; String[] whereValue = { Integer.toString(id) }; db.delete(TABLE_NAME, where, whereValue); } //更新记录 public void update(int id, String bookName,String author,String publisher) { SQLiteDatabase db = this.getWritableDatabase(); String where = "_id = ?"; String[] whereValue = { Integer.toString(id) }; ContentValues cv = new ContentValues(); cv.put("BookName", bookName); cv.put("Author", author); cv.put("Publisher", publisher); db.update(TABLE_NAME, cv, where, whereValue); } }

 2、MainActivity.java文件

   然后输入以下代码:

package com.example.yanlei.my; import android.database.Cursor; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleCursorAdapter; public class MainActivity extends AppCompatActivity { private SQLiteHelper helper; private Cursor cursor; private ListView lvBook; private EditText editBook; private EditText editAuthor; private EditText editPublisher; private int id = 0; protected final static int MENU_ADD = Menu.FIRST; protected final static int MENU_EDIT = Menu.FIRST + 1; protected final static int MENU_QUERY = Menu.FIRST + 2; protected final static int MENU_DELETE = Menu.FIRST + 3; //执行菜单选项 public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()) { case MENU_ADD: this.addRec(); break; case MENU_EDIT: this.editRec(); break; case MENU_QUERY: this.queryRec(); break; case MENU_DELETE: this.deleteRec(); break; } return true; } //初始化菜单 public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(Menu.NONE, MENU_ADD, 0, R.string.addrec).setIcon(android.R.drawable.ic_menu_add); menu.add(Menu.NONE, MENU_EDIT, 0, R.string.editrec).setIcon(android.R.drawable.ic_menu_edit); menu.add(Menu.NONE, MENU_QUERY, 0, R.string.queryrec).setIcon(android.R.drawable.ic_menu_search); menu.add(Menu.NONE, MENU_DELETE, 0, R.string.delrec).setIcon(android.R.drawable.ic_menu_delete); return true; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvBook = (ListView) this.findViewById(R.id.listview); editBook = (EditText) this.findViewById(R.id.editbook); editAuthor = (EditText) this.findViewById(R.id.editauthor); editPublisher = (EditText) this.findViewById(R.id.editpublisher); //表中内容填充到自定义ListView helper = new SQLiteHelper(this); cursor = helper.select(); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.list, cursor, new String[]{"BookName", "Author", "Publisher"}, new int[]{R.id.textbookname, R.id.textauthor, R.id.textpublisher} ); lvBook.setAdapter(adapter); // lvBook设置OnItemClickListener监听事件 lvBook.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { cursor.moveToPosition(arg2); // 将cursor移到所点击的值 id = cursor.getInt(0); // 取得字段_id的值 editBook.setText(cursor.getString(1)); // 取得字段Rec_text的值 editAuthor.setText(cursor.getString(2)); editPublisher.setText(cursor.getString(3)); } }); } //添加记录 private void addRec() { if (editBook.getText().toString().equals("")) return; helper.insert(editBook.getText().toString(), editAuthor.getText().toString(), editPublisher.getText().toString()); //重新加载数据 cursor.requery(); lvBook.invalidateViews(); editBook.setText(""); editAuthor.setText(""); editPublisher.setText(""); } // 修改记录 private void editRec() { if (editBook.getText().toString().equals("")) return; helper.update(id, editBook.getText().toString(), editAuthor.getText().toString(), editPublisher.getText().toString()); //重新加载数据 cursor.requery(); lvBook.invalidateViews(); editBook.setText(""); editAuthor.setText(""); editPublisher.setText(""); } //根据书名查询 private void queryRec() { String et = editBook.getText().toString(); String args[] = new String[]{"%" + et + "%"}; cursor = helper.query(args); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, R.layout.list, cursor, new String[]{"BookName", "Author", "Publisher"}, new int[]{R.id.textbookname, R.id.textauthor, R.id.textpublisher} ); lvBook.setAdapter(adapter); } //删除记录 private void deleteRec() { helper.delete(id); cursor.requery(); lvBook.invalidateViews(); editBook.setText(""); } }

三、配置文件

  打开“AndroidManifest.xml”文件。  然后输入以下代码: 

实际上不需要任何修改

附:

(一)如何删除Sqlite数据库

  常有人问:如何删除自己创建的数据库?

  在Activity中,提供有现成的方法:public boolean deleteDatabase (String name)  

(二)SimpleCursorAdapter简要说明

  描述:

  SimpleCurosrAdapter 是一个将 Cursor 中的 columns 与在 XML 文件中定义的 TextViews 或 ImageViews 进行匹配的简易 adapter。你可以指定选择 Cursor 中的哪些 columns、用哪些 views 来显示这些 columns 、以及指定定义这些 views 的 xml 文件。

也就是说,SimpleCursorAdapter 允许绑定一个 Cursor 的 columns 到 ListView 上,并使用自定义的 layout 显示 List中的每个项目。

可以使用 SimpleCursorAdapter 作为中间桥梁,将从 sqlite 数据库中查询出来的数据直接显示到 ListView 中。

  原型:

  public SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {

     super(context, layout, c);      mTo = to;      mOriginalFrom = from;      findColumns(from);   }

  参数:

  Context context, 这个与 SimpleListItemFactory 相关的 ListView 所处运行上下文(context)。也就是这个 ListView 所在的 Activity。

  int layout, 显示 list item 的 布局文件。这个 layout 文件中至少要包含在 "to" 参数中命名的 views。

  Cursor c,数据库的光标( Cursor )。如果 cursor 无效,则该参数可以为 null

  String[] from, 指定 column 中的哪些列的数据将绑定(显示)到 UI 中。如果 cursor 无效, 则该参数可为 null。

  int[] to, 指定用于显示 "from" 参数指定的数据列表的 views。 这些 views 必须都是 TextViews。 "from" 参数的前 N 个值(valus)和 "to" 参数的前 N 个 views 是一一对应的关系。如果 cursor 无效,则该参数可为 null。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3