SQLite数据库存储

Posted 要加油

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLite数据库存储相关的知识,希望对你有一定的参考价值。

前几天学习到SQLite数据库存储这一节,我没想到原来android 系统是有内置的数据库的,比连接本地的sqlserver方便多了,不用用户名和密码,现在让我来记录一下:

            android专门提供了一个SQLiteOpenHelper帮助类,能让我们简单地对数据库进行创建与升级。SQLiteOpenHelper是抽象类,所以需要自己去写一个类继承来SQLiteOpenHelper类,该类必须重写oncreate()与onUpgrade()方法,。构建出SQLiteOpenHelper的实例之后,再调用 它的getReadableDatabase()    或getWritableDatabase()    方法就能够创建数据库了,数 据库文件会存放在/data/data/<package    name>/databases/目录下。此时,重写的onCreate()    方法 也会得到执行,所以通常会在这里去处理一些创建表的逻辑。现在我们希望创建一个名为BookStore.db的数据库,在数据库里新建一张表,表中有id(主键)、作者、价格、页数、书名。开始新建一个类去继承SQLiteOpenHelpe:

(1)MyDatabase.java

 1 package com.example.databasetest;
 2 
 3 import android.content.Context;
 4 import android.database.sqlite.SQLiteDatabase;
 5 import android.database.sqlite.SQLiteOpenHelper;
 6 import android.widget.Toast;
 7 
 8 import androidx.annotation.Nullable;
 9 
10 public class MyDatabase extends SQLiteOpenHelper {
11     private Context mcontext;
12     public static final  String CREATE_BOOK="create table book("
13             +"id integer primary key autoincrement,"
14             +"author text,"
15             +"price real,"
16             +"pages integer,"
17             +"name text);";//创建一个名为book的表,表中有id(主键),作者,价格,页数和书名
18 
19     public static final  String CREATE_Categoty="create table Categoty("
20             +"id integer primary key autoincrement,"
21             +"Categoty_code integer,"
22             +"Categoty_name text);";//创建一个名为bCategoty的表,表中有id(主键),分类代码、分类名
23     /**
24      * 构造方法
25      * @param context to use for locating paths to the the database
26      * @param name 数据库的名字
27      * @param factory to use for creating cursor objects, or null for the default
28      * @param version 表示当前数据库的版本
29      */
30     public MyDatabase(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
31         super(context, name, factory, version);
32         mcontext=context;
33     }
34 
35     @Override
36     public void onCreate(SQLiteDatabase db) {
37         db.execSQL(CREATE_BOOK);//调用SQLiteDatabase的execSQL方法去创建表
38         db.execSQL(CREATE_Categoty);
39         Toast.makeText(mcontext,"建表成功",Toast.LENGTH_SHORT).show();
40 
41     }
42 
43     @Override
44     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
45         db.execSQL("drop table if exists book");
46         db.execSQL("drop table if exists Categoty");
47         onCreate(db);
48 
49     }
50 }

 

(2)activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6 
 7     <Button
 8         android:id="@+id/create_database"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:text="创建数据库"/>
12     <Button
13         android:id="@+id/addData"
14         android:layout_width="match_parent"
15         android:layout_height="wrap_content"
16         android:text="添加数据"/>
17     <Button
18         android:id="@+id/alterData"
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:text="修改数据"/>
22     <Button
23         android:id="@+id/findData"
24         android:layout_width="match_parent"
25         android:layout_height="wrap_content"
26         android:text="查询数据"/>
27     <Button
28         android:id="@+id/cancelData"
29         android:layout_width="match_parent"
30         android:layout_height="wrap_content"
31         android:text="删除数据"/>
32 
33 </LinearLayout>
View Code

 

 

(3)MainActivity.java

 1 package com.example.databasetest;
 2 
 3 import androidx.appcompat.app.AppCompatActivity;
 4 
 5 import android.content.ContentValues;
 6 import android.database.Cursor;
 7 import android.database.sqlite.SQLiteDatabase;
 8 import android.os.Bundle;
 9 import android.util.Log;
