仿微信-界面动画(6)数据库的简易操作

下面简述了一下如何创建数据库,如何增删改查,以及数据库的添加列的操作
1.简历数据库,首先建立一个数据库的辅助类MyDatabaseHelper继承的是SQLiteOpenHelper

//数据库操作的辅助类
public class MyDatabaseHelper extends SQLiteOpenHelper {

    private Context context;
    // INTEGER PRIMARY KEY AUTOINCREMENT
    private static final String CREATE_USER_STRING = "create table user ("
            + "userid INTEGER PRIMARY KEY AUTOINCREMENT," + "username text," +"password text )";
    //上面是sq语句--目的是建立了一个三列的user表(username userid password)
    public MyDatabaseHelper(Context context, String name,
            CursorFactory factory, int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 初次生成数据库的时候会执行onCreate()
        db.execSQL(CREATE_USER_STRING);// 实现初次的创建
        Toast.makeText(context, "create success", Toast.LENGTH_SHORT).show();
    }
//只有
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        switch (oldVersion) {
        case 1:
            // 数据库增加一列
            //db.execSQL("alter table user add column password text");
        case 2:
            // 数据库增加一列
            // db.execSQL("alter table user add column pwd text");
        case 3:
            // 数据库增加一列
            // db.execSQL("alter table user add column pwd text");
        default:
            break;
        }

    }

}

2.数据库的增删改查以及版本的更新

(1)创建

MyDatabaseHelper myDatabaseHelper= new MyDatabaseHelper(this, "test.db", null, 1);
myDatabaseHelper.getWritableDatabase();

若是已经创建了名字叫test.db的数据库,则不会再调用OnCreate方法(MyDatabaseHelper
中);否则,会调用一(OnCreate方法)
而OnCreate方法中是执行一sq语句,创建表格user

(2)增加

SQLiteDatabase database = myDatabaseHelper.getWritableDatabase();// 打开数据库的连接
            ContentValues values = new ContentValues();// 和hash表类似,存储数据,键值对形式
            //values.put("userid", 1);
            values.put("username", "Tom");
            database.insert("user", null, values);
            //values.put("userid", 2);
            values.put("username", "Jerry");
            database.insert("user", null, values);

(3)删除

SQLiteDatabase database2 = myDatabaseHelper.getWritableDatabase();// 打开数据库的连接
            // 事务(若是一句话执行错误的话,出错后前面的操作hi被撤销,这叫做事务的回滚)
            database2.beginTransaction();// 事务的开始
            try {
                database2.delete("user", "userid = ?", new String[] { "1" });
                database2.setTransactionSuccessful();// 提交到数据库
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            } finally {
                database2.endTransaction();// 事务的结束
            }

(4)改

SQLiteDatabase database1 = myDatabaseHelper.getWritableDatabase();// 打开数据库的连接
            // 借助ContentValues
            // id是1的用户改名字
            ContentValues values1 = new ContentValues();// 和hash表类似,存储数据,键值对形式
            values1.put("username", "chenle");
            database1.update("user", values1, "userid = ?",
                    new String[] { "1" });

(5)查

// Cursor光标指向的是一行数据包含id数据,包含name数据,包含age数据
            SQLiteDatabase database3 = myDatabaseHelper.getWritableDatabase();// 打开数据库的连接
            Cursor cursor = database3.query("user", new String[] { "userid",
                    "username" }, "userid =?", new String[] { "1" }, null,
                    null, null);
            while (cursor.moveToNext()) {
                int uid = cursor.getInt(cursor.getColumnIndex("userid"));
                String usernameString = cursor.getString(cursor
                        .getColumnIndex("username"));
                Log.d("DataBaseActivity", uid + " | " + usernameString);
            }

(6)更新

myDatabaseHelper = new MyDatabaseHelper(this, "test.db", null, 2);
            //只有版本变了的时候,才会调用onUpgrade方法
            myDatabaseHelper.getWritableDatabase();

跟新的时候其实只是打开的时候版本不一样,就会调用数据库辅助类中的onUpgrade方法

3.下面讲述了的根据用户姓名和密码的登录界面的匹配以及注册用户的代码片段
(1)注册用户

MyDatabaseHelper myDatabaseHelper = new MyDatabaseHelper(this, "test.db",
            null, 2);
SQLiteDatabase database = myDatabaseHelper.getWritableDatabase();// 打开数据库的连接
            ContentValues values = new ContentValues();// 和hash表类似,存储数据,键值对形式

            values.put("username", editText1_zhanghu.getText().toString());
            values.put("password", editText2_password.getText().toString());
            database.insert("user", null, values);
            // 点了注册之后帐号密码清空,但是不需要这样
            // editText1_zhanghu.setText("");
            // editText2_password.setText("");

            // 或者这样注册(一次性注册,用sql语句进行)
            // SQLiteDatabase sdb=dbHelper.getReadableDatabase();
            // String
            // sql="insert into user(username,password,age,sex) values(?,?,?,?)";
            // Object
            // obj[]={user.getUsername(),user.getPassword(),user.getAge(),user.getSex()};
            // sdb.execSQL(sql, obj);

(2)登录检测

// SQLiteDatabase sdb=dbHelper.getReadableDatabase();
            // String sql="select * from user where username=? and password=?";
            // Cursor cursor=sdb.rawQuery(sql, new String[]{username,password});
            // if(cursor.moveToFirst()==true){
            // cursor.close();
            // return true;
            // }
            /*
             * 查询出来的cursor的初始位置是指向第一条记录的前一个位置的 cursor.moveToFirst()指向查询结果的第一个位置。
             * 一般通过判断cursor
             * .moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext
             * ()是用来做循环的,一般这样来用:while(cursor.moveToNext()){ }
             * cursor.moveToPrevious()是指向当前记录的上一个记录,是和moveToNext相对应的;
             * cursor.moveToLast()指向查询结果的最后一条记录 使用cursor可以很方便的处理查询结果以便得到想要的数据
             */
            database = myDatabaseHelper.getWritableDatabase();// 打开数据库的连接
            String sql = "select * from user where username=? and password=?";
            Cursor cursor = database.rawQuery(sql, new String[] {
                    editText1_zhanghu.getText().toString(),
                    editText2_password.getText().toString() });
            if (cursor.moveToFirst() == true) {
                cursor.close();
                Intent intent = new Intent(LoginActivity.this,
                        MainActivity.class);
                startActivity(intent);
            } else {
                Toast.makeText(LoginActivity.this, "没找到相对应的帐号密码",
                        Toast.LENGTH_SHORT).show();
            }

希望对你们有所帮助~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值