热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidSQLite常用命令:SQLite增删改查。

之前经常写数据库,但一般用框架,但有的时候也不适合用,还是最基础的SQLite最实用,本博文简单介绍一下数据库的增、删、改、查的简单操作。

之前经常写数据库,但一般用框架,但有的时候也不适合用,还是最基础的SQLite最实用,本博文简单介绍一下数据库的增、删、改、查的简单操作。

                              start

首先简单的说一下基本语句,然后是我自己写的Demo,如果需要可以去看看:

增:

db.execSQL("INSERT INTO person VALUES(null, ?, ?, ?)", new Object[]{person.name, person.age, person.info});

删:

 db.delete("person", "age >= ?", new String[]{String.valueOf(person.age)});

改:

        ContentValues cv = new ContentValues();
cv.put("age", person.age);
db.update("person", cv, "name = ?", new String[]{person.name});

查:

        Cursor c = db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
Person querys = new Person();
querys._id = c.getInt(c.getColumnIndex("_id"));
querys.name = c.getString(c.getColumnIndex("name"));
querys.age = c.getInt(c.getColumnIndex("age"));
querys.info = c.getString(c.getColumnIndex("info"));
persons.add(querys);
}
c.close();

效果图:

这里写图片描述

Demo:

step1: 写一个类,使其继承SQLiteOpenHelper,来创建数据库、创建表以及更新升级数据库
package com.god.mysqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
* @author David create on 2016/9/28 16:21.
* @email david.forever.god@gmail.com
* Learn from yesterday, live for today, hope for tomorrow.
*/

public class DBHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "davide.db";
private static final int DATABASE_VERSION = 1;

public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);//创建数据库
}

//创建表
private String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS person" +
"(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, " +
"age INTEGER, info TEXT)";

//数据库第一次被创建时onCreate会被调用
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);//执行创建表的语句
}

//如果DATABASE_VERSION值被改为2,系统发现现有数据库版本不同,即会调用onUpgrade
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD COLUMN other STRING");
}
}
step2:在你需要操作的地方,提前做好初始化(我直接在MainActivity里初始化了),然后就可以开始执行你想要的增删改查等操作,需要注意,在onDestroy里释放DB:
package com.god.mysqlite;

import android.content.ContentValues;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {


private ListView listView;
private ArrayList persons;

private DBHelper helper;
private SQLiteDatabase db;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView);

//初始化
helper = new DBHelper(this);
db = helper.getWritableDatabase();

initData();
}

// 增 最近看了眼幻城,感觉还是有些失望,当年看小说的时候,感觉很不错!
public void add(View view) {
db.beginTransaction(); //开始事务
try {
for (Person person : persons) {
db.execSQL("INSERT INTO person VALUES(null, ?, ?, ?)", new Object[]{person.name, person.age, person.info});
}
db.setTransactionSuccessful(); //设置事务成功完成
} finally {
db.endTransaction(); //结束事务
}
}

// 删 我们删掉年龄大于30岁的那些神们!
public void delete(View view) {
Person person = new Person();
person.age = 30;
db.delete("person", "age >= ?", new String[]{String.valueOf(person.age)});
}

// 改 我们将梨落的年龄改掉!
public void update(View view) {
Person person = new Person();
person.name = "梨落";
person.age = 150;

ContentValues cv = new ContentValues();
cv.put("age", person.age);
db.update("person", cv, "name = ?", new String[]{person.name});
}

// 查 查询所有的成员
public void query(View view) {
ArrayList persOns= new ArrayList();
Cursor c = db.rawQuery("SELECT * FROM person", null);
while (c.moveToNext()) {
Person querys = new Person();
querys._id = c.getInt(c.getColumnIndex("_id"));
querys.name = c.getString(c.getColumnIndex("name"));
querys.age = c.getInt(c.getColumnIndex("age"));
querys.info = c.getString(c.getColumnIndex("info"));
persons.add(querys);
}
c.close();
DbAdapter dbAdapter = new DbAdapter(persons);
listView.setAdapter(dbAdapter);
}

// 清空表,方便再次操作查看变化。
public void dropTable(View view) {
db.execSQL("delete from person");
}

@Override
protected void onDestroy() {
super.onDestroy();
//记得在最后一个Activity关闭时,需要释放DB
db.close();
}

private class DbAdapter extends BaseAdapter {

private List datas;

public DbAdapter(List persons) {
this.datas = persons;
}

@Override
public int getCount() {
return datas.size();
}

@Override
public Object getItem(int position) {
return datas.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (cOnvertView== null) {
cOnvertView= LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item, null);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = ((ViewHolder) convertView.getTag());
}
viewHolder.item_name.setText(datas.get(position).name);
viewHolder.item_age.setText(String.valueOf(datas.get(position).age));
viewHolder.item_con.setText(datas.get(position).info);
return convertView;
}
}

class ViewHolder {
private TextView item_name;
private TextView item_age;
private TextView item_con;

public ViewHolder(View view) {
item_name = ((TextView) view.findViewById(R.id.item_name));
item_age = ((TextView) view.findViewById(R.id.item_age));
item_con = ((TextView) view.findViewById(R.id.item_content));
}
}

private void initData() {
persOns= new ArrayList();
Resources res = getResources();
Person person1 = new Person("卡索", 200, res.getString(R.string.kasuo));
Person person2 = new Person("樱空释", 180, res.getString(R.string.yingkongshi));
Person person3 = new Person("梨落", 20, res.getString(R.string.liluo));
Person person4 = new Person("艳炟", 160, res.getString(R.string.yanda));
Person person5 = new Person("岚裳", 160, res.getString(R.string.lanshang));

persons.add(person1);
persons.add(person2);
persons.add(person3);
persons.add(person4);
persons.add(person5);
}
}
                           end

@Auther: David

@email :david.forever.god@gmail.com

Learn from yesterday, live for today, hope for tomorrow.


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
author-avatar
天秤小果冻cici
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有