注册

Android数据库—SQLite



Android数据库—SQLite



  • 不适合存储大规模数据
  • 用来存储每一个用户各自的信息

在线查看数据库方法


Android Studio查看SQLite数据库方法大全



从前我使用的是stetho方法来查看数据库,因为是外国网站,所以需要翻墙,比较麻烦。


如今最新版的Android Studio可以直接在里面查看数据库,无需别的了。




  • stetho使用



    • build.gradle文件中引入依赖
      implementation 'com.facebook.stetho:stetho:1.5.1'


    • 在需要操作数据库的Activity中加入以下语句
    Stetho.initializeWithDefaults(this);


    • 谷歌调试


继承SQLiteOpenHelper的类,加载驱动



继承SQLiteOpenHelper类,实现三个方法。



  • 构造函数
  • 建表方法:onCreate方法
  • 更新表方法:onUpgrade方法



  • MySQLiteOpenHelper

package com.hnucm.androiddatabase;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;

//加载数据库驱动
//建立连接
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
//构造方法
//name -> 数据库名字
public MySQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}

//建表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//建表语句 自增长 主键
sqLiteDatabase.execSQL("create table products(id integer primary key autoincrement,name varchar(20),singleprice double,restnum integer) ");
}

//更新表
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}
}

在Activity中进行增删改查



整个Activity都是用数据库,所以声明驱动和数据库为全局变量,方便使用。



//加载驱动
mySQLiteOpenHelper = new MySQLiteOpenHelper(MainActivity.this,
"product",null,1);
//得到数据库
sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();


布局文件中设置四个按钮,进行增删改查操作。




  • 布局-------activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">


<Button
android:id="@+id/insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加一条商品信息"
android:textSize="25sp"
/>


<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除一条商品信息"
android:textSize="25sp"
/>


<Button
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改一条商品信息"
android:textSize="25sp"
/>


<Button
android:id="@+id/select"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询一条商品信息"
android:textSize="25sp"
/>


</LinearLayout>


  • 总体逻辑代码-------MainActivity

package com.hnucm.androiddatabase;

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;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//声明增删改查四个按钮
Button addBtn;
Button delBtn;
Button updateBtn;
Button selectBtn;
//声明驱动
MySQLiteOpenHelper mySQLiteOpenHelper;
//声明数据库
SQLiteDatabase sqLiteDatabase;
//数据对象
ContentValues contentValues;
//增删改查条件变量
String id;
String name;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//加载驱动
mySQLiteOpenHelper = new MySQLiteOpenHelper(MainActivity.this,
"product",null,1);
//得到数据库
sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase();

//初始化四个按钮
addBtn = findViewById(R.id.insert);
delBtn = findViewById(R.id.delete);
updateBtn = findViewById(R.id.update);
selectBtn = findViewById(R.id.select);

//点击四个按钮
addBtn.setOnClickListener(this);
delBtn.setOnClickListener(this);
updateBtn.setOnClickListener(this);
selectBtn.setOnClickListener(this);
}

//四个按钮的点击事件
@Override
public void onClick(View view) {
switch (view.getId()){
//增加数据
case R.id.insert:
//创建数据,使用ContentValues -> HashMap
contentValues = new ContentValues();
//自增长 主键 增加无需加入id
//contentValues.put("id",1);
contentValues.put("name","辣条");
contentValues.put("singleprice",3.50);
contentValues.put("restnum",12);
//将创建好的数据对象加入数据库中的哪一个表
sqLiteDatabase.insert("products",null,contentValues);
break;
//删除数据
case R.id.delete:
//删除条件
id = "1";
name = "辣条";
//在哪张表里,根据条件删除
sqLiteDatabase.delete("products","id = ? and name = ?",
new String[]{id,name});
break;
//修改数据
case R.id.update:
//修改条件
id = "2";
//将满足条件的数据修改
contentValues = new ContentValues();
contentValues.put("name","薯片");
//在数据库中修改
sqLiteDatabase.update("products",contentValues,"id=?",
new String[]{id});
break;
//查询所有数据
case R.id.select:
//采用cursor游标查询
Cursor cursor = sqLiteDatabase.query("products",null,null,
null,null,null,null);
//游标下一个存在,即没有到最后
while(cursor.moveToNext()){
//每一条数据取出每一列
int id = cursor.getInt(cursor.getColumnIndex("id"));
name = cursor.getString(cursor.getColumnIndex("name"));
double singleprice = cursor.getDouble(cursor.getColumnIndex("singleprice"));
int restnum = cursor.getInt(cursor.getColumnIndex("restnum"));
//打印数据
Log.i("products","id:" + id + ",name:" + name + ",singleprice:"
+ singleprice + ",restnum:" + restnum);
}
break;
}
}
}

增加数据


//创建数据,使用ContentValues -> HashMap
contentValues = new ContentValues();
//自增长 主键 增加无需加入id
//contentValues.put("id",1);
contentValues.put("name","辣条");
contentValues.put("singleprice",3.50);
contentValues.put("restnum",12);
//将创建好的数据对象加入数据库中的哪一个表
sqLiteDatabase.insert("products",null,contentValues);

删除数据


//删除条件
id = "1";
name = "辣条";
//在哪张表里,根据条件删除
sqLiteDatabase.delete("products","id = ? and name = ?",
new String[]{id,name});

修改数据


//修改条件
id = "2";
//将满足条件的数据修改
contentValues = new ContentValues();
contentValues.put("name","薯片");
//在数据库中修改
sqLiteDatabase.update("products",contentValues,"id=?",
new String[]{id});

查询数据


//采用cursor游标查询
//没有查询条件,所以查询表中所有信息
Cursor cursor = sqLiteDatabase.query("products",null,null,
null,null,null,null);
//游标下一个存在,即没有到最后
while(cursor.moveToNext()){
//每一条数据取出每一列
int id = cursor.getInt(cursor.getColumnIndex("id"));
name = cursor.getString(cursor.getColumnIndex("name"));
double singleprice = cursor.getDouble(cursor.getColumnIndex("singleprice"));
int restnum = cursor.getInt(cursor.getColumnIndex("restnum"));
//打印数据
Log.i("products","id:" + id + ",name:" + name + ",singleprice:"
+ singleprice + ",restnum:" + restnum);
}

0 个评论

要回复文章请先登录注册