Sqlitedatabase的初步认识与使用
2017-03-15 02:15
225 查看
android Sqlitedatabase的初步学习
首先,sqlite适合用来储存大量数据结构相同的数据。数据库的创建
1.创建一个类集成SqliteOpenHelper,需要添加一个构造方法,实现两个方法oncreate ,onupgrade构造方法中的参数介绍:super(Context,String name,factory,version); super(context, "info.db", null,1); //context :上下文 , name:数据库文件的名称 factory:用来创建cursor对象,默认为null //version:数据库的版本号,从1开始,如果发生改变,onUpgrade方法将会调用,4.0之后只能升不能降
2 .创建这个帮助类的一个对象,调用getReadableDatabase()方法,会帮助我们创建打开一个数据库
3.复写oncreate和onupgrdate方法:
oncreate方法是数据库第一次创建的时候会被调用; 特别适合做表结构的初始化,需要执行sql
语句;SQLiteDatabase db可以用来执行sql语句
4.帮助类对象中的getWritableDatabase 和 getReadableDatabase都可以帮助我们获取一个数据库
操作对象SqliteDatabase.
区别:
getReadableDatabase:
先尝试以读写方式打开数据库,如果磁盘空间满了,他会重新尝试以只读方式打开数据库。
getWritableDatabase:
直接以读写方式打开数据库,如果磁盘空间满了,就直接报错。
数据库的增删改查
1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象2.使用SqliteDatebase对象调用insert,update,delete ,query方法做增删改查。
3.使用SqliteDatebase对象调用execSql()做增删改,调用rawQuery方法做查询。
一个登陆界面通过数据库存储账号密码的例子
//新建类集成SqliteOpenHelper public class AccountSQLiteOpenHelper extends SQLiteOpenHelper { public AccountSQLiteOpenHelper(Context context){ super(context, "user.db", null, 2); //建立名为user.db的数据库 } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table user (_id integer primary key autoincrement,account varchar(20),password varchar(11))"); //设置表结构 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //版本更新操作 }
//一个帮助类对象,包含对表的几种操作 public class SqlDao { private AccountSQLiteOpenHelper mySqliteOpenHelper; public SqlDao(Context context){ //创建一个帮助类对象 mySqliteOpenHelper = new AccountSQLiteOpenHelper(context); } public boolean add(User bean){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); ContentValues values = new ContentValues(); //是用map封装的对象,用来存放值 val bd18 ues.put("account", bean.account); values.put("password", bean.password); long result = db.insert("user", null, values); //底层是在拼装sql语句 //关闭数据库对象 db.close(); if(result != -1){//-1代表添加失败 return true; }else{ return false; } } public int del(String name){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); int result = db.delete("user", "account = ?", new String[]{name}); //关闭数据库对象 db.close(); return result; } public int update(User bean){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); //是用map封装的对象,用来存放值 values.put("password", bean.password); int result = db.update("user", values, "account = ?", new String[]{bean.account}); //关闭数据库对象 db.close(); return result; } public boolean query(User bean,Context mContext){ SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); Cursor cursor = db.query("user",new String[]{ "password"},"account = ?",new String[]{bean.account},null, null, "_id desc"); if(cursor != null && cursor.getCount() > 0){ //循环遍历结果集,获取每一行的内容 String password = ""; while(cursor.moveToNext()){//条件,游标能否定位到下一行 //获取数据 password = cursor.getString(0); } cursor.close();//关闭结果集 if(password.equals(bean.password)) { Toast.makeText(mContext, "验证成功", Toast.LENGTH_SHORT).show(); return true; }else{ Toast.makeText(mContext,"密码错误", Toast.LENGTH_SHORT).show(); return false; } }else{ cursor.close(); Toast.makeText(mContext,"账号不存在!",Toast.LENGTH_SHORT).show(); return false; } Cursor tet = mContext.getContentResolver().query() } public void query(String name){ //执行sql语句需要sqliteDatabase对象 //调用getReadableDatabase方法,来初始化数据库的创建 SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase(); Cursor cursor = db.query("user", new String[]{"_id","account","password"}, "account = ?", new String[]{name}, null, null, "_id desc"); //解析Cursor中的数据 if(cursor != null && cursor.getCount() >0){//判断cursor中是否存在数据 //循环遍历结果集,获取每一行的内容 while(cursor.moveToNext()){//条件,游标能否定位到下一行 //获取数据 int id = cursor.getInt(0); String name_str = cursor.getString(1); String password = cursor.getString(2); System.out.println("_id:"+id+";account:"+name_str+";password:"+password); } cursor.close();//关闭结果集 } //关闭数据库对象 db.close(); } }
//MainActivity public class MainActivity extends AppCompatActivity{ private Context mContext; private EditText mAccount; //用户名 private EditText mPassword; //密码 private Button mNewuser; //注册 private Button mLogin; //登陆 private SQLiteDatabase mDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; //创建一个帮助类对象 mDatabase = new AccountSQLiteOpenHelper(mContext).getWritableDatabase(); //创建数据库 mNewuser = (Button)findViewById(R.id.newuser_button); mLogin = (Button)findViewById(R.id.login_button); mAccount = (EditText)findViewById(R.id.user_accont); mPassword = (EditText)findViewById(R.id.user_password); mNewuser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { newUser(); //注册判断及数据库操作 } }); mLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Login(); //登陆判断 } }); } private void Login(){ String username = mAccount.getText().toString().trim(); //获取账号密码 String password = mPassword.getText().toString().trim(); SqlDao sqlDao = new SqlDao(mContext); //新建数据库操作对象 User bean = new User(); bean.account = username; bean.password = password; boolean result = sqlDao.query(bean, mContext); //查询,result接受是否有该账户(后续result操作未完善) } private void newUser(){ //获取账号密码 String password = mPassword.getText().toString().trim(); if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)){ //判断格式 Toast.makeText(mContext, "用户名及密码不能为空", Toast.LENGTH_SHORT).show(); return ; } SqlDao sqlDao = new SqlDao(mContext); //新建数据库操作对象 User bean = new User(); bean.account = username; bean.password = password; boolean result = sqlDao.add(bean); if(result){ Toast.makeText(mContext, "用户名密码注册成功", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(mContext, "用户名密码注册失败", Toast.LENGTH_SHORT).show(); } } }
//存放数据类 public class User { public String account; public String password; }
小结
小结,通过《Android编程权威指南》以及黑马Android教学视频学习的,这里这是介绍了一点皮毛,自己也算是通过这次机会,把Activity的编写逻辑理了一遍,通过这个登录界面,以上,继续学习。还有不知道怎么回事今天编辑排版莫名其妙出问题=-=相关文章推荐
- SQLite3数据库Native C++封装类(Unicode)CppSQLite3U的初步认识与使用
- SQLite3数据库Native C++封装类(Unicode)CppSQLite3U的初步认识与使用
- SQLite3数据库Native C++封装类(Unicode)CppSQLite3U的初步认识与使用
- Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!!
- Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!
- iphone xcode 使用database 数据库 sqlite3的使用注意项总结
- sqlite database browser的使用
- 【转】Android使用SQLiteDatabase操作SQLite数据库【学习记录】
- VC++6.0下初步使用SQLite3
- 初步认识dll,在VS2010平台上创建并使用dll
- VC中使用sqlite3_open生成的文件,提示“file is encrypted or is not a database ”
- Android数据库(SQLiteDatabase)使用小结
- iphone xcode 使用database 数据库 sqlite3的使用注意项总结
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库
- 使用SQLiteDatabase操作SQLite数据库第二种方法
- Android 高手进阶教程(十三)之----Android 数据库SQLiteDatabase的使用!!
- 使用SQLiteDatabase 操作SQLite数据库
- android database sqlite的使用
- Android 数据库SQLiteDatabase的使用!!