提起Android的开发,就不得不提数据库,几乎每个App中都会用到Sqlit数据库存储一些数据,小编闲暇时期,写了一个小demo关于数据库的增删改查,之前也介绍过数据库的一个开源框架ORMLite,在这里主要用到的是Android自带的一些空间和属性来实现的,话不多少,直接上代码吧:

1、数据库的创建:

private static final String TABLENAME = "student";
private static final String CREATETABLE = "CREATE TABLE " + TABLENAME +
        "(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)";
public void creatTable(View view){
    /**
     * 创建数据库
     * 参数一:数据库名
     * 参数二:模式,一般为MOE_PRIVATE
     * 参数三:游标工厂对象,一般写null,表示系统自动提供
     */
    SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);
    db.execSQL(CREATETABLE);
    db.close();
}
2、数据库表的创建和数据的添加:

public void insertData(View view){
    SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);
    ContentValues values = new ContentValues();
    values.put("name","张三");
    values.put("age",18);
    /**
     *插入数据
     * 参数一:要插入的表名
     * 参数二:要插入的空数据所在的行数,第三个参数部位空,则此参数为null
     * 参数三:要插入的数据
     */
    db.insert(TABLENAME,null,values);
    ContentValues values1 = new ContentValues();
    values1.put("name","李四");
    values1.put("age",21);
    db.insert(TABLENAME,null,values1);
    db.close();
}
数据添加后的数据库结构:

3、数据库的更新:

public void updateData(View view){
    SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);
    ContentValues values = new ContentValues();
    values.put("name","赵四");
    values.put("age",43);
    /**
     * 数据的更新
     * 参数一:要更新的数据所在的表名
     * 参数二:新的数据
     * 参数三:要更新数据的查找条件
     * 参数四:条件的参数
     */
    db.update(TABLENAME,values,"_id=?",new String []{"2"});
    db.close();
}
数据更新后:

4、数据的查找:

public void queryData(View view){
    SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);
    //查询部分数据
    Cursor cursor = db.rawQuery("select * from " + TABLENAME + "where name=?",new String []{"张三"});
    //查询全部数据
    Cursor cursor1 = db.rawQuery("select * from " + TABLENAME ,null);
    //将游标移到第一行
    cursor1.moveToFirst();
    //循环读取数据
    while(!cursor1.isAfterLast()){
        //获得当前行的标签
        int nameIndex = cursor1.getColumnIndex("name");
        //获得对应的数据
        String name = cursor1.getString(nameIndex);
        int ageIndex = cursor1.getColumnIndex("age");
        int age = cursor1.getInt(ageIndex);
        Log.d(TAG, "name:"+ name +"age: "+age);
        //游标移到下一行
        cursor1.moveToNext();
    }
    db.close();
}
查询的结果:

5、数据的删除:

public void delectData(View view){
    SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);
    //要删除的数据
    db.delete(TABLENAME,"name = ?",new String[]{"赵四"});
    db.close();
}
数据删除后:

SqliteOpenHelper的用法:
该类的方法:
1、getReadableDatabase() 创建或者打开一个可读写的数据库,如果出现问题(磁盘满等),则打开一个只读的数据库。

2、getWritableDatabase() 获得一个可读写的数据库。如果磁盘满则会抛异常。

3、onCreate(SQLiteDatabase db) 只有第一次创建这个数据库的时候调用。一般在这个方法中创建数据的相应表。

4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调用。这个方法很少使用

5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发生改变的时候调用,一般如果需要修改表结构就写在这里.

//db.execSQL(“alert 表名 add 列名列数据类型”);

6、close()   关闭打开的所有数据库对象

使用步骤:
创建SQLiteOpenHelper类的子类MySQLiteOpenHelper 类,实现SQLiteOpenHelper类中的抽象方法onCreate()和onUpgrade();
调用 MySQLiteOpenHelper 对象的getWritableDatabase 或 getReadableDatabase方法,获得SQLiteDatabase 对象;
创建表。
调用SQLiteDatabase 对象的execSQL()方法,执行 update,insert,delete操作;调用rawQuery()方法执行select查询操作;
如果执行的是查询操作,则对返回的Cursor进一步处理。
示列:
布局:
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/button"/>
    <Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据"
android:onClick="btnClick"/>

</RelativeLayout>
菜单Menu:
 <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >

<item
android:id="@+id/insert_item"
app:showAsAction="never"
android:title="插入数据"/>

<item
android:id="@+id/delete_item"
app:showAsAction="never"
android:title="删除数据"/>
    <item
