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;
}
Android 操作Sqlite的更多相关文章
- Android 操作SQLite基本用法
一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 ...
- android 操作sqlite的一点小技巧
1.android 在sqlite插入数据时,是非常耗时的操作,原因是sqlite缺省会为每个插入操作开启一个事务,当数量变多的时候,自然时间就变得很慢,这时候可以考虑在插入等操作时先开启一个事务,再 ...
- android操作sqlite数据库及心得
写这篇文章主要是网上的对sqlite的操作太多且太杂,非常多时候都不能非常好的运用到自己的项目中,结构不清晰,我自己写了一篇适合刚刚接触的人看的操作方法. 近来用android时要将一些数据保存起来, ...
- android操作SQLite
一.SQLite SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 ...
- android 对sqlite数据库的增删改查等各种操作
转载:http://blog.csdn.net/vrix/article/details/6717090 package com.sqlite.main; import java.io.File; i ...
- 我的Android六章:Android中SQLite数据库操作
今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- Android之操作SQLite
一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的 ...
- Android多线程操作sqlite(Sqlite解决database locked问题)
参考http://blog.csdn.net/sdsxleon/article/details/18259973 很好 https://github.com/2point0/Android-Data ...
随机推荐
- C# winform程序实现开机自启动,并且识别是开机启动还是双击启动
开机启动程序,在很多场合都会用到,尤其是那种在后台运行的程序. 效果图: 以上两幅图都用到了命令行启动程序,为了模拟开机启动或者其他程序调用此程序. 第一幅图:程序启动可以根据不同参数,执行不同的操作 ...
- .net core2.2 跨域
Startup.cs 类 ConfigureServices中 //允许一个或多个具体来源: services.AddCors(options => { // Policy 名稱 CorsPol ...
- MVC中使用Hangfire执行定时任务
需求描述 项目中有一个通知公告的功能,在后台管理员添加公告后需要推送消息给所有注册用户,让其查看消息.消息推送移动端采用极光推送,但是消息在何时发送是个问题,比如说有一个重要的会议通知,可能希望在会议 ...
- On extracting ops from LLVM backend
Symbols and ops generation: llvm::Function* BackendLLVM::build_llvm_instance (bool groupentry) Work ...
- 批处理系列(14) - 路径/时间/字符切分等DEMO操作
结合本系列文章第一篇,看本文. 本篇熟悉操作文件路径.时间,温习字符切分. 路径 @echo off @REM @Author: xianghongai@gmail.com :GTCONTINUE @ ...
- “全栈2019”Java多线程第二十四章:等待唤醒机制详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 匹配img标签的正则表达式
$preg = '/<img.*?src=[\"|\']?(.*?)[\"|\']?\s.*?>/i';//匹配img标签的正则表达式 preg_match_all($ ...
- Ubuntu 16.04LTS安装Nginx
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...
- mysql优化器在统计全表扫描的代价时的方法
innodb 的聚集索引 的叶子结点 存放的 是 索引值以及数据页的偏移量 那么在计算全表扫描的代价是怎么计算的呢? 我们知道代价 为 cpu代价+io代价 cpu代价 就是 每5条记录比对 计算一个 ...
- easyUI combobox下拉框很长,easyUI combobox下拉框如何显示滚动条的解决方法
如下图,combobox下拉框里内容很多时,会导致下拉框很长,很不美观. 如何使得combobox下拉框显示滚动条 方法:把属性panelHeight:"auto"注释掉即可. $ ...