Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

Android:SQLiteOpenHelper类(SQLlite数据库操作)详细解析

前言

  • SQLite数据库操作在Android开发中非常常用
  • 今天我将带大家全面了解关于SQLite数据库的操作(增、删、查、改)

image


目录


1. SQLite数据库介绍

  • SQLite是Android内置的一个小型、关系型、属于文本型的数据库。 Android提供了对 SQLite数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据库,但是应用程序之外的就不能访问。
  • Android中,通过SQLiteOpenHelper类来实现对SQLite数据库的操作。

2. SQLiteOpenHelper类介绍

  • 定义:SQLiteOpenHelper是一个辅助类
  • 作用:管理数据库(创建、增、修、删) & 版本的控制。
  • 使用过程:通过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库进行操作。 在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。
  • SQLiteOpenHelper类的数据库操作方法介绍

image

|


3. 常见数据库使用

数据库操作无外乎:“增删查改”:

  1. 对于“增、删、改(更新)”这类对表内容变换的操作,需先调用**getWritableDatabase()**获得一个可写数据库对象,在执行的时候调用通用的execSQL(String sql)或或对应的操作API方法:insert()、delete()、update()
  2. 对“查”,需要调用getReadableDatabase()获得一个可读的数据库对象,然后使用query()或rawQuery()方法 查询数据库不能使用execSQL方法

下面我将一一介绍。

3.1 创建数据库

  • 涉及的方法有onCreate()、getWritableDatabase()、getReadableDatabase()
  • 具体代码如下: 假设DatabaseHelper类是SQLiteOpenHelper的子类

DatabaseHelper.java

1//第一次创建数据库的时候回调该方法 2//当使用getReadableDatabase()方法获取数据库实例的时候, 如果数据库不存在, 就会调用这个方法; 3 4//作用:创建数据库表:将创建数据库表的 execSQL()方法 和 初始化表数据的一些 insert()方法写在里面; 5 @Override 6 public void onCreate(SQLiteDatabase db) { 7 8 //SQLite数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型 9 //创建了一个名为person的表 10 String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))"; 11 //execSQL用于执行SQL语句 12 //完成数据库的创建 13 db.execSQL(sql); 14 //数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开 15 //见下代码

*MainActivity.java*

1// 创建DatabaseHelper对象 2// 只执行这句话是不会创建或打开连接的 3 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 4 "test\_carson"); 5 // 调用getReadableDatabase()或getWritableDatabase()才算真正创建或打开数据库 6 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); 7 8//SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase() ;

3.2 插入数据

  • 步骤:创建并打开数据库(可读/写)、插入数据
  • 涉及方法:getWritableDatabase()、insert() insert()也可以使用excelSQL()代替
  • 具体代码如下:
1//1. 创建并打开数据库 2 3// 创建DatabaseHelper对象(记得传入最新版本的数据库) 4// 只执行这句话是不会创建或打开连接的 5//注意,一定要传入最新的数据库版本号 6 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 7 "test\_carson"2); 8 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库 9 //通过返回的SQLiteDatabase对象对数据库进行操作 10 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); 11 12//2. 创建并打开数据库 13 // 创建ContentValues对象 14 ContentValues values = new ContentValues(); 15 16 // 向该对象中插入键值对 17 values.put("id", 1); 18 values.put("name", "yangyz"); 19 //其中,key代表列名,value代表该列要插入的值 20 //注:ContentValues内部实现就是HashMap,但是两者还是有差别的 21 //ContenValues Key只能是String类型,Value只能存储基本类型数据,不能存储对象 22 23 // 调用insert()方法将数据插入到数据库当中 24 sqliteDatabase.insert("user", null, values); 25 // 第一个参数:要操作的表名称 26 // 第二个参数:SQl不允许一个空列,如果ContentValues是空的,那么这一列被明确的指明为NULL值 27 // 第三个参数:ContentValues对象 28 29////db.execSQL("insert into user (id,name) values (1,'张三')") 也可以 30 31 }

3.3 修改数据(升级数据库)

  • 涉及的方法有onUpgrade()、getWritableDatabase()、update()
  • 具体代码如下:

