SQLiteDatabase类:

一.使用sql语句操作数据库

SQLiteDatabase db = openOrCreateDatabase("database.db", MODE_PRIVATE,null);// (数据库名称,权限,数据工厂)

db.execSQL("create table if not exists usertb(_id integer primary key autoincrement,name text not null,age integer not null,sex text not null)");// 执行任何SQL语句
db.execSQL("insert into usertb(name,sex,age)values('张三','女',18)");//插入数据

Cursor:游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获取列值方法getString()等常用方法:
-getCount()总记录条数
-isFirst()判断是否第一条记录
-isLast()判断是否最后一条记录
-moveToFirst()移动到第一条记录
-moveToLast()移动到最后一条记录
-move(int offset)移动到指定记录
-moveToNext()移动到下一条记录
-moveToprevious()移动到上一条记录
-getColumnIndexOrThrow(String columnName)据列名称获取列索引
-getInt(int columnIndex)获取指定列索引的int类型值
-getString(int columnIndex)获取指定列索引的String类型值

Cursor c=db.rawQuery(“select*from table“,null);
if(c!=null){
  While(c.moveToNext()){}
}

package com.example.sqlitetest1;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //每个程序都有自己的数据库,默认情况下互不干扰
//创建数据库并打开
SQLiteDatabase db=openOrCreateDatabase("usertb",MODE_PRIVATE,null);
String sqlcom="create table if not exists usertb(_id integer primary key autoincrement,name text,age integer,sex text)";
//执行sql语句
db.execSQL(sqlcom);
//向数据库中插入数据
db.execSQL("insert into usertb(name,age,sex)values('张三',18,'女')");
db.execSQL("insert into usertb(name,age,sex)values('张三',20,'男')");
db.execSQL("insert into usertb(name,age,sex)values('李四',21,'女')");
//查询
Cursor cs=db.rawQuery("select * from usertb",null);
if(cs!=null){
while (cs.moveToNext()){
Log.i("info","id: "+cs.getString(cs.getColumnIndex("_id")));
Log.i("info","name: "+cs.getString(cs.getColumnIndex("name")));
Log.i("info","age: "+cs.getString(cs.getColumnIndex("age")));
Log.i("info","sex: "+cs.getString(cs.getColumnIndex("sex")));
Log.i("info","--------------------------------------------");
}
cs.close();
}
db.close();
}
}

二.使用内置函数操作数据库

1. ContentValues类
   存储一组可以被ContentResolver处理的值,可以理解为它的对象存储了多个键值对
2. 使用ContentValues和内置函数插入数据库
   ContentValues values = new ContentValues();
   values.put("name", "zhang76");
   values.put("sex", "man");
   values.put("age", 26);
   sqLiteDatabase.insert("studentdb", null, values);
   可以将values清空,并重新存值。
   values.clear();
   values.put("name", "张三");
   values.put("sex", "man");
   values.put("age", 27);
   sqLiteDatabase.insert("studentdb", null, values);
3. 更新和删除
   sqLiteDatabase.update("stutb",values,"_id">?,new String[]{"1"});//将全部ID>1的人的性别改成女;
   sqLiteDatabase.delete("stutb","name like ?",new String[]{"%三%"});//删除所有名字中带有"三"的人
4. 通过Cursor类的getColumnNames()可以得到所有的列名
   if(cursors!=null){

String[] columnNames = cursor.getColumnNames();
    while (cursor.moveToNext()) { //moveToNext()可以移动到下一行
       for(String columnName:columnNames) {
       Log.i(TAG, cursor.getString(cursor.getColumnIndex(columnName)));
       }
    }
    cursor.close();//关闭游标
}
sqLiteDatabase.close();

package com.example.sqlitetest2;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity {
private static final String TABLENAME="usertb"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); SQLiteDatabase db2=openOrCreateDatabase("db",MODE_PRIVATE,null);
String sqlcom="create table if not exists "+TABLENAME+"(_id integer primary key autoincrement,name text,age integer,sex text)";
db2.execSQL(sqlcom); ContentValues values=new ContentValues();
values.put("name","张三");
values.put("age",21);
values.put("sex","男");
db2.insert(TABLENAME,null,values);
values.clear(); values.put("name","李四");
values.put("age",24);
values.put("sex","女");
db2.insert(TABLENAME,null,values);
values.clear(); values.put("name","王五");
values.put("age",19);
values.put("sex","男");
db2.insert(TABLENAME,null,values);
values.clear(); values.put("name","张四");
values.put("age",19);
values.put("sex","女");
db2.insert(TABLENAME,null,values);
values.clear(); values.put("sex","女");
//将id>3的人的性别改为女
db2.update(TABLENAME,values,"_id>?",new String[]{"3"});
//删除名字中带有“三”的人
db2.delete(TABLENAME,"name like ?",new String[]{"%三%"}); //查询
Cursor cs=db2.query(TABLENAME,null,"_id>?",new String[]{"0"},null,null,"name");//查出id>0的值,即所有的
if(cs!=null){
String[] columnNames=cs.getColumnNames();//查询出所有的字段
while (cs.moveToNext()){
for (String columnName:columnNames) {
Log.i("info", cs.getString(cs.getColumnIndex(columnName)));
}
}
cs.close();
}
db2.close();
}
}

SQLiteOpenHelper类:

SQLiteOpenHelper帮助类,用于对数据库进行创建和升级。

实现两个方法:onCreate()方法用来实现创建数据库、onUpgrade()用来实现升级数据库

