Android Sqlite

来源:互联网 发布:九章算法 系统设计 编辑:程序博客网 时间:2024/06/01 08:03
Android内建了开放源码的嵌入式数据库引擎SQLite
1.创建数据库 openOrCreateDatabase()

创建及打开数据库,若数据库不存在,则会先创建再打开

SQLiteDatabase db; //数据库对象

db = openOrCreateDatabase(db_name, //数据库名称
                Context.MODE_PRIVATE,//创建数据库文件的模式,表示仅供自已使用的数据库
                null);//返回查询结果类,一般为空
openOrCreateDatabase()执行成功,会返回代表数据库的SQLiteDatabase对象
2.创建表CREATE TABLE
String createTable = "CREATE TABLE IF NOT EXISTS "+
                tb_name +  //数据表名
                "(_id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "name VARCHAR(32)," +
                "phone VARCHAR(16)," +
                "email VARCHAR(64))";
db.execSQL(createTable);//执行语句创建表
3.插入数据insert()
创建表后,可使用insert()方法新增数据,配合ContentValues对象使用
insertData("张三","13526697845","zs@126.com");

 private void insertData(String name, String phone, String email){
        ContentValues cv = new ContentValues(3); //创建含3个字段的ContentValues对象
        cv.put("name",name);//新增的数据put()方法存到ContentValues对象中
        cv.put("phone",phone);
        cv.put("email",email);
        db.insert(tb_name,null, cv);//将内容写入表,并新增一个记录
    }

4.查询数据rawQuery()
用select语句进行数据查询
使用Cursor对象获取查询结果

rawQuery("SELECT * FROM tb_name",null);//返回tb_name数据表的所有记录
第一个参数为SELECT语句,第二个参数为null
rawQuery()返回的查询结果为Cursor类的对象.
moveToFirst()移到第一个记录
moveToLast()移到最后一个记录
moveToNext()移到下一个记录
moveToPrevious()移到前一个记录

   Cursor cr = db.rawQuery("SELECT * FROM "+tb_name, null); //执行查询
        if(cr.moveToFirst()){//移到第1项数据,若有数据才继续
            String str="总共有"+cr.getCount()+"项数据\n";  //getCount()方法,返回值就是数据个数,若返回0,则表示没有数据
            do{
                str +="name:"+cr.getString(1)+"\n";//读取name,0为id,从1开始获取
                str +="phone:"+cr.getString(2)+"\n";
                str +="email:"+cr.getString(3)+"\n";

            }while(cr.moveToNext());//有下一项就继续循环
            Log.i("db",str);
        }

cr.getDouble(索引)  //读取Double数据
cr.getFloat()
cr.getInt()
cr.getLong()
cr.getShort()
cr.getString()
若想用字段名读取数据,须先用getColumnIndex()方法获取字段索引
cr.getString(getColumnIndex("name"));

5.修改数据db.update
  private void updateData(String name, String phone, String email, int id){
        ContentValues cv = new ContentValues(3);
        cv.put("name",name);
        cv.put("phone",phone);
        cv.put("email",email);
        db.update(tb_name,cv,"_id="+id,null);
    }

db.update(tb_name,cv,"_id="+id,null);
参数1:要更新的数据表
参数2:内含新数据的ContentValues对象
参数3:更新的条件
参数4:为null

6.删除问题
 db.delete(tb_name, "_id="+2,null);
参数1:要删除的表名
参数2:条件,指定删除哪条记录
参数3:null

-----------------------------------------------------------------------------------

public class MainActivity extends AppCompatActivity {    static final String db_name="StudentDB";    static final String tb_name="student";    SQLiteDatabase db; //数据库对象    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //1)打开或创建数据库        db = openOrCreateDatabase(db_name,                Context.MODE_PRIVATE,                null);        //2)创建表        String createTable = "CREATE TABLE IF NOT EXISTS "+                tb_name +                "(_id INTEGER PRIMARY KEY AUTOINCREMENT," +                "name VARCHAR(32)," +                "phone VARCHAR(16)," +                "email VARCHAR(64))";        db.execSQL(createTable);        //3)用insert()方法和ContentValues对象新增数据        insertData("张三","13526697845","zs@126.com");        insertData("李四","13526648945","lishi@126.com");        insertData("王五","13526692685","wangwu@126.com");        //4)查询数据Cursor rawQuery()        queryData();        //5)修改数据db.update();        updateData("张三","123","zs@136.com",1);        queryData();        //6)删除        db.delete(tb_name, "_id="+2,null);        queryData();        //7)关闭数据库        db.close();    }    private void insertData(String name, String phone, String email){        ContentValues cv = new ContentValues(3);        cv.put("name",name);        cv.put("phone",phone);        cv.put("email",email);        db.insert(tb_name,null, cv);    }    private void updateData(String name, String phone, String email, int id){        ContentValues cv = new ContentValues(3);        cv.put("name",name);        cv.put("phone",phone);        cv.put("email",email);        db.update(tb_name,cv,"_id="+id,null);    }    private void queryData(){        Cursor cr = db.rawQuery("SELECT * FROM "+tb_name,                null);        if(cr.moveToFirst()){//移到第1项数据,若有数据才继续            String str="总共有"+cr.getCount()+"项数据\n";            do{                str +="name:"+cr.getString(1)+"\n";                str +="phone:"+cr.getString(2)+"\n";                str +="email:"+cr.getString(3)+"\n";            }while(cr.moveToNext());//有下一项就继续循环            Log.i("db",str);        }    }}------------------------------------------------------------------------com.xxx.sqlitetest I/db: 总共有3项数据                          name:张三                          phone:13526697845                          email:zs@126.com                          name:李四                          phone:13526648945                          email:lishi@126.com                          name:王五                          phone:13526692685com.xxx.sqlitetest I/db: 总共有3项数据                          name:张三                          phone:123                          email:zs@136.com //数据已被修改                          name:李四                          phone:13526648945                          email:lishi@126.com                          name:王五                          phone:13526692685                          email:wangwu@126.comcom.xxx.sqlitetest I/db: 总共有2项数据                         name:张三                         phone:123                           email:zs@136.com//第2条记录已被删除                         name:王五                         phone:13526692685                         email:wangwu@126.com
7.使用SimpleCursorAdapter显示数据库中的数据
把Cursor对象作为数据源
1)新建布局xml
<TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <TextView
        android:id="@+id/phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <TextView
        android:id="@+id/email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />



2) SimpleCursorAdapter

        Cursor c = db.rawQuery("SELECT * FROM "+tb_name,
                null);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                MainActivity.this,
                R.layout.layout, //显示每个数据项所用的布局
                c,//以Cursor对象为数据源
                new String[]{"name","phone","email"},//Cursor中字段名数组
                new int[] {R.id.name, R.id.phone, R.id.email},//layout中组件ID数组
                0);//Adapter运行模式
        lv.setAdapter(adapter);



原创粉丝点击