DatabaseHelper.java

1//数据库版本号 2 private static final int DATABASE\_VERSION = 1; 3 4//作用:更新数据库表结构 5//调用时机:数据库版本发生变化的时候回调(取决于数据库版本) 6// 创建SQLiteOpenHelper子类对象的时候,必须传入一个version参数 7//该参数就是当前数据库版本, 只要这个版本高于之前的版本, 就会触发这个onUpgrade()方法,如下面代码 8@Override 9 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 10 //使用SQL的ALTER语句 11 String sql = "alter table person add sex varchar(8)"; 12 db.execSQL(sql); 13 } 14//参数说明: 15// db : 数据库 16//oldVersion : 旧版本数据库 17//newVersion : 新版本数据库 18//注意:这里的删除等操作必须要保证新的版本必须要比旧版本的版本号要大才行。\[即 Version 2.0 > Version 1.0 \] 所以这边我们不需要对其进行操作。

MainActivity.java

1 // 创建一个DatabaseHelper对象 2 // 创建SQLiteOpenHelper子类对象的时候,必须传入一个version参数 3//该参数就是当前数据库版本, 只要这个版本高于之前的版本, 就会触发这个onUpgrade()方法,如下面代码 4////注意,一定要传入最新的数据库版本号 5 // 传入版本号为2,大于旧版本(1),所以会调用onUpgrade()升级数据库 6 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 7 "test\_carson", 2); 8 9 // 调用getWritableDatabase()得到一个可写的SQLiteDatabase对象 10 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); 11 12 // 创建一个ContentValues对象 13 ContentValues values = new ContentValues(); 14 values.put("name", "zhangsan"); 15 16 // 调用update方法修改数据库 17 sqliteDatabase.update("user", values, "id=?", new String\[\] { "1" }); 18 // 第一个参数String:表名 19 // 第二个参数ContentValues:ContentValues对象(需要修改的) 20 // 第三个参数String:WHERE表达式,where选择语句, 选择那些行进行数据的更新, 如果该参数为 null, 就会修改所有行;?号是占位符 21 // 第四个参数String\[\]:where选择语句的参数, 逐个替换 whereClause 中的占位符;

3.4 删除数据

  • 步骤:创建并打开数据库(可读/写)、删除数据
  • 涉及方法:getWritableDatabase()、delete() delete()也可以使用excelSQL()代替
  • 具体代码如下:
1//1. 创建并打开数据库 2 3// 创建DatabaseHelper对象 4// 只执行这句话是不会创建或打开连接的 5////注意,一定要传入最新的数据库版本号 6 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 7 "test\_carson"2); 8 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库 9 //通过返回的SQLiteDatabase对象对数据库进行操作 10 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); 11 12 13//2. 删除数据 14 15 //调用delete方法进行删除操作 16 sqliteDatabase.delete("user", "id=?", new String\[\]{"1"}); 17 18 //第一个参数String:需要操作的表名 19 //第二个参数String:where选择语句, 选择哪些行要被删除, 如果为null, 就删除所有行; 20 //第三个参数String\[\]: where语句的参数, 逐个替换where语句中的 "?" 占位符;

3.5 查询数据

  • 步骤:创建并打开数据库(可读)、查询数据
  • 涉及方法:getReadableDatabase()、query() 或 rawQuery(),介绍如下:
