文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android SQLite数据库存储

2022-06-06 13:38

关注

前言:

      Android为了让我们更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,借助这个类可以简单的对数据库进行创建和升级。

下面介绍一下SQLiteOpenHelper:(扩展知识)

SQLiteOpenHelper类介绍 定义:SQLiteOpenHelper是一个辅助类 作用:管理数据库(创建、增、修、删) & 版本的控制。 使用过程:通过创建子类继承SQLiteOpenHelper类,实现它的一些方法来对数据库进行操作。 在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。 SQLiteOpenHelper类的数据库操作方法介绍
方法名 作用 备注
onCreate() 创建数据库 创建数据库时自动调用
onUpgrade() 升级数据库
close() 关闭所有打开的数据库对象
execSQL() 可进行增删改操作, 不能进行查询操作
query()、rawQuery() 查询数据库
insert() 插入数据
delete() 删除数据
getWritableDatabase() 创建或打开可以读/写的数据库 通过返回的SQLiteDatabase对象对数据库进行操作
getReadableDatabase() 创建或打开可读的数据库 同上
简单总结上面的:

我们知道:

SQLiteOpenHelper 是一个抽象类,abstract class.

拥有成员变量,mName(数据库名称),mNewVersion(数据库版本),mDatabase(数据库)等.

构造函数需要传递,context,数据库名称,数据库版本等信息.

SQLiteOpenHelper(Context context, String name, CursorFactory factory,int version)

实现了以下函数:

getDatabaseName

getWritableDatabase

getReadableDatabase

onDowngrade

close

subclass需要实现以下函数

public abstract void onCreate(SQLiteDatabase db);

public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion);

​        它是一个抽象类,意味着我们要使用它就需要创建一个自己的类去继承它,两个抽象方法:onCreate()和onUpgrade(),需要重写,实现创建、升级数据库的逻辑。

实例方法:getReadableDatabase()和getWritableDatabase(),如果存在打开,不存在时创建,当磁盘满了,上一个以只读方式打开,writable出现异常。

构造方法:参数:Context,daba_name,Cursor,version

存在位置:/data/data//databases/目录下。

1.创建数据库

我们用AS创建一个DatabaseTest项目,先来熟悉建表的相关语句:

建表语句:
create table Book{
	id integer primary key autoincrement,//组件,id列自增长
	author text,//文本类型
	price real,//浮点型
	pages integer,//整型
	name text)
}
新建MyDatabaseHelper类继承SQLiteOpenHelper
public class MyDatabaseHelper extends SQLitePenHelper{
	pulic static final String CREATE_BOOK = "create table Book("
		+"id integer primary key autonincreament,"
		+"author text,"
		+"price real,"
		+"pages integer,"
		+"name text)";
	private ContextmContext;
	public MyDatabaseHelper(Context context,String name,SQLiteDatabase.
	CursorFactory factory,int version){
	super(context,name,factory,version);
	mContext = context;
	}
	@Override
	public void onCreate(SQLiteDatabase db){
		db.execSQL(CREATE_BOOK);
		Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT)
		.show();
	}
	@Override
	public void onUpagrade(SQLiteDatabase db,int oldVersion, int newVersion)
	){}
}

用Android Studio创建过程:

首先activity_main.xml
 
 
修改MainActivity
public class MainActivity extends AppCompatActivity { 
 private MyDatabaseHelper dbHelper; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 1); 
 Button createDatabase = (Button) findViewById(R.id.create_database); 
 createDatabase.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 dbHelper.getWritableDatabase(); 
 } 
 }); 
 } 
}
查看:

可以使用命令行来查看信息,翻到文末的资料小卡片了解更多->>>

/data/data/com.example.databasetest/databases/

使用ls查看

两个文件,一个BookStore.db,借助sqlite3+数据库名

查看表:.table

.schema查看建表语句

.exit退出

2.升级数据库

如果想添加一张Catagory表用于记录图书的分类

首先:建表语句如下:
create table Category ( 
 id integer primary key autoincrement, 
 category_name text, 
 category_code integer)
添加到MyDatabaseHelper中
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
 db.execSQL("drop table if exists Book"); 
 db.execSQL("drop table if exists Category"); 
 onCreate(db); 
 }

版本升级变为2

public class MainActivity extends AppCompatActivity { 
 private MyDatabaseHelper dbHelper; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2); 
 Button createDatabase = (Button) findViewById(R.id.create_database); 
 createDatabase.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 dbHelper.getWritableDatabase(); 
 } 
 }); 
 } 
}

建表完成之后接下来就是基本操作CRUDCreate,Retrieve,Updata,Delete)

3.添加数据

我们在调用SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法,返回了SQLitaDatabase对象,所以我们借助这个对象进行操作。

操作的方法

​ insert()方法(表名,null, ContenValues对象:提供put()方法重载以此添加数据)

