Android学习总结——SQLite

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();
    }
}

时间: 2024-10-13 07:31:24

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

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

(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 七.Android学习第六天——SQLite与文件下载 SQLite SQLite是Android内嵌的一个非常小的关系型数据库. 总结:当我们操作 在学习SQLite当中,遇到两个问题: (一)如果我们在搭建Android环境成功后,在命令行中输入adb后没有反应,可以按一下操作来做: 第一步:将platform-tools的目录加入path环境变量的配置中: 第二步:

Android学习之sqlite与listview

在android系统中使用的是sqlite数据库,前面的简易登录系统已经讲述了数据库的应用.本例的重点是实现数据库与listview的绑定.demo的数据是将个人的信息绑定到listview中,并存在sqlite. 1.person类 1 public class PersonInfo 2 { 3 public PersonInfo() 4 { 5 6 } 7 private String name; 8 private int age; 9 public void setNmae(String

Android学习笔记--Sqlite数据库

前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个轻量型的数据库SQLite数据库,使得本地的数据持久化有了一个质的飞跃. 通过前两天上课听老师讲解,和课下自己看书总结,想在博客上把自己对于SQLite数据库的理解做一下总结,也是方便之后的复习.Android为了让我们能够更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,这个

Android学习笔记-SQLite的使用

界面文件activity_main.xml     <Button          android:id="@+id/createButton"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:layout_below="@id/hello_world"    

Android学习笔记——SQLite

该工程的功能是实现关于数据库的操作,即creat.update.insert.query.delete 调试的时候请用模拟器,用真机调试的时候进入cmd-adb shell,再进入cd data/data的时候会显示permission denied 以下的代码是MainActivity.java中的代码 package com.example.sqlite; import com.example.sqlite.db.DataBaseHelper; import android.app.Acti

android学习——数据库SQLite的基本操作

 如果想要在android中使用数据库,使用SQLite是一个非常好的选择,因为它是android内置的数据库,提供了很多支持. 数据库的使用无非就是CRUD,也就是"Create,Read,Update,Delete"这四个基本操作. 一.Create Create就是创建表,而要想创建表,首先必须要创建或者打开数据库. 有两种方式可以做到这点: 1.手动创建或者打开数据库 SQLiteDatabase database = openOrCreateDatabase("St

Android学习之SQLite基础

1.新建MySQLiteHelper类继承自SQLiteOpenHelper public class MySQLiteHelper extends SQLiteOpenHelper { private Context context; public MySQLiteHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); /

Android学习笔记(四一):SQLite的使用

SQLite是非常流行的嵌入式关系型数据库,轻载,速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是全集的SQLite.SQLite提供SQL接口,和一般的数据库一样.但是Android的API不采用JDBC,JDBC消耗太多的资源. SQLite支持绝大部分SQL-92标准,不支持:FOREIGN KEY constraints, nested transactions, RIGHT OUTER JOIN, FULL OUTER JOI

Android学习笔记(四二):SQLite、ListView、ContextMenu

继续上一个例子,结合ListView中对SQLite进行操作. 通过CursorAdapter在ListView中的数据呈现 在上一个例子中,我们可以对SQLite中的数据库进行增删改查,将数据读到游标Cursor中,然后一一读出.在Android中可以通过CursorAdapter直接将数据映射到ListView中,如下处理: public class Chapter22Test1 extends ListActivity{    private SQLiteDatabase  db = nu