10 import android.view.View;
11 import android.widget.Button;
12 
13 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
14     private MyDatabase dbHelper;
15     private Button createDB,addData,alterData,cancelData,findData;
16     SQLiteDatabase db;
17     @Override
18     protected void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         init();//初始化组件
22         dbHelper=new MyDatabase(this,"BookStore.db",null,2);//创建SQLiteOpenHelper实例
23 
24 
25     }
26     private void init(){
27         addData=(Button)findViewById(R.id.addData);
28         alterData=(Button)findViewById(R.id.alterData);
29         findData=(Button)findViewById(R.id.findData);
30         cancelData=(Button)findViewById(R.id.cancelData);
31         createDB=(Button)findViewById(R.id.create_database);
32         addData.setOnClickListener(this);
33         alterData.setOnClickListener(this);
34         findData.setOnClickListener(this);
35         cancelData.setOnClickListener(this);
36         createDB.setOnClickListener(this);
37     }
38     @Override
39     public void onClick(View v) {
40         switch (v.getId()){
41             case R.id.create_database://建表
42                 db=dbHelper.getWritableDatabase();
43                 break;
44             case R.id.addData://添加数据
45                 db=dbHelper.getWritableDatabase();
46                 ContentValues values=new ContentValues();
47                 //开始组装第一条数据
48                 values.put("name","《平凡的世界》");
49                 values.put("author","panq");
50                 values.put("pages",454);
51                 values.put("price",45);
52                 db.insert("book",null,values);
53                 //第二条数据
54                 values.put("name","《离散数学》");
55                 values.put("author","panq");
56                 values.put("pages",600);
57                 values.put("price",50);
58                 db.insert("book",null,values);
59                 break;
60             case R.id.alterData://修改数据
61                 db=dbHelper.getWritableDatabase();
62                 ContentValues value=new ContentValues();
63                 value.put("price",20);
64                 //修改《平凡的世界》书的价格
65                 db.update("book",value,"name=?",new String []{"《平凡的世界》"});
66                 break;
67             case R.id.cancelData://删除数据
68                 db=dbHelper.getWritableDatabase();
69                 //删除大于500页的书
70                 db.delete("book","pages>?",new String[]{"500"});
71                 break;
72             case R.id.findData://查询数据
73                 db=dbHelper.getWritableDatabase();
74                 Cursor cursor=db.query("book",null,null,null,null,null,null);
75                 if(cursor.moveToFirst()){
76                     do{
77                         //遍历cursor对像,打印数据
78                         String name=cursor.getString(cursor.getColumnIndex("name"));
79                         String author=cursor.getString(cursor.getColumnIndex("author"));
80                         double price=cursor.getDouble(cursor.getColumnIndex("price"));
81                         int pages=cursor.getInt(cursor.getColumnIndex("pages"));
82                         Log.i("MainActivity","book name is "+name);
83                         Log.i("MainActivity","book author is "+author);
84                         Log.i("MainActivity","book price is "+price);
85                         Log.i("MainActivity","book pages is "+pages);
86                     }while (cursor.moveToNext());
87                 }
88                 cursor.close();
89                 break;
90 
91 
92         }
93 
94     }
95 }

 

运行程序后,点击建表、添加数据、删除数据按钮后如何查看表中的数据呢?通过adb shell来对数据库和表的创建情况进行检查

首先,找到adb.exe的路径位置,如我的adb.exe路径是C:\\Users\\Asus\\AppData\\Local\\Android\\Sdk\\platform-tools

然后,右击我的电脑--属性--高级系统设置--环境变量,找到系统变量的path,添加adb.exe的路径到后面。详细操作看:https://www.cnblogs.com/plsmile/p/11172693.html

设置完环境变量后,打开cmd窗口,输入adb shell,接下来使用cd命令进入到/data/data/com.example.databasetest/databases/目录下,,并使用ls 命令查看到该目录里的文件,如图所示:

 

 现在要打开数据库,只需要键入sqlite3,后面加上数据库名即 可。

打开数据库后,输入select * from 表名即可查看表的数据,如图所示:(图是随便找的)

 

 

 这样就OK啦,比连接sqlserver方便多了。

 

以上是关于SQLite数据库存储的主要内容,如果未能解决你的问题,请参考以下文章

当sqlite android片段中的数据更改或删除时如何刷新recyclerview?

使用 sqlite 的 FTS 片段函数处理 html 转义

使用片段从数据库 SQLite 获取数据时出错

如何在片段中访问 SQLite 数据到 ListView

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段