Android开发——SQLite数据库(二)android studio创建数据库,进行插入、删除、更新、查询操作
16lz
2021-01-26
运行效果:
本文对数据库的建立、更新,数据的插入、更新、查询、删除,及事务的处理进行示例讲解。
代码里有注释帮助理解。
实现代码:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
DBHelper
package com.example.administrator.dbexcise.database;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;/** * Created by Administrator on 2019/6/19. */public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context, int version) { //上下文,数据库文件名,null,版本号 super(context, "person.db", null, version); } /** * 什么时候调用? * 当数据库文件创建时调用 * 在此方法中做什么? * 建表,初始化数据 * @param sqLiteDatabase 是操作数据库的对象 */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { Log.e("TAG", "onCreate: " ); String sql = "create table person (_id integer primary key autoincrement,name varchar,age int)"; sqLiteDatabase.execSQL(sql); } /** * 当传入的版本号大于当前数据库的版本号时调用 * 用于更新数据库 * @param sqLiteDatabase * @param i * @param i1 */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { Log.d("TAG", "onUpgrade: "); }}
MainActivity
package com.example.administrator.dbexcise;import android.content.ContentValues;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.example.administrator.dbexcise.database.DBHelper;public class MainActivity extends AppCompatActivity { Button button, button2, button3, button4, button5, button6; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.bt1); button2 = (Button) findViewById(R.id.bt2); button3 = (Button) findViewById(R.id.bt3); button4 = (Button) findViewById(R.id.bt4); button5 = (Button) findViewById(R.id.bt5); button6 = (Button) findViewById(R.id.bt6); } /** * 创建库 * * @param view */ public void testCreateDB(View view) { DBHelper dbHelper = new DBHelper(this, 1); //获取连接 SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase(); Toast.makeText(this, "创建数据库", Toast.LENGTH_SHORT).show(); } /** * 插入数据 * * @param view */ public void testInsertDate(View view) { DBHelper dbHelper = new DBHelper(this,2); //1.得到连接 SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase(); //2.执行insert ContentValues values = new ContentValues(); values.put("name","Tom"); values.put("age",21); //返回插入的id /** * 第一个参数:表名 * 第二个参数:null * 第三个参数:传入的HashMap值 */ long id = sqLiteDatabase.insert("person",null,values); //3.关闭连接 sqLiteDatabase.close(); //4.提示 Toast.makeText(this,"id= "+id,Toast.LENGTH_SHORT).show(); } /** * 删除数据 * * @param view */ public void testDeleteDate(View view) { DBHelper dbHelper = new DBHelper(this,2); //1.得到连接 SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase(); //2.执行delete String where = "name = ?"; String[] value = new String[]{ "Tom" }; //返回删除的数量 /** * 第一个参数:表名 * 第二个参数:删除的where后的语句 * 第三个参数:? 所代表的值 */ int deleteCount = sqLiteDatabase.delete("person",where,value); //3.关闭连接 sqLiteDatabase.close(); //4.提示 Toast.makeText(this,"deleteCount = "+deleteCount,Toast.LENGTH_SHORT).show(); } /** * 更新数据 * * @param view */ public void testUpdateDate(View view) { DBHelper dbHelper = new DBHelper(this,2); //1.得到连接 SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase(); //2.执行update update person set name = "Jack",age = 20 where _id = 6 /** * 第一个参数:表名 * 第二个参数:更新的value * 第三个参数:where 后的语句 * 第四个参数:? 所代表的值 */ ContentValues values = new ContentValues(); values.put("name","Jack"); values.put("age",20); int updateCount = sqLiteDatabase.update("person",values,"_id = 6",null); //3.关闭连接 sqLiteDatabase.close(); //4.提示 Toast.makeText(this,"updateCount = "+updateCount,Toast.LENGTH_SHORT).show(); } /** * 查询数据 * * @param view */ public void testQueryDate(View view) { DBHelper dbHelper = new DBHelper(this,2); //1.得到连接 SQLiteDatabase sqLiteDatabase = dbHelper.getReadableDatabase(); //2.执行query select * from person Cursor cursor = sqLiteDatabase.query("person",null,null,null,null,null,null); //得到cursor查询到的总记录数 int count = cursor.getCount(); while(cursor.moveToNext()){ // id int id = cursor.getInt(0); // name String name = cursor.getString(1); // age int age = cursor.getInt(cursor.getColumnIndex("age")); } //3.关闭连接 cursor.close(); sqLiteDatabase.close(); //4.提示 Toast.makeText(this,"count = "+count,Toast.LENGTH_SHORT).show(); } /** * 事务处理 * * 一个功能中对数据库进行多个操作,要就都成功要就都失败 * 事务处理三步骤: * 1. 开启事务(获取连接后) * 2. 设置事务成功(在全部正常执行完后) * 3. 结束事务(finally中进行) * * @param view */ public void testHandleAffair(View view) { SQLiteDatabase sqLiteDatabase = null; try { DBHelper dbHelper = new DBHelper(this,2); //1.得到连接 sqLiteDatabase = dbHelper.getReadableDatabase(); //1. 开启事务(获取连接后) sqLiteDatabase.beginTransaction(); //2.执行update update person set age = 20 where _id = 6 ContentValues values = new ContentValues(); values.put("age",20); int updateCount = sqLiteDatabase.update("person",values,"_id = 6",null); boolean flag = true; if(flag) { throw new RuntimeException("出异常啦!!"); } //执行update update person set age = 21 where _id = 7 values.put("age",21); int updateCount2 = sqLiteDatabase.update("person",values,"_id = 7",null); //2.设置事务成功(在全部正常执行完后) sqLiteDatabase.setTransactionSuccessful(); }catch (Exception e) { Toast.makeText(this,"出异常啦!!!",Toast.LENGTH_SHORT).show(); }finally { if (sqLiteDatabase!=null) { //3.结束事务(finally中进行) sqLiteDatabase.endTransaction(); //3.关闭连接 sqLiteDatabase.close(); } } }}
注意:new一个数据库对象后,一定要获取连接再进行操作。
链接:https://pan.baidu.com/s/1TwNX_V0pI-yPSBFqJpm9DA
提取码:hnz2
更多相关文章
- Android的Activity的小知识点
- 使用Android(安卓)studio阅读Android源码
- android定时任务的几种实现方式
- Android(安卓)获取当前连接的wifi名称和rssi
- Android(安卓)Adapter中的getView缓存失效
- WebRTC学习笔记_Demo收集
- android在代码中修改view的布局
- 【Android(安卓)开发教程】在服务中执行重复任务
- AsyncTask的使用及其源码分析