加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite Android数据库详解

发布时间:2020-12-12 19:39:30 所属栏目:百科 来源:网络整理
导读:数据库存储:SQLite 创建数据库: 自定义 MySQLiteOpenHelper类继承 SQLiteOpenHelper。重写构造函数和oncreate方法。 PRIMARY KEY 约束唯一标识数据库表中的每条记录。 主键必须包含唯一的值。 主键列不能包含 NULL 值。 每个表都应该有一个主键,并且每个
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"));}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

数据库存储: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) {

}
}
在主函数中,必须调用
方法名称 方法描述
    推荐文章
      热点阅读