SQLite

Posted 学习使我快乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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







以上是关于SQLite的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段

SQLite 片段函数实现不会在 TextView 中将文本格式化为 HTML

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段

Android 逆向使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )(代码片段

如果我想从另一个片段中添加书签,为啥我的书签单词没有保存到 sqlite 数据库?