Android Sqlite

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:13526692685
com.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.com
com.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);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值