1//第一种最为简单 2//将所有的SQL语句都组织到一个字符串中,使用占位符代替实际参数(selectionArgs) 3db.rawQuery(String sql, String\[\] selectionArgs); 4 5 6db.query(String table, String\[\] columns, String selection, String\[\] selectionArgs, String groupBy, String having, String orderBy); 7db.query(String table, String\[\] columns, String selection, String\[\] selectionArgs, String groupBy, String having, String orderBy, String limit); 8db.query(String distinct, String table, String\[\] columns, String selection, String\[\] selectionArgs, String groupBy, String having, String orderBy, String limit); 9 10//参数说明 11//table:要操作的表明 12//columns:查询的列所有名称集 13//selection:WHERE之后的条件语句,可以使用占位符 14//groupBy:指定分组的列名 15//having指定分组条件,配合groupBy使用 16//orderBy指定排序的列名 17//limit指定分页参数 18//distinct可以指定“true”或“false”表示要不要过滤重复值 19 20//所有方法将返回一个Cursor对象,代表数据集的游标 21 22//Cursor对象常用方法如下: 23c.move(int offset); //以当前位置为参考,移动到指定行 24c.moveToFirst(); //移动到第一行 25c.moveToLast(); //移动到最后一行 26c.moveToPosition(int position); //移动到指定行 27c.moveToPrevious(); //移动到前一行 28c.moveToNext(); //移动到下一行 29c.isFirst(); //是否指向第一条 30c.isLast(); //是否指向最后一条 31c.isBeforeFirst(); //是否指向第一条之前 32c.isAfterLast(); //是否指向最后一条之后 33c.isNull(int columnIndex); //指定列是否为空(列基数为0) 34c.isClosed(); //游标是否已关闭 35c.getCount(); //总数据项数 36c.getPosition(); //返回当前游标所指向的行数 37c.getColumnIndex(String columnName);//返回某列名对应的列索引值 38c.getString(int columnIndex); //返回当前行指定列的值
  • 具体代码如下:
1//1. 创建并打开数据库 2 3// 创建DatabaseHelper对象 4// 只执行这句话是不会创建或打开连接的 5////注意,一定要传入最新的数据库版本号 6 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 7 "test\_carson"2); 8 // 调用getReadableDatabase()方法创建或打开一个可以读的数据库 9 //通过返回的SQLiteDatabase对象对数据库进行操作 10 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); 11 12//2. 查询数据 13 14// 调用SQLiteDatabase对象的query方法进行查询 15// 返回一个Cursor对象:由数据库查询返回的结果集对象 16 Cursor cursor = sqliteDatabase.query("user", new String\[\] { "id", 17 "name" }, "id=?", new String\[\] { "1" }, null, null, null); 18 19 // 第一个参数String:表名 20 // 第二个参数String\[\]:要查询的列名 21 // 第三个参数String:查询条件 22 // 第四个参数String\[\]:查询条件的参数 23 // 第五个参数String:对查询的结果进行分组 24 // 第六个参数String:对分组的结果进行限制 25 // 第七个参数String:对查询的结果进行排序 26 27// 将光标移动到下一行,从而判断该结果集是否还有下一条数据 28//如果有则返回true,没有则返回false 29 while (cursor.moveToNext()) { 30 id = cursor.getString(cursor.getColumnIndex("id")); 31 name = cursor.getString(cursor.getColumnIndex("name")); 32 } 33 34 35//也可将Cursor中的数据转为 ArrayList<Map<String, String>> 类型数据 36private ArrayList<Map<String, String>> cursor2list(Cursor cursor) { 37 ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>(); 38 39 //遍历Cursor 40 while(cursor.moveToNext()){ 41 Map<String, String> map = new HashMap<String, String>(); 42 map.put("tittle", cursor.getString(1)); 43 map.put("content", cursor.getString(2)); 44 list.add(map); 45 } 46 return list; 47}

3.6 关闭数据库

当我们完成了对数据库的操作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。

1 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 2 "test\_carson"); 3 // 调用getReadableDatabase()方法创建或打开一个可以读的数据库 4 //通过返回的SQLiteDatabase对象对数据库进行操作 5 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); 6 7//关闭当前数据库 8 sqliteDatabase.close();

3.7 删除数据库

1 SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this, 2 "test\_carson"); 3 // 调用getReadableDatabase()方法创建或打开一个可以读的数据库 4 //通过返回的SQLiteDatabase对象对数据库进行操作 5 SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase(); 6 7 //删除名为test.db数据库 8 deleteDatabase("test.db");

特别注意

其实对于上述所有的数据库操作(除了“查询”),我们都可以使用下列方法代替:

1db.executeSQL(String sql); 2db.executeSQL(String sql, Object\[\] bindArgs); 3//sql语句中使用占位符,然后第二个参数是实际的参数集

