zoukankan      html  css  js  c++  java
  • 关于android中数据库的创建以及基础的增删改查的相应操作

    这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行。

    相应的知识点如下:

    对于数据库中的一些常识。SQLite 没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使用。并且在保存数据时,支持null(零) 、integer (整数)、real (浮点数字) 、text (字符串文本)和blob(二进制对象)5种数据类型。但实际上SQLite也接收varchar(n)、 char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转换成对应的5种数据类型。因此,可以将各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型

    SqliteOpenHelper的用法:
    该类的方法:
    1、getReadableDatabase() 创建或者打开一个可读写的数据库,如果出现问题(磁盘满等),则打开一个只读的数据库。

    2、getWritableDatabase() 获得一个可读写的数据库。如果磁盘满则会抛异常。

    3、onCreate(SQLiteDatabase db) 只有第一次创建这个数据库的时候调用。一般在这个方法中创建数据的相应表。

    4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调用。这个方法很少使用

    5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发生改变的时候调用,一般如果需要修改表结构就写在这里.

    //db.execSQL(“alert 表名 add 列名列数据类型”);

    6、close()   关闭打开的所有数据库对象

    二、进行增加数据的相关操作是:

    通过getWritableDatabase()方 法得到SQLiteDatabase对象,然后获得ContentValues对象并将数据添加到ContentValues对象中,最后调用inser()方法将数据插入到person表中。

    insert()方法接收3个参数,第一个参数是数据表的名称,第二个参数表示如果发现将要插入的行为空行时,会将这个列名的值设为null,第三个参数为ContentValues对象。ContentValues类类似于Map类,通过键值对的形式存入数据,这里的key表示插入数据的列名,value 表示要插入的数据。

    需要注意的是,使用完SQLiteDatabase对象后定要调用close()方法关闭,否则数据库连接会一直存在,不断消耗内存,当系统内存不足时将获取不到SQLiteDatabase对象,并且会报出数据库未关闭异常。

    三、修改相应数据的注意事项

    通过SQLiteDatebase对象db调用update()方法用来修改数据库中的数据,update()方法接收4个参数,第一个参数表示表名,第二个参数接收一个ContentValues对象,第三个参数可选择where语句,第四个参数表示whereClause语句中的占位参数列表,这些字符串会替换掉where条件中的 " ? "。

    四、查询数据的先关操作是

    在进行数据查询时使用的是SQLiteDatabase的query0方法,该方法返回的是一个行数集合Cursor。 Cursor 是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等,通过这些方法可以获取集合中的属性值以及序号等。

    需要注意的是,在使用完Cursor对象后,一定要及时关闭,否则会造成内存泄露。下面介绍如何使用SQLiteDatabase的query()方法查询数据,

    这种操作方法类似于执行SQL语句 (语法和SQL server类似)。

    1. 增加一条数据

    1
    db.execSQL("insert into perosn (name, price) values(?,?)",new String[]{name,price})

    2. 修改一条数据

    1
    db.execSQL("update person set price =? where name =?", new String[]{price,name});

    3. 删除一条数据

    1
    db.execSQL("delete from person where _id = ?",new String[]{id});

    4. 查询一条数据

    1
    Cursor cursor = db.rawQuery("select _id,name,price from person where id =?",new String[]{id});

    从上述代码可以看出,查询操作与增、删、改操作有所不同,前面三个操作都是通过execSQL()方法执行SQL语句,而查询操作使用的是rawQuery()方法。这是因为查询数据库会返回一个结果集Cursor,而execSQL()方法则没有返回值。

    创建数据库的基本代码如下:

    public class SqliteHelper extends SQLiteOpenHelper{
    
    /**
    * 1.上下文
    * 2.数据库名字
    * 3.工厂游标
    * 4.版本号
    * @param context
    */
    public SqliteHelper(Context context) {
    super(context, "Person.db", null, 1);
    // TODO Auto-generated constructor stub
    }
    //创建  创建表  只要创建成功 只会执行一次
    @Override
    public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL("create table person(id integer primary key autoincrement," +
    "name text," +
    "sex text)");
    }
    

    对于数据库方面的增删改查的相应代码如下:

    //添加
    public boolean add(String name,String age){
    
    ContentValues values = new ContentValues();
    //1.key 字段名  2.要进行添加的值
    values.put("name", name);
    values.put("age", age);
    //1. 表名 2.要进行添加的列  3. 添加的值
    long insert = sb.insert("user", null, values );
    if(insert!=-1){
    return true;
    }else{
    return false;
    }
    
    }
    
    //查询
    public String select(){
    /**
    * table, 表名
    * columns, 查询列
    * selection, 条件
    * selectionArgs,条件的值
    *  groupBy,组查询
    *  having, 子查询
    *  orderBy 顺序  升序  降序
    */
    Cursor query = sb.query("user", null, null, null, null, null, null);
    StringBuffer stringBuffer = new StringBuffer();
    while (query.moveToNext()) {
    
    String name = query.getString(query.getColumnIndex("name"));
    String age = query.getString(query.getColumnIndex("age"));
    stringBuffer.append(name+"----"+age);
    }
    return stringBuffer.toString();
    }
    
    //删除
    public boolean delete(String name){
    /**
    * 1.表名
    * 2.条件
    * 3.条件的值
    */
    int delete = sb.delete("user", "name = ?", new String[]{name});
    if(delete!=-1){
    return true;
    }else{
    return false;
    }
    
    }
    //修改
    
    public boolean update(String name,String age,String tj){
    
    /**
    * table, 表名
    * values,要修改的值
    *  whereClause, 条件
    *  whereArgs 条件的值
    */
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    int update = sb.update("user", values, "name = ?", new String[]{tj});
    
    if(update!=-1){
    return true;
    }else{
    return false;
    }
    }
    }
  • 相关阅读:
    使用注解方式定义和配置aop
    javascript 相关小的知识点集合
    javascript ES3小测试
    js事件相关面试题
    前端工程师在面试过程中常遇到的知识点
    跨浏览器事件对象封装
    webstorm我用到的快捷键【不断更新】
    切图技巧分享—圆角背景色
    深入理解css中vertical-align属性
    photoshop CC智能切图
  • 原文地址:https://www.cnblogs.com/dazhi151/p/12260700.html
Copyright © 2011-2022 走看看