android:id="@+id/update_item"
app:showAsAction="never"
android:title="修改数据"/>
</menu>
Student实例:
 public class StudentEntity {

private String name;
    private Integer age;

public StudentEntity() {
    }

public StudentEntity(String name, Integer age) {
this.name = name;
        this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

@Override
public String toString() {
return "StudentEntity{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
SQLiteOpenHelper类的子类:
 public class MyOpenHlper extends SQLiteOpenHelper{

private static final String TABALENAME = "student";
    private static final String CREATETABLE = "CREATE TABLE " + TABALENAME
+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT, age INTEGER)";
//构造方法,系统会自动创建数据库文件
public MyOpenHlper(Context context,String name,int version){
super(context,name,null,version);
}
//只有在第一次打开数据库的时候调用
@Override
public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATETABLE);
}

//当数据库的版本发生变化的时候调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//更新表结构或删除旧的表结构
db.execSQL("DROP TABLE IF EXISTS "+TABALENAME);
onCreate(db);
}
}
主函数:
 public class MySqlite extends MainActivity{

private static final String TABALENAME = "student";
    private ListView mListView;
    private List<StudentEntity> mList;
    private MyOpenHlper myOpenHlper;
    private SQLiteDatabase db;
    private Cursor mCursor;
    private SimpleCursorAdapter adapter;
    private int index = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mysqlite);
init();
downLoadData();
}

public void init(){
mListView = (ListView) findViewById(R.id.listView);
mList = new ArrayList<>();
myOpenHlper = new MyOpenHlper(this,"test.db",2);
db = myOpenHlper.getWritableDatabase();
mCursor = db.rawQuery("select * from "+TABALENAME,null);
adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, mCursor,
                new String[]{"name","age"},
                new int[]{android.R.id.text1,android.R.id.text2},
SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
mListView.setAdapter(adapter);
}
public void downLoadData(){
mList.add(new StudentEntity("张三",12));
mList.add(new StudentEntity("李四",15));
mList.add(new StudentEntity("王五",18));
mList.add(new StudentEntity("赵六",22));
mList.add(new StudentEntity("麻子", 25));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
        if(id == R.id.insert_item){
if(index<mList.size()){
                ContentValues values = new ContentValues();
values.put("name",mList.get(index).getName());
values.put("age",mList.get(index).getAge());
db.insert(TABALENAME,null,values);
mCursor = db.rawQuery("select * from "+TABALENAME,null);
adapter.swapCursor(mCursor);
index++;
}
        }
return true;
}

/*  public void btnClick(View view){

if(index<mList.size()){
            ContentValues values = new ContentValues();
            values.put("name",mList.get(index).getName());
            values.put("age",mList.get(index).getAge());
            db.insert(TABALENAME,null,values);
            mCursor = db.rawQuery("select * from "+TABALENAME,null);
            adapter.swapCursor(mCursor);
            index++;
        }
    }*/
}
其中:SimpleCursorAdapter是CursorAdapter的子类,
使用方式与SimpleAdapter类似
原型:

new SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to , int flags) ;

参数:

1)、Context context, 这个与 SimpleListItemFactory 相关的 ListView 所处运行上下文(context)。也就是这个 ListView 所在的 Activity。

2)、int layout, 显示 list item 的 布局文件。这个 layout 文件中至少要包含在 "to" 参数中命名的 views。

3)、Cursor c, 数据库的光标( Cursor )。如果 cursor 无效,则该参数可以为 null

4)、String[] from, 指定 column 中的哪些列的数据将绑定(显示)到 UI 中。如果 cursor 无效, 则该参数可为 null。

5)、int[] to, 指定用于显示 "from" 参数指定的数据列表的 views。 这些 views 必须都是 TextViews。 "from" 参数的前 N 个值(valus)和 "to" 参数的前 N 个 views 是一一对应的关系。如果 cursor 无效,则该参数可为 null。

6)、flags,用于定义适配器行为的标志位。

Flags used to determine the behavior of the adapter; may be any combination of FLAG_AUTO_REQUERY and FLAG_REGISTER_CONTENT_OBSERVER。

FLAG_AUTO_REQUERY(常量值:1 )从 API11 开始已经废弃。因为他会在应用程序的 UI 线程中执行Cursor查询操作, 导致响应缓慢甚至应用程序停止响应(ANR)application not response的错误。作为替代方案,请使用 LoaderManager 和 CursorLoader.

如果设置FLAG_REGISTER_CONTENT_OBSERVER(常量值:2),适配器会在Cursor上注册一个Observer,当通知到达时会调用 onContentChanged() 方法。

效果图:

原文:https://blog.csdn.net/w_l_s/article/details/62232768

