目录

第一种:裸写数据库

第二种:调用方法

删除数据库

第三种:RUL调用表单的增删改查


以前的数据库和Oracle,SQLserver,Mysql这些都是算是重量级的数据库

oracle————1-2G

SQLserver————500M

MySql————50M

SQLite————15k

数据库的分类可以通过三类来分:

  1. 运行环境(云端,终端)
  2. 运行大小
  3. 设计语言(嵌入式)

前三种都是我们之前学过的适合用来当云端(服务器)的数据库,最后一个是用来在手机,浏览器上面的

现在我们开始学习SQLite的数据库:

这种数据库和以前的不太一样,以前的数据库都是在控制台或者用sql语句来操作的,但是SQLite和前面的数据库都不一样

第一种:裸写数据库

他是用构造方法来建库,用oncreate方法来建表的

第一步:先和创建一个DBHepler跟我们以前的BaseDao一样的意思

不管是哪中,DBHepler都是继承的SQLiteOpenHelper

package com.example.utils;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;public class BaseDao extends SQLiteOpenHelper{每次实例化数据库的时候就必须传入这些值,然后创建数据库public BaseDao(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);System.out.println("建库成功!");}创建表的信息,是子啊创建数据库的同时一起创建的,如果语句有错则不会创建主键的字符必须子在前面加上_@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table Users(id integer primary key,name text,age real,sex text,favorite text,pass text,tupain text)");System.out.println("建表成功!");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}
}

在Android里面,数据类型是后判断的,即使你设置的类型是不存在的,在执行的时候也不会报错,只会在最终插入数据的时候开决定他的数据类型

数据类型的分类:

  1. 强类型:java的string,double,float。。。。
  2. 弱类型:js的var,let

第二步:创建一个avtivity设置四个绑定按钮,分别绑定四个按钮,测试用,不过我这里是直接插入了项目,并且已经封装过了,所以先看封装后的代码:

package com.example.utils;import java.util.ArrayList;
import java.util.List;import com.example.entity.Users;
import com.example.test.TestDBHeplerActivity;import android.R.string;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;public  class OperateDao {//删除表public static void deleteTable(Context context) {//创建爱数据库BaseDao dao = new BaseDao(context, "JIN.db", null, 1);//获得数据库SQLiteDatabase db = dao.getWritableDatabase();//sql语句db.execSQL("delete from Users");//关闭数据库db.close();System.out.println("删除表单方法执行完毕!");}public static void addUsers(Context context,Users users) {//创建爱数据库BaseDao dao = new BaseDao(context, "JIN.db", null, 1);//获得数据库SQLiteDatabase db = dao.getWritableDatabase();//sql语句db.execSQL("insert into Users(id,name, age, tupain, sex, favorite, pass) values(?,?,?,?,?,?,?)",new Object[] {users.getId(),users.getName(),users.getAge(),users.getTupian(),users.getSex(),users.getFavorite(),users.getPass()});//关闭数据库db.close();System.out.println("增加方法执行完毕!");}public static List<Users> findUsers(Context context) {//用来存储方法的返回对象List<Users> list = new ArrayList<Users>();//创建爱数据库BaseDao dao = new BaseDao(context, "JIN.db", null, 1);//获得数据库SQLiteDatabase db = dao.getReadableDatabase();//sql语句,查询的语句返回的是一个游标,通过移动游标来不断读取游标里面的值
//------------------------------------------------------------------------------------cursor.getCount();                 获取游标的总长度cursor.getColumnCount();           获得每行的数据列数cursor.getColumnIndex("name");     获取某个属性所在的列数cursor.getInt(i);                  获取某列的数据值,分int和stringcursor.getString(i);               获取某列的数据值,分int和stringcursor.moveToFirst();              使游标移动到第一条数据cursor.moveToLast();               使游标移动到最后一条数据cursor.moveToNext();               使游标移动到下一条数据cursor.moveToPosition(i);          使游标移动到指定的位置cursor.close();关闭游标
//------------------------------------------------------------------------------------Cursor cursor = db.rawQuery("select * from Users", null);while(cursor.moveToNext()){int id = cursor.getInt(cursor.getColumnIndex("id"));String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));String tupain = cursor.getString(cursor.getColumnIndex("tupain"));String sex = cursor.getString(cursor.getColumnIndex("sex"));String favorite = cursor.getString(cursor.getColumnIndex("favorite"));String pass = cursor.getString(cursor.getColumnIndex("pass"));Users us = new Users(id, name, age, tupain, sex, favorite, pass);list.add(us);}cursor.close();db.close();System.out.println("删除方法执行完成");return list;}public static void deleteUsers(Context context,Users users) {BaseDao dao = new BaseDao(context, "JIN.db", null, 1);SQLiteDatabase db = dao.getWritableDatabase();//前面的是sql语句,后面是替换占位符的参数值db.execSQL("delete from Users where id = ?",new Object[] {users.getId()});db.close();}
}

