Sqlite数据库的简单操作:

设置增删改查的按钮,xml界面布局设置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_marginTop="10dp"
tools:context="com.example.yb.myapplication.DataBaseOperateActivity"> <Button
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt_add"
android:text="增加"/>
<Button
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt_queryAll"
android:text="查找"/>
<Button
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt_update"
android:text="修改/更新"/>
<Button
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt_delete"
android:text="删除"/> <ListView
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:id="@+id/lv_stuInfo"></ListView> </LinearLayout>

使用数据库存储的步骤:

1新建数据库:

1.1.创建一个数据库帮助类MySqliteOpenHelper继承SqliteOpenHelper,需要添加一个构造方法,实现两个方法oncreate ,onupgrade
构造方法中的参数介绍:

//context :上下文 ,name:数据库文件的名称、 factory:用来创建cursor对象,默认为null 。version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能将   . super(context, "info.db", null,1);

1.2.复写oncreate和onupgrdate方法:
oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql语句;SQLiteDatabase db可以用来执行sql语句

//onUpgrade数据库版本号发生改变时才会执行; 特别适合做表结构的修改

public class MySqliteOpenHelper extends SQLiteOpenHelper {

    public MySqliteOpenHelper(Context context) {
//factory用来创建cursor对象,默认是null
//super(context, name, factory, version);
super(context, "info.db", null, );
} //第一次的创建的 时候被调用,
@Override
public void onCreate(SQLiteDatabase db) {
//通过SQLiteDatabase执行创建一个sql语句
db.execSQL("create table info(_id integer primary key autoincrement,name varchar(20),phone varchar(11))");
} @Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}

2:新建一个Bean包,有一个数据的封装StuInfoBean,新建一个StuInfoBean类

package com.example.yb.Bean;

/**
* Created by yb on 2016/12/12.
*/
public class StuInfoBean { public String id;
public String name;
public String phone;
}

3.新建一个包,创建一个数据操作类StuInfoDao,Dao层是对数据进行增删改查操作

public class StuInfoDao {

    //数据库帮助类对象
private MySqliteOpenHelper mySqliteOpenHelper; //构造函数
public StuInfoDao(Context context) {
mySqliteOpenHelper = new MySqliteOpenHelper(context);
} public boolean add(StuInfoBean stubean) {
//创建数据库
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //方法一:执行sql语句
//db.execSQL("insert into info(name,phone) values(?,?);",new Object[]{stubean.name,stubean.phone}); //方法二
ContentValues values = new ContentValues();//用map封装的对象,存放值
values.put("name", stubean.name);
values.put("phone", stubean.phone);

    //table: 表名 , nullColumnHack:可以为空,标示添加一个空行, values:数据一行的值 , 返回值:代表添加这个新行的Id ,-1代表添加失败
long result = db.insert("info", null, values); //返回值是新增的行的id, 失败是-1
//关闭数据库对象
db.close();
if (result != -) { //添加成功
return true;
} else {
return false;
}
} public int del(String name) {
//创建数据库,调用getReadableDatabase方法,来初始化数据库的创建
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//执行sql语句
//db.execSQL("delete from info where name=?;",new Object[]{name}); //table :表名, whereClause: 删除条件, whereArgs:条件的占位符的参数 ; 返回值:成功删除多少行
int result = db.delete("info", "name=?", new String[]{name}); //关闭数据库对象
db.close();
return result;
} public int update(StuInfoBean stubean) {
//创建数据库
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
//执行sql语句
//db.execSQL("update info set phone=? where name=?;", new Object[]{stubean.phone, stubean.name}); ContentValues values = new ContentValues();//是用map封装的对象,用来存放值
values.put("phone", stubean.phone);

    //table:表名, values:更新的值, whereClause:更新的条件, whereArgs:更新条件的占位符的值,返回值:成功修改多少行

int result = db.update("info", values, "name=?", new String[]{stubean.name});//name=? where的条件
//关闭数据库对象
db.close();
return result;//返回成功的行数
} public ArrayList<StuInfoBean> query(String name) {
ArrayList<StuInfoBean> list = new ArrayList<StuInfoBean>();
//创建数据库
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //执行sql语句,返回一个cursor对象,游标对象
//Cursor cursor = db.rawQuery("select _id,name,phone from info where name=?", new String[]{name});

      //table:表名, columns:查询的列名,如果null代表查询所有列; selection:查询条件, selectionArgs:条件占位符的参数值,
      //groupBy:按什么字段分组, having:分组的条件, orderBy:按什么字段排序

        Cursor cursor = db.query("info", new String[]{"_id", "name", "phone"}, "name=?", new String[]{name}, null, null, "_id desc");

        if (cursor != null && cursor.getCount() > ) {
//循环遍历结果,获取每一行的 值
while (cursor.moveToNext()) {
StuInfoBean stubean = new StuInfoBean();
stubean.id = cursor.getInt() + "";
stubean.name = cursor.getString();
stubean.phone = cursor.getString();
list.add(stubean);
}
cursor.close();    //关闭结果集
}
//关闭数据库对象
db.close();
return list;
}
}