建立UI
点击事件添加逻辑
Button addData = (Button) findViewById(R.id.add_data); 
 addData.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 SQLiteDatabase db = dbHelper.getWritableDatabase(); 
 ContentValues values = new ContentValues(); 
 // 开始组装第一条数据
 values.put("name", "The Da Vinci Code"); 
 values.put("author", "Dan Brown"); 
 values.put("pages", 454); 
 values.put("price", 16.96); 
 db.insert("Book", null, values); // 插入第一条数据
 values.clear(); 
 // 开始组装第二条数据
 values.put("name", "The Lost Symbol"); 
 values.put("author", "Dan Brown"); 
 values.put("pages", 510); 
 values.put("price", 19.95); 
 db.insert("Book", null, values); // 插入第二条数据
 } 
 });
4.更新数据

​ update()方法(表名,ContenValues对象,第三,第四约束更新的数据,不指定就是默认更新所有行)

UI
逻辑
Button updateData = (Button) findViewById(R.id.update_data); 
 updateData.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 SQLiteDatabase db = dbHelper.getWritableDatabase(); 
 ContentValues values = new ContentValues(); 
 values.put("price", 10.99);
 db.update("Book", values, "name = ?", new String[] { "The Da Vinci 
 Code" }); 
 } 
 });

5.删除数据

​ delete()方法(表名,第二第三约束删除某一行或某几行)

UI
逻辑
deleteButton.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 SQLiteDatabase db = dbHelper.getWritableDatabase(); 
 db.delete("Book", "pages > ?", new String[] { "500" }); 
 } 
 });

6.查询数据

query()方法(表名,指定查询那几列,第三第四约束查询某一行或者某几行,第五指定需要取group by的列,不指定则表示不操作,第六对group by进一步的操作,第七指定查询结果的排序方式)

UI
逻辑
Button queryButton = (Button) findViewById(R.id.query_data); 
 queryButton.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 SQLiteDatabase db = dbHelper.getWritableDatabase(); 
 // 查询 Book 表中所有的数据
 Cursor cursor = db.query("Book", null, null, null, null, null, null); 
 if (cursor.moveToFirst()) { 
 do { 
 // 遍历 Cursor 对象,取出数据并打印
 String name = cursor.getString(cursor.getColumnIndex 
 ("name")); 
 String author = cursor.getString(cursor.getColumnIndex 
 ("author")); 
 int pages = cursor.getInt(cursor.getColumnIndex("pages")); 
 double price = cursor.getDouble(cursor.getColumnIndex 
 ("price")); 
 Log.d("MainActivity", "book name is " + name); 
 Log.d("MainActivity", "book author is " + author); 
 Log.d("MainActivity", "book pages is " + pages); 
 Log.d("MainActivity", "book price is " + price); 
 } while (cursor.moveToNext()); 
 } 
 cursor.close(); 
 } 
 });

7.展示图片:

在这里插入图片描述

8.当然也可以使用SQL或者LitePal操作数据库

例如使用SQL

 添加数据的方法如下:
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)", 
 new String[] { "The Da Vinci Code", "Dan Brown", "454", "16.96" }); 
db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)", 
 new String[] { "The Lost Symbol", "Dan Brown", "510", "19.95" }); 
 更新数据的方法如下:
db.execSQL("update Book set price = ? where name = ?", new String[] { "10.99", 
"The Da Vinci Code" }); 
 删除数据的方法如下:
db.execSQL("delete from Book where pages > ?", new String[] { "500" }); 
 查询数据的方法如下:
db.rawQuery("select * from Book", null);

资料:

在命令行操作使用SQL语句操作SQLite数据库

1)adb shell 进入

2)在终端输入“sqlite3”进入命令行操作界面
sqlite>
sqlite>

3)常用的sqlite3命令
.help
.exit/.quit 退出

ctrl+L//清屏

2 常用SQL语句
2.1 创建数据库
语法:
sqlite3 testDB.db
创建名字为testDB.db数据库文件,然后进入sqlite命令行界面
sqlite> .databases //查看当前操作数据库的信息

2.2 创建表(Table)
语法:
CREATE TABLE table_name(
column1 datatype [PRIMARY KEY],
column2 datatype ,
…);
注:不区分大小写,习惯关键字用大写
PRIMARY KEY:主键,表示该类数据不能重复,可以加快数据库的访问,一张表中只有一列可以声明为主键。
eg:创建company表:ID、姓名、年龄、地址、薪资
sqlite> CREATE TABLE company(
…> id INT PRIMARY KEY,
…> name TEXT,
…> age INT,
…> address TEXT,
…> salary REAL NOT NULL);
.tables :查看当前数据库中存在数据表
.schema:查看数据表的完整信息

2.3删除表
语法:
DROP TABLE table_name;

2.4向数据表中插入数据
语法:
INSERT INTO table_name
(column1,column2,column3,…)
VALUES(value1,value2,value3,…)
eg:
sqlite> INSERT INTO company
…> (id,name,salary)
…> VALUES(10086,“张飞”,12000);
sqlite> SELECT * FROM company; //查询表中全部数据

2.5从数据表删除一条数据
语法:
DELETE FROM table_name WHERE [condition];

参考资料:《第一行代码》《Android权威编程指南》


作者:threecat.up


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