第三步就是最后一步,在需要的时候调用这些方法

//调用增加的方法
OperateDao.addUsers(TestActivity.this, users);//调用查询的方法
List<Users> list = OperateDao.findUsers(v.getContext());

第二种:调用方法

上面那种,什么封装都没做,直接调用的时候自己写的sql语句,接下来学习一种封装了sql语句,只需我们调用方法在传入参数

第一步:也是要创建一个记录常量的类——常量类

有关数据库表名和版本号我们都快可以直接写成一个常量类,然后用常量来个他们赋值,假如需要修改的时候,也只需修改常量类的配置

package com.bdqn.utils;public class Const {public static final String DB_NAME="JIN.db";public static final int VERSION = 1;
}

第二步:我们就可以创建爱你DBHepler类了,和上面的那种还是有些不同的

package com.bdqn.utils;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper{//这是删除数据库方法所需的参数private String NAME;public DBHelper(Context context) {//在这里我们就用常来代替原有的参数super(context, Const.DB_NAME, null, Const.VERSION);//这是删除数据库方法所需的参数this.NAME=Const.DB_NAME;System.out.println("建库成功!");}@Overridepublic void onCreate(SQLiteDatabase db) {//建表语句和以前的没什么大的区别db.execSQL("create table Users(_id Integer primary key autoincrement,name text,age real,pass text)");System.out.println("建表成功!");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}//  删除数据库//这是删除数据库方法所需的方法public boolean deleteDatabase(Context context) {System.out.println("删除数据库!");return context.deleteDatabase(NAME);}}

第三步:实体类

package com.bdqn.entity;public class Users {private int id;private String name;private String pass;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Users(int id, String name, String pass, int age) {super();this.id = id;this.name = name;this.pass = pass;this.age = age;}public Users() {super();// TODO Auto-generated constructor stub}
}

第四部绑定页面上的是个按钮,和按钮的绑定事件

这种调用是支持事物的,事物一共有三步

  1. db.beginTransaction(); //开启事务
  2. db.setTransactionSuccessful();//提交事务
  3. db.endTransaction();//如果事物没有提交就结束,之前的事物回滚
package com.bdqn.activity;import com.bdqn.entity.Users;
import com.bdqn.testrul_iduf.R;
import com.bdqn.utils.DBHelper;import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class TestDAO extends Activity{private Button addButton;private Button deleteButton;private Button findButton;private Button updateButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);super.setContentView(R.layout.test1);addButton = (Button)this.findViewById(R.id.add);deleteButton = (Button)this.findViewById(R.id.delete);findButton = (Button)this.findViewById(R.id.find);updateButton = (Button)this.findViewById(R.id.update);//数据库创建
//      dbHelper = new DBHelper(this);//删除数据库
//      dbHelper.deleteDatabase(this);//绑定addButton.setOnClickListener(new insertOnclicklistener());findButton.setOnClickListener(new findOnclicklistener());deleteButton.setOnClickListener(new deleteOnclicklistener());updateButton.setOnClickListener(new updateOnclicklistener());}//增class insertOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {DBHelper dbHelper = new DBHelper(TestDAO.this);SQLiteDatabase db = null;try {db=dbHelper.getWritableDatabase();//事物开启db.beginTransaction();//键值对存数ContentValues values = new ContentValues();values.put("name", "jin");values.put("age", 22);values.put("pass", "123");db.insert("Users", null, values);//事物提交db.setTransactionSuccessful();} catch (Exception e) {e.printStackTrace();}finally {//事物结束db.endTransaction();//如果事物没有提交就结束,之前的事物回滚}db.close();}}//查class findOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {DBHelper dbHelper = new DBHelper(TestDAO.this);SQLiteDatabase db = dbHelper.getReadableDatabase();/*db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)*/Cursor cursor = db.query("Users", new String[] {"_id","name","age","pass"}, null, null, null, null, null);while(cursor.moveToNext()) {int id = cursor.getInt(cursor.getColumnIndex("_id"));String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));String pass = cursor.getString(cursor.getColumnIndex("pass"));System.out.println(id);System.out.println(name);System.out.println(age);System.out.println(pass);}db.close();}}//删class deleteOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {DBHelper dbHelper = new DBHelper(TestDAO.this);SQLiteDatabase db = dbHelper.getWritableDatabase();int count = db.delete("Users", "_id=?", new String[] {"1"});System.out.println("删除了"+count+"行");}}//改class updateOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {DBHelper dbHelper = new DBHelper(TestDAO.this);SQLiteDatabase db = dbHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("name", "金前旺");db.update("Users", values, "_id=?", new String[] {"1"});}}}

删除数据库

在这里先记录一下删除数据库的方法

假如我们的数据表创建的不太满意,或者参数需要修改,我们完全可以删除数据库,再次创建

//package com.bdqn.utils;
//
//import android.content.Context;
//import android.database.sqlite.SQLiteDatabase;
//import android.database.sqlite.SQLiteDatabase.CursorFactory;
//import android.database.sqlite.SQLiteOpenHelper;
//
//public class DBHelper extends SQLiteOpenHelper{
//  //这是删除数据库方法所需的参数private String NAME;
//
//  public DBHelper(Context context) {
//      //在这里我们就用常来代替原有的参数
//      super(context, Const.DB_NAME, null, Const.VERSION);
//      //这是删除数据库方法所需的参数this.NAME=Const.DB_NAME;
//      System.out.println("建库成功!");
//  }
//
//  @Override
//  public void onCreate(SQLiteDatabase db) {
//      //建表语句和以前的没什么大的区别
//      db.execSQL("create table Users(_id Integer primary key autoincrement,name text,age real,pass text)");
//      System.out.println("建表成功!");
//  }
//
//  @Override
//  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//
//  }
//
//  //  删除数据库
//  //这是删除数据库方法所需的方法public boolean deleteDatabase(Context context) {System.out.println("删除数据库!");return context.deleteDatabase(NAME);}
//
//
//
//}

上面的几句没有注释的就是,删除数据库的必要参数和方法,到时候直接用数据库对象调用这个方法就可以删除了

第三种:RUL调用表单的增删改查

第一步

package com.bdqn.utils;public class Const {public static final String DB_NAME="JIN.db";public static final int VERSION = 1;
}

第二步

package com.bdqn.utils;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper{private String NAME;public DBHelper(Context context) {super(context, Const.DB_NAME, null, Const.VERSION);// TODO Auto-generated constructor stubthis.NAME=Const.DB_NAME;System.out.println("建库成功!");}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL("create table Users(_id Integer primary key autoincrement,name text,age real,pass text)");System.out.println("建表成功!");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}//  删除数据库public boolean deleteDatabase(Context context) {System.out.println("删除数据库!");return context.deleteDatabase(NAME);}
}

第三步:这一步就和之前的就不一样了,这里需要创建一个UsersDao并且继承ContentProvider

package com.bdqn.contentprovider;import com.bdqn.utils.DBHelper;import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;public class UsersDao extends ContentProvider{private DBHelper dbhepler;@Overridepublic boolean onCreate() {//创建数据库dbhepler = new DBHelper(super.getContext());System.out.println("创建数据库");return false;}@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {SQLiteDatabase db = dbhepler.getReadableDatabase();Cursor cursor = db.query("Users", projection, selection, selectionArgs, null, null, null);System.out.println("====="+cursor.getCount());return cursor;}@Overridepublic String getType(Uri uri) {// TODO Auto-generated method stubreturn null;}@Overridepublic Uri insert(Uri uri, ContentValues values) {// TODO Auto-generated method stubSQLiteDatabase db = dbhepler.getReadableDatabase();db.insert("Users", null, values);return null;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) {// TODO Auto-generated method stubSQLiteDatabase db = dbhepler.getReadableDatabase();int count = db.delete("Users", selection, selectionArgs);return count;}@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {// TODO Auto-generated method stubSQLiteDatabase db = dbhepler.getReadableDatabase();int count = db.update("Users", values, selection, selectionArgs);return count;}}

第四步就不是调用了,我们需要在总配置文件进行一下配置,不然我们就没有办法得到url参数

第一种配置的方法就是在空制台添加

第二种赋值配置文件,然后修改

<provider android:name="com.bdqn.contentprovider.UsersDao" android:authorities="com.bdqn.contentprovider"android:exported="true"></provider>

第一个参数是该类的全类名,第二个就是等下我们调用时解析用的路径

第五步:创建activity类绑定按钮和点击事件调试

package com.bdqn.activity;import com.bdqn.entity.Users;
import com.bdqn.utils.DBHelper;
import com.example.testrul_iduf222222.R;import android.R.string;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class TestDAO extends Activity{private Button addButton;private Button deleteButton;private Button findButton;private Button updateButton;private Uri url;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);super.setContentView(R.layout.test1);addButton = (Button)this.findViewById(R.id.add);deleteButton = (Button)this.findViewById(R.id.delete);findButton = (Button)this.findViewById(R.id.find);updateButton = (Button)this.findViewById(R.id.update);//解析地址url = url.parse("content://com.bdqn.contentprovider");//数据库创建
//      dbHelper = new DBHelper(this);//删除数据库
//      dbHelper.deleteDatabase(this);//绑定addButton.setOnClickListener(new insertOnclicklistener());findButton.setOnClickListener(new findOnclicklistener());deleteButton.setOnClickListener(new deleteOnclicklistener());updateButton.setOnClickListener(new updateOnclicklistener());}//增class insertOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {ContentValues values = new ContentValues();values.put("name", "金前旺");values.put("age", 999);values.put("pass", "123");//调用方式TestDAO.this.getContentResolver().insert(url, values);}}//查class findOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {Cursor cursor = TestDAO.this.getContentResolver().query(url, null,null,null,null);System.out.println(cursor.getCount());while(cursor.moveToNext()) {int id = cursor.getInt(cursor.getColumnIndex("_id"));int age = cursor.getInt(cursor.getColumnIndex("age"));String name = cursor.getString(cursor.getColumnIndex("name"));String pass = cursor.getString(cursor.getColumnIndex("pass"));System.out.println(id);System.out.println(name);System.out.println(pass);System.out.println(age);}}}//删class deleteOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {//调用方式int count = TestDAO.this.getContentResolver().delete(url, "_id=?", new String[] {"2"});System.out.println("删除了"+count+"行");}}//改class updateOnclicklistener implements OnClickListener{@Overridepublic void onClick(View v) {ContentValues values = new ContentValues();values.put("name", "斤斤计较军军");TestDAO.this.getContentResolver().update(url, values, "_id=?", new String[] {"2"});}}}
private Uri url;//解析地址url = url.parse("content://com.bdqn.contentprovider");

SQLite手机数据库相关推荐

  1. sqlitestudio和mysql_SQLiteStudio优雅调试Android手机数据库Sqlite(推荐)

    前言 调试Android中的数据库有多种方式,目前比较流行的是:借助电脑端浏览器来调试,可以使用如下两个玩意: 博主在调试sqlite的时候,发现了个更加简单和强大的工具来调试sqlite数据库. S ...

  2. 大数据入门(SQLite手机本地轻量级数据库增删改查)

    SQLite手机本地轻量级数据库 数据库分为: 1.关系型数据库(mysql主外键属于关系型) 2.对象型数据库(oracle) 3.嵌入式数据库 案例: 安卓控件(5个Button)访问Activi ...

  3. Android SQLite嵌入式数据库

    Android SQLite嵌入式数据库(一) SQLite的CURD Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加( ...

  4. 2010-02-28 传智播客—Android(三)数据存储之三SQLite嵌入式数据库

    2010-02-28 传智播客-Android(三)数据存储之三SQLite嵌入式数据库 前两篇日志我已经总结了本地数据存储的前两种:文件和配置项.还剩下最后一种数据库存储--SQLite. 一.SQ ...

  5. SQLite嵌入式数据库(转)

    一.SQLite简介 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对 ...

  6. iPhone开发进阶(9)--- 用SQLite管理数据库

    博主:易飞扬 原文链接 : http://www.yifeiyang.net/iphone-developer-advanced-9-management-database-using-sqlite/ ...

  7. Xamarin SQLite教程数据库访问与生成

    Xamarin SQLite教程数据库访问与生成 在本教程中,我们将讲解如何开发SQLite相关的App.在编写程序前,首先需要做一些准备工作,如了解Xamarin数据库访问方式,添加引用,构建使用库 ...

  8. SQLite 附加数据库(http://www.w3cschool.cc/sqlite/sqlite-attach-database.html)

    SQLite 附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何一个.SQLite 的 ATTACH DTABASE 语句是用来选择一个特定的数据库,使用该命令后,所有的 ...

  9. SQLite 分离数据库(http://www.w3cschool.cc/sqlite/sqlite-detach-database.html)

    SQLite 分离数据库 SQLite的 DETACH DTABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的.如果同一个数据库文件已经被附加上 ...

  10. SQLite 创建数据库(http://www.w3cschool.cc/sqlite/sqlite-create-database.html)

    SQLite 创建数据库 SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库.您不需要任何特殊的权限即可创建一个数据. 语法 sqlite3 命令的基本语法如下: $sqlit ...

最新文章

  1. 如何使用小的显存训练大的batch_size
  2. java登录注册原理_案例:登录注册实现
  3. 配置管理之PackageProvider接口
  4. 浙江高考艺术类2021年成绩查询,2021年浙江美术高考成绩查询网址:https://www.zjzs.net/...
  5. setup.s 分析—— Linux-0.11 学习笔记(二)
  6. mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
  7. 前端大神的离逝,让我们不得不有所反思。
  8. ps中如何同图层获取css代码
  9. 2020计算机软考笔试题目,2020年计算机软考信息系统项目管理师巩固练习题及答案...
  10. dll导出类比较好的方式
  11. 个人地理数据库和文件地理数据库的区别
  12. 3D 贴图丢失的检测以及解决办法大全
  13. “中年跳槽,伤筋动骨”:35岁跳槽,你可要想清楚
  14. 代码没问题但运行不出来
  15. Python框架:Django写图书管理系统(LMS)
  16. windows环境部署django项目(可部署不同版本的django)
  17. 用Python把它做出来:EXCEL文件合并/拆分工具 (含VBA版)
  18. 开始创建第一个npm的微信小程序项目
  19. 使用you-get批量下载B站视频
  20. 面试之前,简历之上:给前端校招同学的简历建议

热门文章

  1. 数据分析常见的英文缩写(一)
  2. Python入门(八):对象类型之文件
  3. 2017Final 圆周率山
  4. 加州房价--决策树与随机森林
  5. 从0到1,搭建经营分析体系
  6. 1419D2 Sage‘s Birthday
  7. PaaS、IaaS 、SaaS、Bass、Fass、无服务的理解与区别
  8. java 图文混排_图文混排的几种实现方案
  9. yaffs2源码学习2:chunk和block
  10. Ansys2020r2 提示The requested data is not available.The ETABLE command is ignored