数据库

来源:互联网 发布:java random用法 编辑:程序博客网 时间:2024/05/29 07:03
一、 创建数据库

                通过openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)方法创建数据库。    

 SQLiteDatabase db =this.openOrCreateDatabase("test_db.db", Context.MODE_PRIVATE, null); SQLiteDatabase db2 = SQLiteDatabase.openOrCreateDatabase("/data/data/com.test/databases/test_db2.db3", null);
 
               如上两种方式均能创建数据库,this.openOrCreateDatabase是对SQLiteDatabase.openOrCreateDatabase而来,如代码所见,原生的SQLiteDatabase.openOrCreateDatabase()方法第一参数要求输入绝对路劲,而所有的数据库都是储存于“data/data/应用报名/databases”目录下,所以输入完全的绝对路劲是一件重复且繁杂的工作。采用this.openOrCreateDatabase则省去了此操作。
 
 
 以下是自己写的。
 
二、数据库的查询
 Cursor c=db.query("weizhang", null, null, null, null, null, null);//查询weizhang表里的所有内容,放到cursor对象中
 第一个参数是表名,第二个参数是要查询的列名String[]类型数据,null表示获取所有列,第三个参数表示查询的条件,比如:SELECT * FROM weizhang WHERE id = 1,那么此处就填id=1,注意是String类型。
cursor游标默认的是指向第一个数据的上一行,如果不c.moveToFirst()会报错。
cursor:游标移动的方法有:moveToFirst()//移到第一行
      moveToLast()//移到最后一行
      moveToNext()//下移一行
      moveToPosition(int position)//移到指定位置
      moveToPrevious()//移到之前位置
getString(int columnIndex)方法可以获取当前行,columnIndex列的的String类型数据.....getFloat(int columnIndex).....
getColumnIndexOrThrow(String columnName)方法可以通过列名获取列名所在的列数。
   上面三种方法联合起来可以通过列名得到每一行的数据。
 
  模糊查询:
Cursor cursor = db.query("abc", null, "name  LIKE ? or name Like ?", new String[]{"%北%","%底%"}, null, null, null);
如上,第四个参数代替第三个参数中的 ?号,有几个问号第四个参数就有几个值。
 上面的查询等价于SQL语句:select * from abc where name like '%北%' or name like '%底%'
 也可改为
Cursor cursor = db.query("abc", null, "name  LIKE '%北%' or name Like '%底%'", null, null, null, null);
查询还有个方法
Cursor cursor = db.rawQuery("SELECT * FROM abc WHERE name LIKE '%北%' or "+Field.name+" Like '%底%'" , null);
或者
Cursor cursor = db.rawQuery("SELECT * FROM abc WHERE name LIKE ? or "+Field.name+" Like ?" , new String[]{"%北%","%底%"});

三、数据库的插入
ContentValues values=new ContentValues();         values.put("groupid", group);         values.put("childid", child);         values.put("persons", item);
db.insert("weizhangperson", null, values);
第一个参数是要插入的表名,第二个参数表示如果要插入的数据没满足列数,空列用第2个参数表示,第三个参数表示要插入的数据ContentValues类型。
也可:db.execSQL("INSERT INTO "+table+" VALUES ("+groupPosition+","+childPosition+", "+"'" +child.get(groupPosition)[childPosition]+"'"+")");来插入数据。