SQLite——简单使用
来源:互联网 发布:红蓝3d mac播放器 编辑:程序博客网 时间:2024/05/19 00:17
一、Sqlite的基础类型
二、SQLite提供的约束条件
create students (
三、外键的组成与使用
四、SQL语句的使用
①、insert语句:
insert into students(name,age) values("哈",13);
②、select语句:
1、 求个数:count
2、 求总和:sum
3、 求最大值:max
4、 求最小值:min
5、 求平均值:avg
6、字符串转化成大写:Upper()
7.、字符串转化成小写:Lower()
8、绝对值:abs()
从from 表名 开始
1、多表连接
第一种方式:(较少使用,一般使用内连接代替)
select * from classes,students where students.cls_id = classes.id
第二种方式(内连接):
语法:from 表名 inner join 表名 on 连接的条件
select * from student inner join classes on students.cls_id = classes.cls_id
第三种方式(左外连接:假设以cls_id连接,如果表一含有表二不存在的cls_id则仍然显示,并以null代替数据)
语法:from 表名 left outer join 表名 on 连接的条件。
注:SQLite只支持左外连接,和内连接。不支持右外连接。
从where 语句开始
常用操作符:
+ 、-、*、 /、> 、<、 >=、 <= 、!=等,跟平常的运算符是一致的
where cls_id < 3
常用逻辑操作符:
and(且) ,or(或)、not(非)
where cls_id between 1 and 3 表示在1~3内
where cls_id > 1 and cls_id < 3
模糊查询:
where name like "t%";//表示以t开头,%表示内容随意
where name like "%t"//表示以t结尾的字符串
从group by语句开始
作用:将数据按照某个字段分组,相同的字段内容为一组
group by cls_id //表示 以cls_id分组。
注:因为group by之后就变成了聚合数据,所以搜索的时候也只能使用聚合数据表示。
也就是不能select name from students group by cls_id,显示name字段,以为name是单个数据,不是聚合的数据。
cls_id已经被设置成了单个数据,所以还可以显示。
从having语句开始
作用:筛选group by之后的表的内容,所以是配合group by使用的。
having cls_id = 2
从order by 开始
作用:设置字段的排列顺序
order by class_id desc
标识符:
desc:大到小 asc:小到大
默认以asc排序
从limit语句开始
作用:设定数据显示的开始位置和显示的个数
limit 5 offset 2 从开始的第二位获取5条数据
③、Update语句
格式:update 表名 set 给字段赋值 where 判断选择哪条数据作为修改对象。
举例:
update students set name = "王五" where name = "张三"
④、delete语句
格式:delete from 表名 where 删除的数据的条件
举例:
delete from studends where cls_id = 1;
五、修改表
六、数据库在Android中的使用
public class StuInfoDbHelper extends SQLiteOpenHelper { //数据库名 private static final String DB_NAME = "stuinfo.db"; //版本号 private static final int version = 1; public StuInfoDbHelper(Context context) { super(context, DB_NAME, null, version); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}②、创建students与classes表
public class StuInfoDbHelper extends SQLiteOpenHelper { //命名需要创建的表名,格式为 表名+TABLE,设为公共成员变量 public static final String STUDENTS_TABLE = "students"; public static final String CLASSES_TABLE = "classes"; //命名表的字段名,格式为 表名(可缩写)+字段名+COL public static final String STU_ID_COL = "id"; public static final String STU_NAME_COL = "name"; public static final String STU_CLS_ID_COL = "cls_id"; public static final String CLS_CLS_ID_COL = "cls_id"; public static final String CLS_STU_NUM_COL = "stu_num"; //数据库名 private static final String DB_NAME = "stuinfo.db"; //版本号 private static final int version = 1; //创建表 private static final String CREATE_CLASSES_TABLE = "CREATE TABLE "+ CLASSES_TABLE+" ("+CLS_CLS_ID_COL+" integer primary key,"+ CLS_STU_NUM_COL+" integer not null);"; private static final String CREATE_STUDENT_TABLE = "CREATE TABLE "+ STUDENTS_TABLE+" ("+STU_ID_COL+" integer primary key increment,"+ STU_NAME_COL+" text not null,"+STU_CLS_ID_COL+" integer not null"+ "foreign key(cls_id) reference classes(cls_id));"; public StuInfoDbHelper(Context context) { super(context, DB_NAME, null, version); } @Override public void onCreate(SQLiteDatabase db) { //因为Students表中使用了外键,所以必须先声明 db.execSQL("PRAGMA foreign_keys = ON"); db.execSQL(CREATE_CLASSES_TABLE); db.execSQL(CREATE_STUDENT_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}这样一个数据库就创建完毕了,那么怎么使用四大操作语句呢。
使用删除语句
delete(String table,String whereClause,String[] whereArgs)
table:表名
whereClause:删除的条件。
whereArgs:当whereClause语句中使用了占位符(?)的时候,该参数表示,占位符的具体数值
举例:
delete(tableName,"cls_id > ? and cls_id < ?",new String[]{"1","3"})
完整的就是:where cls_id >1 and cks_id <3
使用更新语句
updateWidthOnConflict(String table,ContentValue values,String whereClause,String[] whereArgs,int conflictAlgoritm)
这个就跟刚才语句的方式一样。
一般更新语句:
update(String table,ContentValue values,String whereClause,String[] whereArgs)
使用查询语句:
Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderby,String limit)
columns:表示需要显示的字段
selection:表示where语句
selectionArgs:表示where语句的占位符。
其他参数跟普通的SQL语句一样了
那么如何使用返回的参数Cursor呢。
首先我们要知道Cursor的结构:
根据图,我们可以得知,cursor初始化光标未指向数据,然后通过特定方法获取字段的值,之后通过方法移动光标。
获取字段的值的方法:
getString(int index):index表示字段所在的位置索引。
如果不知道字段所在的位置,则使用
getColumnIndex(String columnName):根据字段名,查找字段所在的位置索引。
public class MainActivity extends AppCompatActivity { //获取数据库 private SQLiteDatabase mDataBase; //初始化View private Button mBtnQuery; private TextView mTvShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDataBase = new StuInfoDbHelper(this).getWritableDatabase(); initView(); insertData(); } private void initView(){ mBtnQuery = (Button)findViewById(R.id.main_btn_query); mTvShow = (TextView) findViewById(R.id.main_tv_showData); mBtnQuery.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTvShow.setText(queryStu()); } }); } //插入数据 private void insertData(){ //插入Classes表 //第一种方式 ContentValues values1 = new ContentValues(); values1.put(StuInfoDbHelper.CLS_CLS_ID_COL,1); values1.put(StuInfoDbHelper.CLS_STU_NUM_COL,30); mDataBase.insert(StuInfoDbHelper.CLASSES_TABLE,null,values1); //普通的方式 mDataBase.execSQL("insert into "+StuInfoDbHelper.CLASSES_TABLE+ " values(2,40);"); mDataBase.execSQL("insert into "+StuInfoDbHelper.CLASSES_TABLE+ " values(3,30);"); //插入Stu表的数据 mDataBase.execSQL("insert into "+StuInfoDbHelper.STUDENTS_TABLE+ "(name,cls_id)"+ " values('张三',1)"); mDataBase.execSQL("insert into "+StuInfoDbHelper.STUDENTS_TABLE+ "(name,cls_id)"+ " values('李四',2)"); mDataBase.execSQL("insert into "+StuInfoDbHelper.STUDENTS_TABLE+ "(name,cls_id)"+ " values('王五',3)"); } private String queryStu(){ //查询 Cursor cursor = mDataBase.query(StuInfoDbHelper.STUDENTS_TABLE,new String[]{ StuInfoDbHelper.STU_ID_COL,StuInfoDbHelper.STU_NAME_COL,StuInfoDbHelper.STU_CLS_ID_COL },null,null,null,null,null); StringBuilder sb = new StringBuilder(); //循环输出 while (cursor.moveToNext()){ sb.append(cursor.getInt(0)); sb.append(cursor.getString(1)); sb.append(cursor.getInt(2)+"\n"); } cursor.close();//记得要关闭光标 return sb.toString(); }}效果
七、使用AS提供的Sqlite3来查询数据
八、仿AsyncTask制作数据库的加载器
public abstract class DbCommand<T> { //创建线程池,排队执行 private static final ExecutorService THREAD_POOL = Executors.newSingleThreadExecutor(); //规定在主线程才能使用该方法(同AsyncTask) private final Handler mHandler = new Handler(); public final void execute(){ THREAD_POOL.execute(new Runnable() { @Override public void run() { //获取异步执行的数据 final T data = doInBackground(); //用Handle切换执行环境 mHandler.post(new Runnable() { @Override public void run() { onPostExecute(data); } }); } }); } public abstract T doInBackground(); public abstract void onPostExecute(T data);}
- SQLite——简单使用
- 【SQLite】SQLite的简单使用
- Android学习第16课—SQLite的简单使用
- 安卓中SQLite的最简单使用(—)
- SQLite的简单使用
- sqlite 简单使用
- ios简单sqlite使用
- ios简单sqlite使用
- ios简单sqlite使用
- SQLITE简单使用
- ios简单sqlite使用
- iOS-简单sqlite使用
- ios简单sqlite使用
- SQLITE简单使用
- sqlite 简单使用
- sqlite简单使用
- android Sqlite简单使用
- SQLite、Cursor简单使用
- Java(输入/输出流的划分)
- 08 BaseAdapter 和ListView总结
- 【华为OJ】进制转换
- Android apk如何防止反编译和如何快速有效的反编译别人的Apk
- 为什么要将连续特征离散化
- SQLite——简单使用
- 167. Two Sum II - Input array is sorted [medium] (Python)
- AsyncTask异步加载以及Proxy代理模式访问网络数据
- React-Native_02:语法篇
- node.js 初体验
- MacBook Pro下开发常用快捷键
- 【面试题44】扑克牌顺子
- Android消息推送完美方案
- PopupWindow