zoukankan      html  css  js  c++  java
  • SQLite


     简介 SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,
           通常只需要几百KB的内存就足够了,所以特别适合在移动设备上使用。
          SQLite支持标准的SQL语法。

    SQLite中的数据类型:
    integer 整型 real 浮点型
    text 文本类型 blob 二进制类型
    Android 中实际上是不区分数据类型的,都是 String


    1、创建数据库
      Android提供了一个 SQLiteOpenHelper 帮助类,我们需要继承这个类,实现构造函数和重写onCreate()和onUpgrade()方法,实现自己的 MyDatabaseHelper。
      构造函数中的四个参数分别是:Content 数据库名称(注意需要添加文件后缀名 *.db) , 自定义的Cursor (一般传入null) ,版本号
         
    public class MyDatabaseHelper extends SQLiteOpenHelper {
    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
    }
    //只有在第一次创建数据库文件时才会执行
    @Override
    public void onCreate(SQLiteDatabase db) {
    String createTableSql="create table Users (" +
    "Id integer primary key autoincrement , " +
    "Name text, Age integer ," +
    "Phone integer," +
    "Address text)";
    //执行创建表 SQL
    db.execSQL(createTableSql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    /*
    升级数据库
    当你想要修改数据表结构,添加数据,删除数据库是,可以将相应SQL写在这里。
    接的修改版本号(大于上一次)

    eg:
    db.execSQL("drop table if exists Users");
    onCreate(db);
    */
    }
    }

    2、操作数据库
       <1>使用SQL操作数据库
        MyDatabaseHelper myDBHepler = new MyDatabaseHelper(this, "DB.db", null, 1);
    SQLiteDatabase db = myDBHepler.getWritableDatabase();
    //添加数据
    db.execSQL("insert into Users(name,age,phone,address) values(?,?,?,?)",
    new String[]{"Name1", "18", "123123", "AddressAddress"});
    //更新数据
    db.execSQL("update Users set Address= ? where name= ?",
    new String[]{"AddressUpdated", "Name1"});
    //删除数据
    db.execSQL("delete fom Users where name= ?", new String[]{"Name2"});
    //查询数据
    Cursor cursor = db.rawQuery("select * from Users", null);
    //获取查询到的数据
    while (cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex("Name"));
    String age = cursor.getString(cursor.getColumnIndex("Age"));
    Toast.makeText(this, name, Toast.LENGTH_SHORT).show();
    Toast.makeText(this, age, Toast.LENGTH_SHORT).show();
    }
        cursor.close();
    db.close ();
    Toast.makeText(this,"Ok", Toast.LENGTH_SHORT).show();

       <2>使用谷歌API操作数据库

        MyDatabaseHelper myDBHepler = new MyDatabaseHelper(this, "DB.db", null, 1);
    SQLiteDatabase db = myDBHepler.getWritableDatabase();

    // 添加数据
    ContentValues valuesInsert = new ContentValues();
    valuesInsert.put("Name", "Name1");
    valuesInsert.put("Phone", 123123);
    valuesInsert.put("Address", "Address Address");
        //返回值代表插入新行的ID
        int insert=db.insert("Users",null,valuesInsert);

    //更新数据
    ContentValues valuesUpdate=new ContentValues();
    valuesUpdate.put("Address","Address UPdated2");
    //db.update("Users",values,"Id>2",null);
    db.update("Users",valuesUpdate,"Id=?",new String[]{"3"});

    //删除数据,返回行代表影响的行数
        int delete= db.delete("Users","Id=?",new String[]{"4"});

    //查询数据
    Cursor cusor= db.query("Users",null,null,null,null,null,null);

    db.close();

    事务:
    // 开启事务
    db.beginTransaction();
    try {
    db.execSQL("");
    db.execSQL("");

    db.setTransactionSuccessful();
    } finally {
    db.endTransaction();
    }



    控制台中操作SQLite数据库
    1、操作前需要配置SDK中platform-tools目录到环境变量中。
    2、Win+R 输入cmd 进入命令行界面
    3、输入 adb shell 进入设备控制台
    4、通过 cd 命令进入到程序数据库文件路径下 eg: /data/data/com.tiger.databasetest/databases/ ,
    可以使用 ls命令查看该目录中文件。
    5、接着输入 sqlite3 在加上数据库名称 ,(在此期间可能出现没有权限打开这个文件的错误,解决方式请看最下方
    6、 通过 .table 命令查看数据库素有表名称
      通过 .schema 命令查看建表语句
    7、输入你想执行的 SQL 语句 (最后记得加 ;)
    eg:
     
    8、通过 .quit 退出数据库编辑

    问题解决:
    没有权限打开文件问题:
    1、进入控制台,通过 adb shell 进入设备控制台再输入 su 回车进入root权限模式。
    2、输入 chmod 777 (路径|指=文件)
    eg:
    3、Ok,文件可以读取了。


    改变dos 的编码格式: chcp 936 改变成gbk编码方式, chcp 65001 改为 utf-8







    文章部分内容摘自网络和图书,如有侵权,请联系我。
  • 相关阅读:
    [CF786B] Legacy
    [CF833B] The Bakery
    [JSOI2008] 最小生成树计数
    [SDOI2010] 外星千足虫
    [POJ1830] 开关问题
    [Luogu1365] WJMZBMR打osu! / Easy
    [Noip2016] 换教室
    [NOI2002] 荒岛野人
    [计蒜之道复赛 2018] 贝壳找房计数比赛
    [SDOI2014] 旅行
  • 原文地址:https://www.cnblogs.com/-Tiger/p/7137107.html
Copyright © 2011-2022 走看看