Android SQlite数据库使用详解 您所在的位置:网站首页 安卓api接口怎么调用数据库 Android SQlite数据库使用详解

Android SQlite数据库使用详解

2023-11-19 10:46| 来源: 网络整理| 查看: 265

目录 概述SQLite使用SQLite数据库创建增加数据删除数据更新数据查询数据 完整代码

概述

SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。

查看模拟器数据库传送门: Android Studio查看SQLite数据库方法大全

SQLite使用 SQLite数据库创建

Android提供了一个SQLiteOpenHelper帮助类,用于对数据库进行创建和升级 SQLiteOpenHelper是一个抽象类,使用时需要创建自己的类去继承它。 SQLiteOpenHelper有两个抽象方法onCreate()和onUpgrade(),必须在自己的类中重写这两个方法,然后分别在这两个方法中实现创建和升级数据库的逻辑。

public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库sql语句并执行 String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } } 增加数据 public long insert(String table, String nullColumnHack, ContentValues values) ;

方法参数:

table表名nullColumnHack可选参数,当values参数为空时,指定哪个字段设置为null,如果values不为空,则该参数值可以为空values指定具体的字段,相当于map集合,键值对的形式存储返回值返回插入成功的行数,如果为-1表示失败

实例: SQLiteOpenHelper中还有两个非常重要的实例方法: getReadableDatabase()和 getWritableDatabase()。 这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。 不同的是,当数据库不可写入的时候(如磁盘空间已满), getReadableDatabase()方法返回的对象将以只读的方式去打开数据库 getWritableDatabase()方法则将出现异常

DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1); SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase(); //创建存放数据的ContentValues对象 ContentValues values = new ContentValues(); values.put("username","test"); values.put("password","123456"); values.put("age",20); //数据库执行插入命令 db.insert("user", null, values);

添加之前一共7条数据 在这里插入图片描述 在这里插入图片描述 点击添加按钮刷新后多了一条数据 在这里插入图片描述

删除数据 public int delete(String table, String whereClause, String[] whereArgs) table表名whereClause查询条件whereArgs指定条件语句,可以使用占位符?whereArgs当表达式中含有占位符,改参数用户指定各占位符参数的值返回值删除成功的行数

使用方法:

DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1); SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase(); db.delete("user", "username=?", new String[]{"test"});

我们可以看到删除数据之前表里一共有9条数据 在这里插入图片描述 点击删除刷新后一共只剩6条数据了,成功删除3条数据 在这里插入图片描述

更新数据 public int update(String table, ContentValues values, String whereClause, String[] whereArgs)

方法参数:

table表名values指定要更新的字段及对应的字段值whereClause指定条件语句,可以使用占位符?whereArgs当表达式中含有占位符,改参数用户指定各占位符参数的值返回值返回影响的数据条数

使用示例:

DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1); SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase(); ContentValues values2 = new ContentValues(); values2.put("username", "admin123"); db.update("user", values2, "username=?", new String[]{"admin"});

在这里插入图片描述 点击修改按钮后再刷新数据 在这里插入图片描述 在这里插入图片描述

查询数据 public Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having, String orderBy)

参数详解:

table表名columns指定要查询的列,如果为空,返回所有selection查询条件 ,可以用占位符?selectionArgswhere对应的条件值groupBy指定分组方式having指定having条件orderBy排序方式

使用示例:

DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1); SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase(); //创建游标对象 Cursor cursor = db.query("user", new String[]{"id","username","age"}, "username=?", new String[]{"admin123"}, null, null, null); //利用游标遍历所有数据对象 while(cursor.moveToNext()){ String id = cursor.getString(cursor.getColumnIndex("id")); String username = cursor.getString(cursor.getColumnIndex("username")); int age = cursor.getInt(cursor.getColumnIndex("age")); Log.i("Mainactivity","result: id=" + id +" username: " + username +" age:" + age); } // 关闭游标,释放资源 cursor.close();

我们可以看到数据库表中的数据都被打印出来了在这里插入图片描述

完整代码

MainActivity.java

package com.hnu.sqlite; import androidx.appcompat.app.AppCompatActivity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import java.io.File; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DBOpenHelper dbsqLiteOpenHelper = new DBOpenHelper(MainActivity.this,"users.db",null,1); final SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase(); Button button1 = findViewById(R.id.button2); //add button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //创建存放数据的ContentValues对象 ContentValues values = new ContentValues(); values.put("username","test"); values.put("password","123456"); values.put("age",21); //数据库执行插入命令 db.insert("user", null, values); } }); Button button2 = findViewById(R.id.button3); //删 button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { db.delete("user", "username=?", new String[]{"test"}); } }); Button button3= findViewById(R.id.button4); //改 button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ContentValues values2 = new ContentValues(); values2.put("username", "admin123"); db.update("user", values2, "username=?", new String[]{"admin"}); } }); Button button4 = findViewById(R.id.button5); //查 button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //创建游标对象 Cursor cursor = db.query("user", new String[]{"id","username","age"}, "username=?or age =?", new String[]{"test","20"}, null, null, null); //利用游标遍历所有数据对象 while(cursor.moveToNext()){ String id = cursor.getString(cursor.getColumnIndex("id")); String username = cursor.getString(cursor.getColumnIndex("username")); int age = cursor.getInt(cursor.getColumnIndex("age")); Log.i("Mainactivity","result: id=" + id +" username: " + username +" age:" + age); } // 关闭游标,释放资源 cursor.close(); } }); } }

DBOpenHelper .java

package com.hnu.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; public class DBOpenHelper extends SQLiteOpenHelper { public DBOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库sql语句并执行 String sql="create table user(id integer primary key autoincrement,username varchar(20),password varchar(20),age integer)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

布局文件activity_main.xml



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有