数据库存储: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) {
} }
在主函数中,必须调用
|
SQLiteDatabase
getWritableDatabase()
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);
Cursor
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"));} (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!