android中sqlite数据库的使用
来源:互联网 发布:网络逗逗迪迪爱探险 编辑:程序博客网 时间:2024/05/18 13:27
用一个Demo程序完成sqlite数据库的增删查改。
创建数据库和表
android中使用SQLiteDatabase需要先实现SQLiteOpenHelper类:
public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table " + Constant.TABEL_NAME + " (" + Constant.ID + " integer primary key autoincrement, " + Constant.BOOK_NAME + " text, " + Constant.AUTHOR + " text, " + Constant.PAGES + " integer, " + Constant.PRICE + " real)"; private Context mContext; public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log.i(getClass().getSimpleName(), "onCreate called..."); sqLiteDatabase.execSQL(CREATE_BOOK); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { }}
onCreate只在数据库被创建时调用,可以在里面创建我们想要的数据库;sqLiteDatabase.execSQL就是使用SQL语法执行数据库操作,这里是创建一个表,列名称为id,name,author,pages和price。每列都有自己的数据类型。
对于sqlite的操作,我们可以通过adb shell查看数据库的内容:
进入data/data/包名/databases目录,执行:
sqlite3 database
进入sqlite命令模式,便可以使用SQL语言对数据库进行操作:
select * from tablename;
就是查看数据库内容,因为还没有往表里添加内容,所以是空的。
新增数据
用SQL语句添加数据:
SQLiteDatabase sqLiteDatabase = myDatabaseHelper.getWritableDatabase(); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('xiyouji','wuchengen',400, 40.0)"); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('sanguoyanyi','luoguanzhong',500, 50.0)" ); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('hongloumeng','caoxueqin',600, 60.0)" ); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('shuihuzhuan','shinaian',700, 70.0)" ); sqLiteDatabase.close();
上面对book表添加了四组数据,再通过adb看看,为了方便查看,使用.mode column使table列对齐;.head on打开列名称显示,再使用select * from book查看内容:
数据查询
接下来再使用rawQuery对数据进行查询:
String[] args;Cursor cursor = null;args = new String[]{"50.0", "60.0"}; cursor = sqLiteDatabase.rawQuery("select * from book where price >= ? and price <= ?", args); showDBInfo(cursor); args = new String[]{"shinaian", "caoxueqin"}; cursor = sqLiteDatabase.rawQuery("select * from book where author = ? or author = ?", args); showDBInfo(cursor); cursor.close();
得到cursor,然后打印查到的数据:
private void showDBInfo(Cursor cursor) { if (cursor.moveToFirst()) { do { // 遍历Cursor对象,取出数据并打印 String name = cursor.getString(cursor.getColumnIndex(Constant.BOOK_NAME)); String author = cursor.getString(cursor.getColumnIndex(Constant.AUTHOR)); int pages = cursor.getInt(cursor.getColumnIndex(Constant.PAGES)); double price = cursor.getDouble(cursor.getColumnIndex(Constant.PRICE)); Log.i(getClass().getSimpleName(), "book name is " + name); Log.i(getClass().getSimpleName(), "book author is " + author); Log.i(getClass().getSimpleName(), "book pages is " + pages); Log.i(getClass().getSimpleName(), "book price is " + price); } while (cursor.moveToNext()); } }
相对于其它操作,数据库最复杂的就是查询功能,sqlitedatabase提供的接口:
public Cursor rawQuery(String sql, String[] selectionArgs) { }
第一个参数就收sql语句,第二个是查询参数,我是看了这里的语法将查找条件定为价格在50.0到60.0之间的书。
第二次是查询作者为shinaian或caoxueqin的书,运行结果:
修改
将xiyouji价格改为1000,将作者为shinaian的书价格改为2000:
sqLiteDatabase.execSQL("update book set price = '1000' where name = 'xiyouji'"); sqLiteDatabase.execSQL("update book set price = '2000' where author = 'shinaian'"); sqLiteDatabase.close();
结果:
删除
删除caoxueqin的书:
sqLiteDatabase.execSQL("delete from book where author = 'caoxueqin'"); sqLiteDatabase.close();
sqlite不需要专门花时间学习,用的时候查查语法就差不多了。
直接用SQLite语句操作数据库
进入sqlite命令行模式后可以直接用SQLite语句操作数据库进行增删查改。增加、删除、修改命令就和代码里execSQL的参数一样;查询命令就把rawQuery第二个参数填入第一个中。:
主要代码
public class SQLiteActivity extends AppCompatActivity implements View.OnClickListener{ private Button creatBT; private Button insertBT; private Button queryBT; private Button updateBT; private Button deleteBT; private MyDatabaseHelper myDatabaseHelper; private SQLiteDatabase sqLiteDatabase; private static final String DB_NAME = "MyDB.db"; private static final String TABEL_NAME = "book"; private List<Book> bookList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite); myDatabaseHelper = new MyDatabaseHelper(getApplicationContext(), DB_NAME, null, 1); creatBT = (Button) findViewById(R.id.creatBT); insertBT = (Button) findViewById(R.id.insertBT); queryBT = (Button) findViewById(R.id.queryBT); updateBT = (Button) findViewById(R.id.updateBT); deleteBT = (Button) findViewById(R.id.deleteBT); creatBT.setOnClickListener(this); insertBT.setOnClickListener(this); queryBT.setOnClickListener(this); updateBT.setOnClickListener(this); deleteBT.setOnClickListener(this); bookList = new ArrayList<>(); Book book = new Book("xiyouji", "wuchengen", 500, 45.5); bookList.add(book); book = new Book("sanguoyanyi", "luoguanzhong", 400, 60.5); bookList.add(book); book = new Book("shuihuzhuan", "shinaian", 600, 66.3); bookList.add(book); book = new Book("hongloumeng", "caoxueqin", 700, 77.5); bookList.add(book); } @Override public void onClick(View view) { String[] args; Cursor cursor = null; switch (view.getId()){ case R.id.creatBT: Log.i(getClass().getSimpleName(), "creatBT clicked"); sqLiteDatabase = myDatabaseHelper.getWritableDatabase(); break; case R.id.insertBT: Log.i(getClass().getSimpleName(), "insertBT clicked");// ContentValues cv = new ContentValues();// cv.put(Constant.AUTHOR, "auther1");// cv.put(Constant.PRICE, 100.5);// cv.put(Constant.PAGES, 200);// cv.put(Constant.BOOK_NAME, "name1");// if (sqLiteDatabase == null){// sqLiteDatabase = myDatabaseHelper.getWritableDatabase();// }// long res = sqLiteDatabase.insert(TABEL_NAME, null, cv);// Log.i(getClass().getSimpleName(), "sqLiteDatabase.insert res:" + res); if (sqLiteDatabase == null){ sqLiteDatabase = myDatabaseHelper.getWritableDatabase(); } sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('xiyouji','wuchengen',400, 40.0)"); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('sanguoyanyi','luoguanzhong',500, 50.0)" ); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('hongloumeng','caoxueqin',600, 60.0)" ); sqLiteDatabase.execSQL("insert into book(name, author, pages, price)" + " values('shuihuzhuan','shinaian',700, 70.0)" );// sqLiteDatabase.close(); break; case R.id.queryBT: if (sqLiteDatabase == null){ sqLiteDatabase = myDatabaseHelper.getWritableDatabase(); }// String[] columns = new String[]{Constant.AUTHOR, Constant.BOOK_NAME};// Cursor cursor = sqLiteDatabase.query(Constant.TABEL_NAME, columns, null, null, null, null, null);// showDBInfo2(cursor);// Cursor cursor = sqLiteDatabase.query(Constant.TABEL_NAME, null, null, null, null, null, null);// showDBInfo(cursor); args = new String[]{"50.0", "60.0"}; cursor = sqLiteDatabase.rawQuery("select * from book where price >= ? and price <= ?", args); showDBInfo(cursor); args = new String[]{"shinaian", "caoxueqin"}; cursor = sqLiteDatabase.rawQuery("select * from book where author = ? or author = ?", args); showDBInfo(cursor); cursor.close(); break; case R.id.updateBT: if (sqLiteDatabase == null){ sqLiteDatabase = myDatabaseHelper.getWritableDatabase(); } sqLiteDatabase.execSQL("update book set price = '1000' where name = 'xiyouji'"); sqLiteDatabase.execSQL("update book set price = '2000' where author = 'shinaian'");// sqLiteDatabase.close(); break; case R.id.deleteBT: if (sqLiteDatabase == null){ sqLiteDatabase = myDatabaseHelper.getWritableDatabase(); } sqLiteDatabase.execSQL("delete from book where author = 'caoxueqin'");// sqLiteDatabase.close(); default: break; } } private void showDBInfo(Cursor cursor) { if (cursor.moveToFirst()) { do { // 遍历Cursor对象,取出数据并打印 String name = cursor.getString(cursor.getColumnIndex(Constant.BOOK_NAME)); String author = cursor.getString(cursor.getColumnIndex(Constant.AUTHOR)); int pages = cursor.getInt(cursor.getColumnIndex(Constant.PAGES)); double price = cursor.getDouble(cursor.getColumnIndex(Constant.PRICE)); Log.i(getClass().getSimpleName(), "book name is " + name); Log.i(getClass().getSimpleName(), "book author is " + author); Log.i(getClass().getSimpleName(), "book pages is " + pages); Log.i(getClass().getSimpleName(), "book price is " + price); } while (cursor.moveToNext()); } } private void showDBInfo2(Cursor cursor){ if (cursor.moveToFirst()){ do { // 遍历Cursor对象,取出数据并打印 String name = cursor.getString(cursor.getColumnIndex(Constant.BOOK_NAME)); String author = cursor.getString(cursor.getColumnIndex(Constant.AUTHOR)); Log.i(getClass().getSimpleName(), "book name is " + name); Log.i(getClass().getSimpleName(), "book author is " + author); } while (cursor.moveToNext()); } }}
- Android中sqlite数据库的简单使用
- Android数据库Sqlite中索引的使用
- Android 开发中 SQLite 数据库的使用
- Android中SQLite数据库的使用
- Android中SQLite数据库的简单使用
- Android数据库Sqlite中索引的使用
- Android中Sqlite数据库的使用
- android中sqlite数据库的使用
- android 中数据库SQLite使用
- Android中使用Sqlite数据库
- Android中SQLite数据库使用
- sqlite的简单使用,Android中数据库的简单使用
- Android 开发中使用 SQLite 数据库的使用
- Android 开发中使用 SQLite 数据库的使用
- Android使用的SQLite数据库
- Android SQLite数据库的使用
- android SQLite数据库的使用
- android数据库SQlite的使用
- Python 字符串匹配(match)
- [练习]背包DP 竞赛得分
- 点击新闻条目显示更详细的信息
- HashMap分析
- ubuntu14.04 安装opencv 2.13
- android中sqlite数据库的使用
- 设计模式【适配器模式Adapter Pattern】
- JavaScript的基础应用之复选框
- 什么是进程? 进程具有哪些主要特性? 比较进程与程序之间相同点与不同点
- NuGet包管理器
- JavaScript选项卡
- persepctive of LTE channel estimation
- Python3 Standard Library
- 在mac下安装mysql