2.Activity里面创建这个帮助类的一个对象,调用getReadableDatabase()方法,会帮助我们创建打开一个数据库

MySqliteOpenHelper sqlhelper=new MySqliteOpenHelper();
SQLiteDatabase db=sqlhelper.getReadDatabase();

/**
* 数据库的操作,增删改查
*/
public class DataBaseOperateActivity extends AppCompatActivity implements View.OnClickListener {
private Context mcontext;
private ListView lv_stuInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_base_operate); mcontext = this;
//创建一个数据库帮助类对象
MySqliteOpenHelper mySqliteOpenHelper = new MySqliteOpenHelper(mcontext); //创建数据库
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); findViewById(R.id.bt_add).setOnClickListener(this);
findViewById(R.id.bt_delete).setOnClickListener(this);
findViewById(R.id.bt_update).setOnClickListener(this);
findViewById(R.id.bt_queryAll).setOnClickListener(this); lv_stuInfo = (ListView) findViewById(R.id.lv_stuInfo);
} @Override
public void onClick(View view) {
StuInfoDao studao = new StuInfoDao(mcontext);
switch (view.getId()) {
case R.id.bt_add:
StuInfoBean stubean=new StuInfoBean();
stubean.name="aaa";
stubean.phone="";
boolean result = studao.add(stubean);
if(result){
Toast.makeText(mcontext,"添加成功",).show();
}else {
Toast.makeText(mcontext,"添加失败",).show();
}
break;
case R.id.bt_delete:
int del = studao.del("aaa");
Toast.makeText(mcontext,"成功删除了"+del+"行",).show();
break;
case R.id.bt_update:
StuInfoBean bean1=new StuInfoBean();
bean1.name="aaa";
bean1.phone="";
int update = studao.update(bean1);
Toast.makeText(mcontext,"成功修改了"+update+"行",).show();
break;
case R.id.bt_queryAll:
//获取数据
ArrayList<StuInfoBean> arraylist = studao.query("aaa");
//封装QueryAdapter,
QueryAdapter queryAdapter = new QueryAdapter(mcontext,arraylist);
//将adapter设置给listview(lv_stuInfo);
lv_stuInfo.setAdapter(queryAdapter);
break;
} }
}

帮助类对象中的getWritableDatabase 和 getReadableDatabase都可以帮助我们获取一个数据库操作对象SqliteDatabase.

注意:这里面设计到查询数据时要展示数据在Listview上,新建一个Adapter包,专门写adapter的,新建一个QueryAdapter类继承BaseAdapter,

adapter的基本操作是:

public class QueryAdapter extends BaseAdapter{

