SQLite Android数据库详解

前端之家收集整理的这篇文章主要介绍了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);
}

this(context,128)">null,255)">1);
}
@Override
public void onCreate(sqliteDatabase db) {
db.execsql("create table if not exists user("
+ "id integer primary key,"
"name varchar(20),0)">"password integer(20))");
}

public void onUpgrade(sqliteDatabase db,128)">int oldVersion,128)">int newVersion) {

}
}
在主函数中,必须调用
Create and/or open a database that will be used for reading and writing.
/**创建数据库*/
MysqLiteOpenHelper MysqLiteOpenHelper = new MysqLiteOpenHelper(getApplicationContext(),0)">"MY_FIRST_DB.db");
/**调用getWritableDatabase完成创建*/
sqliteDatabase database = MysqLiteOpenHelper.getWritableDatabase();
添加数据
   
   
long
insert( Stringtable,StringnullColumnHack,ContentValuesvalues)
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",0)">"张三");
values.put("password",0)">"123456");
database.insert("user",values);
break;
另一种方法(通过sql语句):
    
    
删除数据
    
    
int
delete( Stringtable,StringwhereClause,String[]whereArgs)
Convenience method for deleting rows in the database.
各字段含义:
table:表名
whereClause:删除的条件
whereArgs:条件的参数

同样有2种方式可以实现

1
2
3

使用execsql方式的实现

1
2
删除所有数据:
database.delete("1",128)">null);
修改数据
 
        
update( Stringtable,ContentValuesvalues,String[]whereArgs)
Convenience method for updating rows in the database.
ContentValues values1 = new ContentValues();
values1.put("王五");
values1.put(125544);
database.update("name = '张三'",128)">null);

database.update("user","name = '?'");

同上,仍是2种方式

1
2
3
4
5

使用execsql方式的实现

1
2

查询数据:
使用sql语句获得游标
Cursor c = .rawQuery("select * from user",null);
     
     
query( Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit)
Query the given table,returning a over the result set.
query(boolean distinct,Stringtable,Stringlimit,CancellationSignalcancellationSignal)
Query the given URL,StringorderBy)
Query the given table,%20java.lang.String%29" style="background-color:inherit" rel="nofollow">query(boolean distinct,Stringlimit)
Query the given URL,returning a 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(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

通过rawQuery实现的带参数查询

1
2
3
4
String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的sql语句db.execsql(sql);//执行sql语句String whereClause ="username=?";//删除的条件String[] whereArgs = {"Jack Johnson"};//删除的条件参数db.delete("user",whereClause,whereArgs);//执行删除String sql ="delete from user where username='Jack Johnson'";//删除操作的sql语句db.execsql(sql);//执行删除操作String[] whereArgs = {"张三"};whereArgsContentValues cv =newContentValues();//实例化ContentValuescv.put("password","iHatePopMusic");//添加要更改的字段及内容String whereClause ="username=?";//修改条件String[] whereArgs = {"Jack Johnson"};//修改条件的参数db.update("user",cv,whereArgs);//执行修改String sql ="update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改sql语句db.execsql(sql);//执行修改CursorCursorCursorCursorCursor c = db.query("user",null,null);//查询并获得游标if(c.moveToFirst()){//判断游标是否为空for(inti=0;i<c.getCount();i++){c.move(i);//移动到指定记录String username = c.getString(c.getColumnIndex("username");String password = c.getString(c.getColumnIndex("password"));}}Cursor c = db.rawQuery("select * from user where username=?",newStirng[]{"Jack Johnson"});if(cursor.moveToFirst()) {String password = c.getString(c.getColumnIndex("password"));}
原文链接:https://www.f2er.com/sqlite/199360.html

猜你在找的Sqlite相关文章