SQLite Android数据库详解

数据库存储:SQLite

创建数据库:
自定义 MySQLiteOpenHelper类继承 SQLiteOpenHelper。重写构造函数和oncreate方法。

PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

/**
* Created by Administrator on 2015/9/7.
*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name,factory, version);
}

public MySQLiteOpenHelper(Context context, String name){
this(context, name,null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists user("
+ "id integer primary key,"
+ "name varchar(20),"
+ "password integer(20))");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}
在主函数中,必须调用
Create and/or open a database that will be used for reading and writing.                          
/**创建数据库*/
MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(getApplicationContext(),"MY_FIRST_DB.db");
/**调用getWritableDatabase完成创建*/
SQLiteDatabase database = mySQLiteOpenHelper.getWritableDatabase();
添加数据
   
   
long
insert( String table,  String nullColumnHack,  ContentValues values)
Convenience method for inserting a row into the database.                          
字段的含义

table 要插入数据的表的名称

values:一个ContentValues对象,类似一个map.通过键值对的形式存储值。

nullColumnHack:

当values参数为空或者里面没有内容的时候,我们insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,我们要在这里指定一个

列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。
case R.id.button_insert:
ContentValues values = new ContentValues();
values.put("name","张三");
values.put("password","123456");
database.insert("user",null,values);
break;
另一种方法(通过Sql语句):
    
    
String sql = "insert into user(username,password) values ( 'Jack Johnson' , 'iLovePopMuisc' ); //插入操作的SQL语句
db.execSQL(sql); //执行SQL语句
删除数据
    
    
int
delete( String table,  String whereClause,  String[] whereArgs)
Convenience method for deleting rows in the database.                          
各字段含义:
table:表名
whereClause:删除的条件
whereArgs:条件的参数

同样有2种方式可以实现

1
2
3
String whereClause =  "username=?" ; //删除的条件
String[] whereArgs = { "Jack Johnson" }; //删除的条件参数
db.delete( "user" ,whereClause,whereArgs); //执行删除

使用execSQL方式的实现

1
2
String sql =  "delete from user where username='Jack Johnson'" ; //删除操作的SQL语句
db.execSQL(sql); //执行删除操作
删除所有数据:
database.delete("user","1",null);
修改数据
    
    
int
update( String table,  ContentValues values,  String whereClause,  String[] whereArgs)
Convenience method for updating rows in the database.                          
ContentValues values1 = new ContentValues();
values1.put("name","王五");
values1.put("password",125544);
database.update("user",values1,"name = '张三'",null);
String[] whereArgs = {"张三"};
database.update("user",values1,"name = '?'",whereArgs);

同上,仍是2种方式

1
2
3
4
5
ContentValues cv =  new ContentValues(); //实例化ContentValues
cv.put( "password" , "iHatePopMusic" ); //添加要更改的字段及内容
String whereClause =  "username=?" ; //修改条件
String[] whereArgs = { "Jack Johnson" }; //修改条件的参数
db.update( "user" ,cv,whereClause,whereArgs); //执行修改

使用execSQL方式的实现

1
2
String sql =  "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'" ; //修改的SQL语句
db.execSQL(sql); //执行修改

查询数据:
使用SQL语句获得游标
Cursor c = database.rawQuery("select * from user",null);
     
     
query( String table,  String[] columns,  String selection,  String[] selectionArgs,  String groupBy,  String having,  String orderBy,  String limit)
Query the given table, returning a  Cursor over the result set.
query(boolean distinct,  String table,  String[] columns,  String selection,  String[] selectionArgs,  String groupBy,  String having,  String orderBy,  String limit,  CancellationSignal cancellationSignal)
Query the given URL, returning a  Cursor over the result set.
query( String table,  String[] columns,  String selection,  String[] selectionArgs,  String groupBy,  String having,  String orderBy)
Query the given table, returning a  Cursor over the result set.
query(boolean distinct,  String table,  String[] columns,  String selection,  String[] selectionArgs,  String groupBy,  String having,  String orderBy,  String limit)
Query the given URL, returning a  Cursor over the result set.                          

数据查询相对前面几种方法就复杂一些了,因为查询会带有很多条件

通过query实现查询的

public Cursor query(String table, String[] columns, String selection,String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

各参数说明:

  • table:表名称
  • colums:列名称数组
  • selection:条件子句,相当于where
  • selectionArgs:条件语句的参数数组
  • groupBy:分组 GROUP BY NAME 如:name
  • having:分组条件 HAVING count(name)<2; 如:count(name)<2
  • orderBy:排序类 正序:ISA 倒序:IDSC 如:id ASC
  • limit:分页查询的限制 2 offset 2 如 2,3 (offset用,代替) 偏移量在钱,数量在后
  • Cursor:返回值,相当于结果集ResultSet 可以通过上网查询:http://www.w3school.com.cn/sql/sql_having.asp

针对游标(Cursor)也提供了不少方法

方法名称方法描述
getCount()总记录条数
isFirst()判断是否第一条记录
isLast()判断是否最后一条记录
moveToFirst()移动到第一条记录
moveToLast()移动到最后一条记录
move(int offset)移动到指定的记录
moveToNext()移动到吓一条记录
moveToPrevious()移动到上一条记录
getColumnIndex(String columnName)获得指定列索引的int类型值

遍历的方法:

stringBuffer = new StringBuffer();
Cursor c = database.query("user", null, null, null, null, null, null);//查询并获得游标
if(c.moveToFirst()){//判断游标是否为空
while(c.moveToNext()){
String username = c.getString(c.getColumnIndex("name"));
int password = c.getInt(c.getColumnIndex("password"));
stringBuffer.append(username + password);
Log.d("select", stringBuffer.toString());
}
}
mTextView.setText(stringBuffer.toString());

实现代码

1
2
3
4
5
6
7
8
Cursor c = db.query( "user" , null , null , null , null , null , null ); //查询并获得游标
if (c.moveToFirst()){ //判断游标是否为空
     for ( int i= 0 ;i<c.getCount();i++){
         c.move(i); //移动到指定记录
         String username = c.getString(c.getColumnIndex( "username" );
         String password = c.getString(c.getColumnIndex( "password" ));
     }
}

通过rawQuery实现的带参数查询

1
2
3
4
Cursor c = db.rawQuery( "select * from user where username=?" , new Stirng[]{ "Jack Johnson" });
if (cursor.moveToFirst()) {
     String password = c.getString(c.getColumnIndex( "password" ));
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值