@Override//首次创建数据库的时候调用,一般用来建库/建表的操作
public void onCreate(SQLiteDatabase db) {
    // TODO 自动生成的方法存根
    db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");
    db.execSQL("insert into stutb(name,sex,age)values('张三','女',18)");
}

@Override//当数据库的版本发生变化的时候会自动执行
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO 自动生成的方法存根
}

Demo:

MyOpenHelper.class:

package com.example.sqlitetest3;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; /**
* Created by xch on 2016/9/19.
*/
public class MyOpenHelper extends SQLiteOpenHelper{
private static final String TABLENAME="stu"; public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} @Override//首次创建数据库时调用,一般用来创建数据库 创建表
public void onCreate(SQLiteDatabase db) {
String sqlcom="create table if not exists "+TABLENAME+"(_id integer primary key autoincrement,name text,age integer,sex text)";
db.execSQL(sqlcom);
db.execSQL("insert into "+TABLENAME+"(name,sex,age)values('yang','男',20)");
} @Override//版本更新时调用
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}

MainActivity.class

package com.example.sqlitetest3;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); MyOpenHelper helper=new MyOpenHelper(MainActivity.this,"stu",null,1);
helper.getReadableDatabase();//获取一个只读的数据库,不能写入,不能更新,只能查询
SQLiteDatabase database=helper.getWritableDatabase();
Cursor cs=database.rawQuery("select * from stu",null);
if(cs!=null){
String[] colmnNames=cs.getColumnNames();
while(cs.moveToNext()){
for (String cln:colmnNames ) {
Log.i("info","ColumnNames:"+cs.getString(cs.getColumnIndex(cln)));
}
}
cs.close();
}
database.close();
}
}

Android学习总结——SQLite的更多相关文章

  1. 七、Android学习第六天——SQLite与文件下载(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 七.Android学习第六天——SQLite与文件下载 SQLite SQ ...

  2. Android学习笔记--Sqlite数据库

    前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个 ...

  3. Android学习之SQLite学习

    花了2天时间,系统学习了下Android开发过程中使用的轻量级数据库SQLite的使用. 并掌握其增,删,该,查的基本数据库操作. 首先要使用SQLite数据库,须要通过Android系统提供的SQL ...

  4. Android学习笔记——SQLite

    该工程的功能是实现关于数据库的操作,即creat.update.insert.query.delete 调试的时候请用模拟器,用真机调试的时候进入cmd-adb shell,再进入cd data/da ...

  5. (转)Android学习笔记---SQLite介绍,以及使用Sqlite,进行数据库的创建,完成数据添删改查的理解

    原文:http://blog.csdn.net/lidew521/article/details/8655229 1.SQLite介绍:最大特点是,无数据类型;除了可以使用文件或SharedPrefe ...

  6. Android学习之sqlite与listview

    在android系统中使用的是sqlite数据库,前面的简易登录系统已经讲述了数据库的应用.本例的重点是实现数据库与listview的绑定.demo的数据是将个人的信息绑定到listview中,并存在 ...

  7. Android学习之SQLite基础

    1.新建MySQLiteHelper类继承自SQLiteOpenHelper public class MySQLiteHelper extends SQLiteOpenHelper { privat ...

  8. Android 学习笔记之如何使用SQLite数据库来保存数据...

    PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite:   ...

  9. Android中的SQLite使用学习

    Android中的SQLite使用学习 SQLite是非常流行的嵌入式关系型数据库,轻载, 速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是 ...

随机推荐

  1. java保留有效数字

    DecimalFormat df=DecimalFormat("######0.0") double d = df.format(xx): 保留一位就是"######0. ...

  2. Javascript常用正则表达式

    一.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ ...

  3. Android将第三方jar打包进apk

    转自:http://blog.csdn.net/liushaogeng/article/details/6641704 使用第三方jar包 除了我以下介绍的方法,别的方法我基本上都试验过,均会出现编译 ...

  4. Git的一些用法(建立新的branch)

    建立新的branch和查看全部的branch(kk的代码是基于现有的branch) 切换到branch kk: 当然我们也能够在android studio里操作: 注意切换的时候代码会丢失,必须先c ...

  5. jquery更新后怎样在一个站点中使用两个版本号的jQuery

    公司眼下的项目中的右側导航菜单用到了bootstrap(v3.2.0)的affix.js(Affix插件)与scrospy.js(滚动监听)插件, 须要用到版本号>= 1.9.0的jquery, ...

  6. 7. 稀疏表示之OMP,SOMP算法及openCV实现

    一.前言 稀疏表示是自上世纪90年代开始,从人眼的视觉感受野获得启示,逐渐被人们所研究.现在已经发展为一种重要的信息表示方法.所谓稀疏表示是指,一个信号在过完备字典中,可以由少数个原子线性表达, 其数 ...

  7. .NET基础拾遗(1)类型语法基础和内存管理基础2

    二.内存管理和垃圾回收 2.1 .NET中栈和堆 每一个.NET应用程序最终都会运行在一个OS进程中,假设这个OS的传统的32位系统,那么每个.NET应用程序都可以拥有一个4GB的虚拟内存..NET会 ...

  8. scrollview不能滚动

    1. 图片视图上不能直接滚动,需要设置交互属性为YES _contentView = [[UIImageView alloc]initWithFrame:CGRectMake(0, _headerVi ...

  9. uva11630 or hdu2987 Cyclic antimonotonic permutations(构造水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Cyclic antimonotonic permutations Time Li ...

  10. http://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p01_testing_output_sent_to_stdout.html

    http://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p01_testing_output_sent_to_stdout.html draw. ...