Android 操作Sqlite
时间:2022-05-03
本文章向大家介绍Android 操作Sqlite,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先要用一个类来继承SQLiteOpenHelper,并必须实现
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
具体类如下(关键地方我都加了注释):
package com.example.sqllitedemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int VERSION = 2;
// SQLiteOpenHelper子类必须有该构造函数
// 第一次参数Activity对象,第二个表名,第三个暂时空值,第四个数据库的版本号
public DatabaseHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
public DatabaseHelper(Context context, String name, int version) {
this(context, name, null, version);
}
public DatabaseHelper(Context context, String name) {
this(context, name, VERSION);
}
// 该函数第一次创建数据库的时候执行,实际上是在第一次得到SqliteDatabase对象的时候执行
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("create a database");
db.execSQL("create table user(id int,name verchar(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
System.out.println("update a database");
}
}
调用代码如下:
package com.example.sqllitedemo;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.AutoCompleteTextView;
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnCreate = (Button) findViewById(R.id.btnCreateDatabase);
btnCreate.setOnClickListener(this);
Button btnUpdatDatabase = (Button) findViewById(R.id.btnUpdateDatabase);
btnUpdatDatabase.setOnClickListener(this);
Button btnInsert = (Button) findViewById(R.id.btnInsert);
btnInsert.setOnClickListener(this);
Button btnUpdate = (Button) findViewById(R.id.btnUpdate);
btnUpdate.setOnClickListener(this);
Button btnQuery = (Button) findViewById(R.id.btnQuery);
btnQuery.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnCreateDatabase:
DatabaseHelper helper = new DatabaseHelper(this, "School_db");
SQLiteDatabase db = helper.getReadableDatabase();
break;
case R.id.btnUpdateDatabase:
DatabaseHelper helper1 = new DatabaseHelper(this, "School_db", 2);
SQLiteDatabase db1 = helper1.getReadableDatabase();
break;
case R.id.btnInsert:
// 用于存储数据的键值对,键为列名
ContentValues values = new ContentValues();
values.put("name", "张山");
values.put("id", 1);
DatabaseHelper helper2=new DatabaseHelper(this,"School_db");
SQLiteDatabase db2=helper2.getWritableDatabase();
db2.insert("user", null, values);
//方法二、直接使用ExecSQL
db2.execSQL("insert into user(id,name) values(?,?)", new Object[]{2,"李四"});
break;
case R.id.btnUpdate:
DatabaseHelper helper3=new DatabaseHelper(this,"School_db");
SQLiteDatabase db3=helper3.getWritableDatabase();
ContentValues values1=new ContentValues();
values1.put("name", "zhangshan");
db3.update("user", values1, "id=?" , new String[]{"1"});
break;
case R.id.btnQuery:
DatabaseHelper helper4=new DatabaseHelper(this,"School_db");
SQLiteDatabase db4=helper4.getReadableDatabase();
Cursor cursor=db4.query("user",new String[]{"id","name"},"id=?",new String[]{"1"},
"","","");
while(cursor.moveToNext())
{
String name=cursor.getString(cursor.getColumnIndex("name"));
System.out.println(name);
}
break;
default:
break;
}
}
}
除了上述的crud的方法,还可以使用下面的方式
DatabaseHelper myDBHelper=new DatabaseHelper(this,"School_db");
//增加
public void addPerson(String name) {
SQLiteDatabase database = myDBHelper.getWritableDatabase();
//先判断数据库是否可用
if (database.isOpen()) {
database.execSQL("insert into user(name) values(?,?)", new Object[]{name});
database.close();
}
}
//查找
public boolean findPerson(String name) {
boolean result = false;
SQLiteDatabase database = myDBHelper.getReadableDatabase();
if (database.isOpen()) {
Cursor cursor = database.rawQuery("select * from user where name=?", new String[]{name});
if (cursor.moveToFirst()) {//游标是否移动到下一行,如果是,那说明有数据返回
Log.d(tag, "count:" + cursor.getColumnCount());
int nameIndex = cursor.getColumnIndex("name");
Log.d(tag, "name:" + cursor.getString(nameIndex));
cursor.close();
result = true;
} else {
result = false;
}
database.close();
}
return result;
}
//删除一条数据
public void deletePerson(String name) {
SQLiteDatabase database = myDBHelper.getWritableDatabase();
if (database.isOpen()) {
database.execSQL("delete from user where name=?", new Object[]{name});
}
database.close();
}
//更新一条数据
public void updatePerson( String newName,String name) {
SQLiteDatabase database = myDBHelper.getWritableDatabase();
if (database.isOpen()) {
database.execSQL("update user set name=? where name=?", new Object[]{newName, name});
}
database.close();
}
//查找所有person
public List<user> findAllPerson(){
List<user> userList = new ArrayList<user>();
SQLiteDatabase database = myDBHelper.getReadableDatabase();
if(database.isOpen()){
Cursor cursor = database.rawQuery("select * from user", null);
while(cursor.moveToNext()){
int nameIndex = cursor.getColumnIndex("name");
Person person = new Person(name);
personList.add(user);
}
}
database.close();
return uerList;
}
- 新手科普 | MySQL手工注入之基本注入流程
- linux 系统监控、诊断工具之 lsof 用法简介
- 关于 SimpleDateFormat 的非线程安全问题及其解决方案
- 关于 WEB/HTTP 调试利器 Fiddler 的一些技巧分享
- Java线程使用技巧学习(一)
- Python FAQ(常见问题解答)(1)
- ElastAlert监控日志告警Web攻击行为
- Java线程使用技巧学习(二)
- 挖洞经验 | 看我如何发现“小火车托马斯”智能玩具APP聊天应用漏洞
- Hive 常见问题与技巧【Updating】
- Hive 基础(1):分区、桶、Sort Merge Bucket Join
- 简化你的 java 字符串操作:Guava 之 CharMatcher 用法简介
- WAF绕过技巧浅谈
- flask 流式响应 RuntimeError: working outside of request context
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 【React+Typescript+Antd】界面框架布局——Layout布局+ Grid栅格
- SpringBoot源码学习(三)
- Axure RP 9 安装与中文汉化
- Linux 离线安装docker的过程
- Mac环境变量设置(以ADB为例)
- Linux 基础之定时任务
- Git库迁移步骤(从服务器A迁移至服务器B)
- springboot源码解析(四)
- 第2天:网易2018年校园招聘NLP算法工程师笔试试卷分析(二)
- Windows下Scoop安装、配置与使用
- Flutter免费iOS真机调试 AndroidStudio iPhone真机运行教程
- Flutter GridView 网格控件
- Flutter ListView 下拉刷新,上拉加载更多
- Flutter问题:import 'package:english_words/english_words.dart'失败
- 第17天:NLP实战(一)——爬取语料及其简单分析