SQLite
简介: SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,
通常只需要几百KB的内存就足够了,所以特别适合在移动设备上使用。
SQLite支持标准的SQL语法。
SQLite中的数据类型:
integer 整型 real 浮点型
text 文本类型 blob 二进制类型
Android 中实际上是不区分数据类型的,都是 String
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();Toast.makeText(this,"Ok", Toast.LENGTH_SHORT).show();
db.close ();
<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");
//返回值代表插入新行的IDint 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命令查看该目录中文件。
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161020019-747307983.png)
5、接着输入 sqlite3 在加上数据库名称 ,(在此期间可能出现没有权限打开这个文件的错误,解决方式请看最下方)
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161020300-797810226.png)
6、 通过 .table 命令查看数据库素有表名称
通过 .schema 命令查看建表语句
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161020550-1798834840.png)
7、输入你想执行的 SQL 语句 (最后记得加 ;)
eg:
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161021315-901489277.png)
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161020862-1039040201.png)
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161021315-901489277.png)
8、通过 .quit 退出数据库编辑
问题解决:
没有权限打开文件问题:
1、进入控制台,通过 adb shell 进入设备控制台再输入 su 回车进入root权限模式。
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161021940-199135335.png)
2、输入 chmod 777 (路径|指=文件)
eg:
![](https://images2015.cnblogs.com/blog/1116718/201707/1116718-20170708161022565-1942769162.png)
3、Ok,文件可以读取了。
改变dos 的编码格式: chcp 936 改变成gbk编码方式, chcp 65001 改为 utf-8
文章部分内容摘自网络和图书,如有侵权,请联系我。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步