Android中数据库的一些操作(增删改查)相关推荐

  1. Android sqlite数据库的使用(增删改查)

    sqlite 的简介 对于sqlite 就是一种轻型的嵌入式的数据库,多用于手机,车机等,至于他的原理百度有很多大佬对他的详细介绍,我就不在这里累述了. 今天主要是想记录一下sqlite的详细使用,我 ...

  2. Android(安卓)订餐APP(Sqlite数据库,完整的增删改查)

     Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) 一.背景 首先说说项目的背景,基于地铁口鸡蛋饼的一个小项目,APP中固定设置的鸡蛋饼搭配,顾客也可以自己搭配 二.开发环境 A ...

  3. 数据库的操作 增删改查 mysql

    数据库的操作 增删改查 mysql 登陆数据库 查看全部的数据库 系统提供的库,除了 test 是给我们练手的 其它的不要碰 mysql库,保存了系统重要内容,比如帐户 root帐户的用户名,密码,就 ...

  4. Java连接sqlserver数据库,并进行增删改查操作

    用编程语言连接数据库是程序员必备的技能,今天我们就来学习一下如何通过Java来连接sqlserver数据库,并实现增删改查操作. 需要用到的工具: Myeclipse,sqlserver数据库,Mic ...

  5. 数据库多表的增删改查操作

    数据库多表的增删改查操作: 增加操作(一对多)--- 一对多形式的表的建立: models.py: from django.db import models # Create your models ...

  6. Node连接MySQL数据库进行基本的增删改查操作(一看就会)

    Node连接MySQL数据库进行基本的增删改查操作(一看就会) ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ❤️ ...

  7. Mysql —— C语言链接mysql数据库,实现可以增删改查的角色权限登录系统

    /******************************************************************** * 标题:C语言链接mysql数据库,实现可以增删改查的角色 ...

  8. asp连接mysql数据库增删查_【ASP】ASP对Access数据库的连接、增删改查及ASP的基本语法...

    本文讨论的是ASP,而不是Visual Studio写出来的.ASPX也就是ASP.NET. ASP不需要任何插件的支持,关键你是配置好WINDOWS的IIS服务器,把页面扔在上面执行就可以了. 不同 ...

  9. 1-1 MySQL数据库的基本操作 【增删改查】

    1-1 MySQL数据库的基本操作 [增删改查] 一.基础操作 创建数据库 查看数据库 选择数据库 删除数据库 二.建立一个基础数据库 三.基本操作 外键约束与字段自增 数据的增删改 数据查询 数据排 ...

  10. MySQL 之基础操作增删改查等

    一:MySQL基础操作 使用方法: 方式一: 通过图型界面工具,如 Navicat,DBeaver等 方式二: 通过在命令行敲命令来操作 SQL ( Structure query language ...

最新文章

  1. LTE PUCCH F2 TX/RX汇总
  2. 跟小静读CLR via C#(02)-基元类型、引用类型、值类型
  3. 组装肩部带有减速器双轴机械臂组装与调试
  4. Java8Stream
  5. JAVA计算机存储单元概述及数据类型
  6. css优先级计算规则
  7. [转载] Java三元运算符示例
  8. XPath语法及使用
  9. 数据库性能调优之始: analyze统计信息
  10. shell 不等于_Shell 布尔运算符与逻辑运算符
  11. php自动加载规范 PSR4 (Thinkphp)
  12. matlab仿真零中频接收机技术,经典又实用的零中频接收机的技术解决方案
  13. 图像处理之matlab中imnoise函数用法详解
  14. python自定义函数拟合_python自定义函数拟合
  15. Galerkin method 热传导公式推导过程
  16. 打造最强浏览器之浏览器选择刨析及搜索引擎利用
  17. Ubuntu18.04 安装 rabbitvcs svn 图形化客户端
  18. java毕业生设计web人力资源管理系统计算机源码+系统+mysql+调试部署+lw
  19. php微信消息通知,企业微信实现消息通知功能
  20. 六祎-实现微信支付宝QQ钱包三块合一收款码

热门文章

  1. 第二个mysql怎么装_Linux下安装两个MySQL的方法
  2. python模拟键盘输入视频_python教程-模拟鼠标和键盘输入
  3. 工作多年,怀才不遇你该怎么办?
  4. 硬核,这个充电宝居然烧煤气!
  5. 亮剑吧,掏出你吃灰的单片机板子。
  6. HLS:@E Simulation failed SIGSEGV
  7. android getwindow 在fragment不能使用,Android Fragment 布局使用 fitsSystemWindows = true 无效解决方案...
  8. oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...
  9. 广东外语外贸大学计算机考研,广东外语外贸考研难度,2021考研广东外语外贸大学MTI会挤破头很难吗?...
  10. 和csm_CSM媒介研究首发短视频用户价值研究报告