    private  Context mcontext;
private ArrayList<StuInfoBean> arraylist; public QueryAdapter(Context mcontext, ArrayList<StuInfoBean> arraylist) {
this.mcontext=mcontext;
this.arraylist=arraylist;
} @Override
public int getCount() {
return arraylist.size();
} @Override
public Object getItem(int i) {
return arraylist.get(i);
} @Override
public long getItemId(int i) {
return i;
} @Override
public View getView(int i, View view1, ViewGroup viewGroup) { //1复用Convertview
View view=null;
if(view1!=null){
view=view1;
}else{
view = View.inflate(mcontext, R.layout.item_database_layout, null); }
//2找到控件,view用inflate转为View对象 TextView item_tv_id = (TextView) view.findViewById(R.id.item_tv_id);
TextView item_tv_name = (TextView) view.findViewById(R.id.item_tv_name);
TextView item_tv_phone = (TextView) view.findViewById(R.id.item_tv_phone); //3找到内容,list.get(position);
StuInfoBean stuInfoBean = arraylist.get(i); //4控件设置内容setText
item_tv_id.setText(stuInfoBean.id);
item_tv_name.setText(stuInfoBean.name);
item_tv_phone.setText(stuInfoBean.phone); return view;
}
}

  1.布局写listview

  2.找到listview

  3.封装新闻数据到list集合中 ,目的是为adapter提供数据展示。

  4.封装一个Adapter类继承BaseAdatper,写一个构造方法接受list集合数据,复写四个方法
    a.创建一个构造方法  
    b.封装getCount方法  
    c.getView方法: 
      1.复用convertview,模板代码,如果不都能空,需要将一个布局文件转换为view对象作为getview的返回对象。
      view = View.inflater(Context context, int resuorceId,ViewGroup root)
      2.找到view上的这些子控件,目的是将list集合中的bean数据一一对应设置给这些子控件

      3.从list集合中获取postion条目上要显示的数据Bean

      4.将获取的bean中的数据设置给这些子控件
    d.getItem方法:将list集合中指定postion上的bean对象返回
    e.getItemId,直接返回postion

  5.创建一个封装的Adapter对象,设置给listview

上面的代码是第4步

最后界面展示

Android-Sqlite数据库的操作的更多相关文章

  1. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  2. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  3. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  4. 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持

    IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...

  5. Android——SQLite/数据库 相关知识总结贴

    android SQLite简介 http://www.apkbus.com/android-1780-1-1.html Android SQLite基础 http://www.apkbus.com/ ...

  6. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  7. Android sqlite数据库存取图片信息

    Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...

  8. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

  9. IOS开发-UI学习-sqlite数据库的操作

    IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这 ...

  10. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

随机推荐

  1. NOSDK--SDK一键打包及统一接入的实现(前言)

    前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...

  2. [Math] 常见的几种最优化方法

    我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素 ...

  3. 如何查看、修改Linux的系统时间

    如题: 如何修改Linux的系统时间? date -s 05/27/2011 date -s 10:24:00 clock -w 就这三条命令就OK了! 查看/修改Linux时区和时间 一.时区 1. ...

  4. MySQL SQL中的安全问题

    一.SQL注入是一个很常见的问题:利用的原理是SQL语句中的 "or"操作符或者"/*"和"#"注释符.前者利用逻辑运算,或者利用MySQL ...

  5. 核型SVM

    (本文内容和图片来自林轩田老师<机器学习技法>) 1. 核技巧引入 如果要用SVM来做非线性的分类,我们采用的方法是将原来的特征空间映射到另一个更高维的空间,在这个更高维的空间做线性的SV ...

  6. Visual Studio 的代码片段工具

    当安装完Visual Studio之后,会有附带一些原生的代码片段文件(*.snippet),对于vs2013参考目录如下: X:\Program Files (x86)\Microsoft Visu ...

  7. Opera Browser -- Access Restricted Sites using Free VPN /Free VPN Services List

    Opera Browser  -- Access Restricted Sites using Free VPN: currently the feature is available in Oper ...

  8. [Linux]系统调用理解(1)

    本文是Linux系统调用专栏系列文章的第一篇,对Linux系统调用的定义.基本原理.使用方法和注意事项大概作了一个介绍,以便读者对Linux系统调用建立一个大致的印象. 什么是系统调用? Linux内 ...

  9. MySQL MHA 搭建&测试

    一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...

  10. js: 从setTimeout说事件循环模型

    一.从setTimeout说起 setTimeout()方法不是ecmascript规范定义的内容,而是属于BOM提供的功能.查看w3school对setTimeout()方法的定义,setTimeo ...