Android课堂笔记—SQLite3和ContentProvider
来源:互联网 发布:软件设计师报名入口 编辑:程序博客网 时间:2024/06/05 06:16
SQLite3
SQLite3是一个轻量级的数据库,Android中已经内置
接下来我们通过命令行来学习SQLite3的命令,之后在Android中使用会更容易理解
注:以下命令均在linux下yu
1.创建数据库
在命令行中创建数据库
sqlite3 test.db
2.创建表
关键词CREATE TABLE,后面接表名,表名后面的括号内声明表的列名以其属性和约束
CREATE TABLE table_name(column_name1 INTEGER NOT NULL,column_name2 TEXT CHAR(50),column_name3 REAL );
属性(数据类型):INTEGER,TEXT,REAL,BLOB
约束:NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY,CHECK
3.删除表
DROP TABLE table_name;
4.插入语句
INSERT INTO table_name(column_name1,column_name2,column_name3) VALUES(value1,value2,value3);
table_name后面跟的是需要插入数据的列名,当每一列都需要插入时可以省略
VALUES 每一列对应的值
5.获取数据
SELECT column_name1, column_name2, column_name3 FROM table_name;
获取表的所有内容:SELECT × FROM table_name;
6.WHERE子句
用于SELECT语句时,限定输出内容
SELECT column_name1, column_name2, column_name3 FROM table_name WHERE column_name1>10;
WHERE后面可以跟比较运算符和逻辑运算符,用AND 或OR可以在WHERE后面使用多个条件
7.更新数据
UPDATE table_name SET column_name1=value1,column_name2=value2 WHERE column_name1=1;
当没有WHERE限定时每一行的数据都会更新
8.删除数据
DELETE FROM table_name WHERE column_name1=1;
当没有WHERE限定时会删除所有数据,但是不会删除表
9. ORDER BY
SELECT * FROM table_name ORDER BY column_name2 ASC;
ASC 升序,DESC降序
10.命令行相关命令
以下是在命令提示符下的sqlite命令,在命令行下练习时很实用
.quit .exit退出命令行
.databases 查询当前数据库
.show 查看设置
.header 设置显示列名
.mode 设置显示模式/column/list
.tables查看当前的所有表
.schema 表名 查看表中的信息
ContentProvider用法
1.创建数据库
继承SQLiteOpenHelper类,重写OnCreate()方法创建表
public class MySQLiteHelper extends SQLiteOpenHelper { private static String DATABASE_NAME="user.db"; public MySQLiteHelper(Context context) { //DATABASE_NAME是数据库名,创建以此为名的数据库 //null表示使用默认的Cursor super(context, DATABASE_NAME, null, 1); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库表 db.execSQL("CREATE TABLE "+ UserInfo.USER_TABLE+"(" +UserInfo.USER_ID+" INTEGER PRIMARY KEY," +UserInfo.USER_NAME+" TEXT UNIQUE NOT NULL," +UserInfo.USER_PASSWORD+" TEXT NOT NULL" +");"); }2.创建一个类用来表示数据库的表名、列名以及使用ContentProvider时需要使用的URL
public class UserInfo { //数据库的表名 public static final String USER_TABLE = "user"; //表的三个列名 public static final String USER_ID = "id"; public static final String USER_NAME = "name"; public static final String USER_PASSWORD = "password"; //使用ContentProvider时需要使用的URI、URL public static final String AUTHORITIES = "com.example.chao.provider"; public static final String SCHEME = "content://"; public static final String USER_URL = SCHEME + AUTHORITIES + "/" + USER_TABLE; public static final Uri USER_URI = Uri.parse(USER_URL);}3.创建类继承ContentProvider类,并重写一些方法
静态语句块UriMatcher用来匹配URL
static { sUriMatcher=new UriMatcher(UriMatcher.NO_MATCH); sUriMatcher.addURI(UserInfo.AUTHORITIES,UserInfo.USER_TABLE,TABLE); sUriMatcher.addURI(UserInfo.AUTHORITIES,UserInfo.USER_TABLE+"/#",ID);}重写onCreate()方法新建MySQLiteHelper,query()查询数据库并通知Cursor更新
public SQLiteDatabase db;@Overridepublic boolean onCreate() { sqLiteHelper=new MySQLiteHelper(getContext()); return false;}@Nullable@Overridepublic Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { db = sqLiteHelper.getWritableDatabase(); //用来匹配url返回相应的约束where String where=getWhere(uri,selection); Cursor cursor=db.query(UserInfo.USER_TABLE,projection,where,selectionArgs,null,null,sortOrder); try { cursor.setNotificationUri(getContext().getContentResolver(),uri); }catch (NullPointerException e){ e.printStackTrace(); } return cursor;
重写insert(),update()以及delete()方法
@Nullable@Overridepublic Uri insert(Uri uri, ContentValues values) { db=sqLiteHelper.getWritableDatabase(); if(sUriMatcher.match(uri)!=TABLE){ throw new IllegalArgumentException("unknown uri"+uri); } long id=db.insert(UserInfo.USER_TABLE,null,values); if(id<0){ return null; } Uri u=ContentUris.withAppendedId(uri,id); getContext().getContentResolver().notifyChange(u,null); return u;}@Overridepublic int delete(Uri uri, String selection, String[] selectionArgs) { db=sqLiteHelper.getWritableDatabase(); int number=0; String where = getWhere(uri, selection); number=db.delete(UserInfo.USER_TABLE,where,selectionArgs); getContext().getContentResolver().notifyChange(uri,null); return number;}@Overridepublic int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { db=sqLiteHelper.getWritableDatabase(); int number; String where=getWhere(uri,selection); number=db.update(UserInfo.USER_TABLE,values,where,selectionArgs); getContext().getContentResolver().notifyChange(uri,null); return number;}在manifest中注册ContentProvider
<provider android:authorities="com.example.chao.provider" android:name=".provider.UserInfoProvider"></provider>4.使用ContentProvider
添加数据
ContentResolver contentResolver = getActivity().getContentResolver();ContentValues values = new ContentValues();values.put(UserInfo.USER_NAME, name);values.put(UserInfo.USER_PASSWORD, password);Uri uri = contentResolver.insert(UserInfo.USER_URI, values);查询数据库并从Cursor中得到数据
public String queryUser(String name){ ContentResolver contentResolver=getActivity().getContentResolver(); String[] whereArg={name}; String password=""; //查询数据库 Cursor cursor=contentResolver.query(UserInfo.USER_URI,null, UserInfo.USER_NAME+"=?",whereArg,null); //得到cursor中的数据 if(cursor!=null){ if(cursor.moveToFirst()){ password=cursor.getString(cursor.getColumnIndex(UserInfo.USER_PASSWORD)); Log.d(TAG,"PASSWORD: "+password); } cursor.close(); }else{ password=null; } return password;}
- Android课堂笔记—SQLite3和ContentProvider
- Android课堂笔记——ToggleButton和Switch
- Android笔记----Android手势和ContentProvider
- Android 课堂笔记——shape
- Android课堂笔记——selector
- Android课堂笔记——dialog对话框
- Android课堂笔记——ViewPager
- Android课堂笔记——Menu
- day01:Android课堂笔记
- android学习笔记---contentProvider
- Android学习笔记-ContentProvider
- Android学习笔记ContentProvider
- Android学习笔记ContentProvider
- Android学习笔记ContentProvider
- Android课堂笔记——LinearLayout和RelativeLayout常用的两种布局方式
- Android——ContentProvider和Uri详解
- Android ContentProvider和getContentResolver
- Android ContentProvider和getContentResolver
- V第五章 数字
- Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
- IE内核浏览器打不开网页,其他浏览器可以
- 三星NOTE7,N9300,N930F,N930FD解谷歌锁 正在检查网络连接FRP ON方法
- poj 2826 An Easy Problem?!(线段相交、模拟)
- Android课堂笔记—SQLite3和ContentProvider
- POJ 1236 Network of Schools 强连通分支 .
- 第3次编程作业
- 结构体成员初始化
- Android通过代码来绘制UI界面
- JavaWeb四大域的总结
- JVM中的直接引用和符号引用
- codeforces 700C. Break Up 枚举
- 65. Valid Number