个人建议都使用SQL语句,因为:

  • SQL语句较为通用;
  • 使用insert()、delete()、query()方法具备多个参数,使用复杂

4. 实例Demo

  • Demo描述:创建数据库并对数据库进行操作(增、删、查、改)
  • 实现步骤:
    1. 实现子类继承SQLiteOpenHelper类(复写onCreat()、onUpgrade())
    2. 在MainActivity里实现需要进行的数据库操作(增、删、查、改)

4.1 具体代码如下:

建议先下载Demo再进行阅读:Carson的Github:DataBase_Demo

步骤1:实现子类继承SQLiteOpenHelper类(复写onCreat()、onUpgrade())

MySQLiteOpenHelper.java

1package scut.carson\_ho.database\_demo; 2 3import android.content.Context; 4import android.database.sqlite.SQLiteDatabase; 5import android.database.sqlite.SQLiteOpenHelper; 6 7/\*\* 8 \* Created by Carson\_Ho on 16/11/18. 9 \*/ 10public class MySQLiteOpenHelper extends SQLiteOpenHelper { 11 12 13 //数据库版本号 14 private static Integer Version = 1; 15 16 17 //在SQLiteOpenHelper的子类当中,必须有该构造函数 18 public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, 19 int version) { 20 //必须通过super调用父类当中的构造函数 21 super(context, name, factory, version); 22 } 23 //参数说明 24 //context:上下文对象 25 //name:数据库名称 26 //param:factory 27 //version:当前数据库的版本,值必须是整数并且是递增的状态 28 29 public MySQLiteOpenHelper(Context context,String name,int version) 30 { 31 this(context,name,null,version); 32 } 33 34 35 public MySQLiteOpenHelper(Context context,String name) 36 { 37 this(context, name, Version); 38 } 39 40 //当数据库创建的时候被调用 41 @Override 42 public void onCreate(SQLiteDatabase db) { 43 44 System.out.println("创建数据库和表"); 45 //创建了数据库并创建一个叫records的表 46 //SQLite数据创建支持的数据类型: 整型数据,字符串类型,日期类型,二进制的数据类型 47 String sql = "create table user(id int primary key,name varchar(200))"; 48 //execSQL用于执行SQL语句 49 //完成数据库的创建 50 db.execSQL(sql); 51 //数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开 52 53 54 } 55 56 //数据库升级时调用 57 //如果DATABASE\_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade()方法 58 @Override 59 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 60 System.out.println("更新数据库版本为:"+newVersion); 61 } 62 63 64}

步骤2:在MainActivity里实现需要进行的数据库操作(增、删、查、改)

MainActivity.java

1package scut.carson\_ho.database\_demo; 2 3import android.content.ContentValues; 4import android.database.Cursor; 5import android.database.sqlite.SQLiteDatabase; 6import android.os.Bundle; 7import android.support.v7.app.AppCompatActivity; 8import android.view.View; 9import android.widget.Button; 10 11public class MainActivity extends AppCompatActivity implements View.OnClickListener { 12 13 private Button instablish; 14 private Button insert; 15 private Button upgrade; 16 private Button modify; 17 private Button delete; 18 private Button query; 19 private Button delete\_database; 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 setContentView(R.layout.activity\_main); 25 26 //绑定按钮 27 instablish = (Button) findViewById(R.id.instablish); 28 insert = (Button) findViewById(R.id.insert); 29 upgrade = (Button) findViewById(R.id.upgrade); 30 modify = (Button) findViewById(R.id.modify); 31 delete = (Button) findViewById(R.id.delete); 32 query = (Button) findViewById(R.id.query); 33 delete\_database = (Button) findViewById(R.id.delete\_database); 34 35 //设置监听器 36 instablish.setOnClickListener(this); 37 insert.setOnClickListener(this); 38 upgrade.setOnClickListener(this); 39 modify.setOnClickListener(this); 40 delete.setOnClickListener(this); 41 query.setOnClickListener(this); 42 delete\_database.setOnClickListener(this); 43 44 } 45 46//设置每个按钮对数据库的操作进行控制 47 @Override 48 public void onClick(View v) { 49 switch (v.getId()) { 50 51 52 //点击创建数据库库 53 case R.id.instablish: 54 55 // 创建SQLiteOpenHelper子类对象 56 MySQLiteOpenHelper dbHelper = new MySQLiteOpenHelper(this,"test\_carson"); 57 //数据库实际上是没有被创建或者打开的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一个被调用时才会进行创建或者打开 58 SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase(); 59 // SQLiteDatabase sqliteDatabase = dbHelper.getReadbleDatabase(); 60 61 break; 62 63 //点击更新数据 64 case R.id.upgrade: 65 66 // 创建SQLiteOpenHelper子类对象 67 MySQLiteOpenHelper dbHelper\_upgrade = new MySQLiteOpenHelper(this,"test\_carson",2); 68 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库 69 SQLiteDatabase sqliteDatabase\_upgrade = dbHelper\_upgrade.getWritableDatabase(); 70 // SQLiteDatabase sqliteDatabase = dbHelper.getReadbleDatabase(); 71 72 break; 73 74 //点击插入数据到数据库 75 case R.id.insert: 76 77 System.out.println("插入数据"); 78 79 // 创建SQLiteOpenHelper子类对象 80 ////注意,一定要传入最新的数据库版本号 81 MySQLiteOpenHelper dbHelper1 = new MySQLiteOpenHelper(this,"test\_carson",2); 82 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库 83 SQLiteDatabase sqliteDatabase1 = dbHelper1.getWritableDatabase(); 84 85 // 创建ContentValues对象 86 ContentValues values1 = new ContentValues(); 87 88 // 向该对象中插入键值对 89 values1.put("id", 1); 90 values1.put("name", "carson"); 91 92 // 调用insert()方法将数据插入到数据库当中 93 sqliteDatabase1.insert("user", null, values1); 94 95 // sqliteDatabase.execSQL("insert into user (id,name) values (1,'carson')"); 96 97 //关闭数据库 98 sqliteDatabase1.close(); 99 100 break; 101 102 //点击查询数据库 103 case R.id.query: 104 105 System.out.println("查询数据"); 106 107 // 创建DatabaseHelper对象 108 MySQLiteOpenHelper dbHelper4 = new MySQLiteOpenHelper(MainActivity.this,"test\_carson",2); 109 110 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库 111 SQLiteDatabase sqliteDatabase4 = dbHelper4.getReadableDatabase(); 112 113 // 调用SQLiteDatabase对象的query方法进行查询 114 // 返回一个Cursor对象:由数据库查询返回的结果集对象 115 Cursor cursor = sqliteDatabase4.query("user", new String\[\] { "id", 116 "name" }, "id=?", new String\[\] { "1" }, null, null, null); 117 118 119 String id = null; 120 String name = null; 121 122 //将光标移动到下一行,从而判断该结果集是否还有下一条数据 123 //如果有则返回true,没有则返回false 124 while (cursor.moveToNext()) { 125 id = cursor.getString(cursor.getColumnIndex("id")); 126 name = cursor.getString(cursor.getColumnIndex("name")); 127 //输出查询结果 128 System.out.println("查询到的数据是:"+"id: "+id+" "+"name: "+name); 129 130 } 131 //关闭数据库 132 sqliteDatabase4.close(); 133 134 break; 135 136 137 //点击修改数据 138 case R.id.modify: 139 System.out.println("修改数据"); 140 141 // 创建一个DatabaseHelper对象 142 // 将数据库的版本升级为2 143 // 传入版本号为2,大于旧版本(1),所以会调用onUpgrade()升级数据库 144 MySQLiteOpenHelper dbHelper2 = new MySQLiteOpenHelper(MainActivity.this,"test\_carson", 2); 145 146 147 // 调用getWritableDatabase()得到一个可写的SQLiteDatabase对象 148 SQLiteDatabase sqliteDatabase2 = dbHelper2.getWritableDatabase(); 149 150 // 创建一个ContentValues对象 151 ContentValues values2 = new ContentValues(); 152 values2.put("name", "zhangsan"); 153 154 // 调用update方法修改数据库 155 sqliteDatabase2.update("user", values2, "id=?", new String\[\]{"1"}); 156 157 //关闭数据库 158 sqliteDatabase2.close(); 159 break; 160 161 //点击删除数据 162 case R.id.delete: 163 164 System.out.println("删除数据"); 165 166 // 创建DatabaseHelper对象 167 MySQLiteOpenHelper dbHelper3 = new MySQLiteOpenHelper(MainActivity.this,"test\_carson",2); 168 169 // 调用getWritableDatabase()方法创建或打开一个可以读的数据库 170 SQLiteDatabase sqliteDatabase3 = dbHelper3.getWritableDatabase(); 171 172 //删除数据 173 sqliteDatabase3.delete("user", "id=?", new String\[\]{"1"}); 174 175 //关闭数据库 176 sqliteDatabase3.close(); 177 break; 178 179 180 181 182 //点击删除数据库 183 case R.id.delete\_database: 184 185 System.out.println("删除数据库"); 186 187 MySQLiteOpenHelper dbHelper5 = new MySQLiteOpenHelper(MainActivity.this, 188 "test\_carson",2); 189 190 // 调用getReadableDatabase()方法创建或打开一个可以读的数据库 191 SQLiteDatabase sqliteDatabase5 = dbHelper5.getReadableDatabase(); 192 193 //删除名为test.db数据库 194 deleteDatabase("test\_carson"); 195 break; 196 197 default: 198 break; 199 200 } 201 } 202}

步骤3:在主布局文件设置按钮控制数据库的操作 activity_main.xml

1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout\_width="match\_parent" 5 android:layout\_height="match\_parent" 6 android:paddingBottom="@dimen/activity\_vertical\_margin" 7 android:paddingLeft="@dimen/activity\_horizontal\_margin" 8 android:paddingRight="@dimen/activity\_horizontal\_margin" 9 android:paddingTop="@dimen/activity\_vertical\_margin" 10 tools:context="scut.carson\_ho.database\_demo.MainActivity"> 11 12 13 14 <Button 15 android:id="@+id/instablish" 16 android:layout\_centerHorizontal="true" 17 android:layout\_width="wrap\_content" 18 android:layout\_height="wrap\_content" 19 android:text="创建数据库"/> 20 21 22 23 <Button 24 android:id="@+id/upgrade" 25 android:layout\_below="@+id/instablish" 26 android:layout\_centerHorizontal="true" 27 android:layout\_width="wrap\_content" 28 android:layout\_height="wrap\_content" 29 android:text="更新数据库"/> 30 31 <Button 32 android:id="@+id/insert" 33 android:layout\_below="@+id/upgrade" 34 android:layout\_centerHorizontal="true" 35 android:layout\_width="wrap\_content" 36 android:layout\_height="wrap\_content" 37 android:text="插入数据"/> 38 39 <Button 40 android:id="@+id/modify" 41 android:layout\_centerHorizontal="true" 42 android:layout\_below="@+id/insert" 43 android:layout\_width="wrap\_content" 44 android:layout\_height="wrap\_content" 45 android:text="修改数据"/> 46 47 48 49 <Button 50 android:id="@+id/query" 51 android:layout\_centerHorizontal="true" 52 android:layout\_below="@+id/modify" 53 android:layout\_width="wrap\_content" 54 android:layout\_height="wrap\_content" 55 android:text="查询数据"/> 56 57 <Button 58 android:id="@+id/delete" 59 android:layout\_centerHorizontal="true" 60 android:layout\_below="@+id/query" 61 android:layout\_width="wrap\_content" 62 android:layout\_height="wrap\_content" 63 android:text="删除数据"/> 64 65 66 <Button 67 android:id="@+id/delete\_database" 68 android:layout\_centerHorizontal="true" 69 android:layout\_below="@+id/delete" 70 android:layout\_width="wrap\_content" 71 android:layout\_height="wrap\_content" 72 android:text="删除数据库"/> 73 74 75 76</RelativeLayout>

4.2 测试结果

  • 界面显示

  • 按顺序点击:创建 - 更新 - 插入 - 查询 - 修改 - 查询 - 删除数据

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''