您的位置:首页 > 移动开发 > Android开发

Android菜鸟练习第三十三课 数据库的基本使用

2016-12-30 14:30 423 查看
第一部分 DBHelper部分
/*** 数据库Helper类,必须继承自 SQLiteOpenHelper* 当一个继承自 SQLiteOpenHelper 后需要复写两个方法,分别是 onCreate()  和 onUpgrade()* onCreate(): onCreate是在数据库创建的时候调用的,主要用来初始化数据表结构和插入数据初始化的记录* onUpgrade():onUpGrade是在数据库版本升级的时候调用的,主要用来改变表结构***  数据库帮助类要做的事情特别简单:*  1、复写onCreate()  和 onUpgrade()方法*  2、在这两个方法里面填写相关的sql语句***/public class DBHelper extends SQLiteOpenHelper {public DBHelper(Context context) {/*** 参数说明:** 第一个参数: 上下文* 第二个参数:数据库的名称* 第三个参数:null代表的是默认的游标工厂* 第四个参数:是数据库的版本号  数据库只能升级,不能降级,版本号只能变大不能变小*/super(context, "mintest.db", null, 2);}/*** onCreate是在数据库创建的时候调用的,主要用来初始化数据表结构和插入数据初始化的记录** 当数据库第一次被创建的时候调用的方法,适合在这个方法里面把数据库的表结构定义出来.* 所以只有程序第一次运行的时候才会执行* 如果想再看到这个函数执行,必须写在程序然后重新安装这个app*/@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table contactinfo (id integer primary key autoincrement, name varchar(20), phone varchar(20))");}/*** 当数据库更新的时候调用的方法* 这个要显示出来得在上面的super语句里面版本号发生改变时才会 打印  (super(context, "itheima.db", null, 2); )* 注意,数据库的版本号只可以变大,不能变小,假设我们当前写的版本号是3,运行,然后又改成1,运行则报错。不能变小* @param db* @param oldVersion* @param newVersion*/@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("alter table contactinfo add account varchar(20)");}}
第二部分 DAO工具类
/***  ContactInjfoDao  数据库操作类  dao后缀的都是数据库操作类**  我们这里的每一个 增删改查 的方法都通过getWritableDatabase()去实例化了一个数据库,这里必须这么做*  不客气抽取 成为一个成员变量, 否则报错,若是觉得麻烦可以通过定义方法来置为null和重新赋值**  —— 其实dao类在这里做得事情特别简单:*  1、定义一个构造方法,利用这个方法去实例化一个  数据库帮助类*  2、编写dao类的对应的 增删改查 方法。**/public class ContactInjfoDao {private DBHelper DBhelper;/*** dao类需要实例化数据库Help类,只有得到帮助类的对象我们才可以实例化 SQLiteDatabase* @param context*/public ContactInjfoDao(Context context){// 将数据库打开帮帮助类实例化,然后利用这个对象// 调用谷歌的api去进行增删改查DBhelper = new DBHelper(context);}// 增加的方法吗,返回的的是一个long值public long addDate(String name,String phone){// 增删改查每一个方法都要得到数据库,然后操作完成后一定要关闭// getWritableDatabase(); 执行后数据库文件才会生成// 数据库文件利用DDMS可以查看,在 data/data/包名/databases 目录下即可查看SQLiteDatabase sqLiteDatabase =  DBhelper.getWritableDatabase();ContentValues contentValues=new ContentValues();contentValues.put("name",name);contentValues.put("phone", phone);// 返回,显示数据添加在第几行// 加了现在连续添加了3行数据,突然删掉第三行,然后再添加一条数据返回的是4不是3// 因为自增长long rowid=sqLiteDatabase.insert("contactinfo",null,contentValues);sqLiteDatabase.close();return rowid;}// 删除的方法,返回值是intpublic int deleteDate(String name){SQLiteDatabase sqLiteDatabase = DBhelper.getWritableDatabase();int deleteResult = sqLiteDatabase.delete("contactinfo", "name=?", new String[]{name});sqLiteDatabase.close();return deleteResult;}/*** 修改的方法* @param name* @param newPhone* @return*/public int updateData(String name,String newPhone){SQLiteDatabase sqLiteDatabase = DBhelper.getWritableDatabase();ContentValues contentValues =new ContentValues();contentValues.put("phone", newPhone);int updateResult = sqLiteDatabase.update("contactinfo", contentValues, "name=?", new String[]{name});sqLiteDatabase.close();return updateResult;}/*** 查询的方法(查找电话)* @param name* @return*/public String alterDate(String name){String phone = null;SQLiteDatabase readableDatabase = DBhelper.getReadableDatabase();// 查询比较特别,涉及到 cursorCursor cursor = readableDatabase.query("contactinfo", new String[]{"phone"}, "name=?", new String[]{name}, null, null, null);if(cursor.moveToNext()){phone=cursor.getString(0);}cursor.close(); // 记得关闭 corsorreadableDatabase.close(); // 关闭数据库return phone;}}
第三部分 Activity部分
public class MainActivity extends AppCompatActivity {private EditText mEtName, mEtPhone;private ContactInjfoDao mDao;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mDao = new ContactInjfoDao(MainActivity.this);mEtName = (EditText) findViewById(R.id.mEtName);mEtPhone = (EditText) findViewById(R.id.mEtPhone);}//向数据库中添加数据public void add(View view){String name=mEtName.getText().toString().trim();String phone=mEtPhone.getText().toString().trim();if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();return;}else{long addLong = mDao.addDate(name, phone);if(addLong==-1){Toast.makeText(this,"添加失败",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"数据添加在第  "+addLong+"   行",Toast.LENGTH_SHORT).show();}}}//删除数据库中的数据public void delete(View view){String name=mEtName.getText().toString().trim();if(TextUtils.isEmpty(name)){Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();return;}else{int deleteDate = mDao.deleteDate(name);if(deleteDate==-1){Toast.makeText(this,"删除失败",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"成功删除  "+deleteDate+"   条数据",Toast.LENGTH_SHORT).show();}}}//修改数据中的数据public void update(View view){String name=mEtName.getText().toString().trim();String phone=mEtPhone.getText().toString().trim();if(TextUtils.isEmpty(name)||TextUtils.isEmpty(phone)){Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();return;}else{int count=mDao.updateData(name, phone);if(count==-1){Toast.makeText(this,"更新失败",Toast.LENGTH_SHORT).show();}else{Toast.makeText(this,"数据更新了  "+count+"   行",Toast.LENGTH_SHORT).show();}}}//查询数据库中的数据public void query(View view){String name=mEtName.getText().toString().trim();if(TextUtils.isEmpty(name)){Toast.makeText(this,"填写不完整",Toast.LENGTH_SHORT).show();return;}else{String phoneResult = mDao.alterDate(name);Toast.makeText(this,"手机号码为:    "+phoneResult,Toast.LENGTH_SHORT).show();}}}
第四部分 布局部分
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><EditTextandroid:id="@+id/mEtName"android:hint="请输入联系人的姓名"android:layout_width="match_parent"android:layout_height="wrap_content"></EditText><EditTextandroid:id="@+id/mEtPhone"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入联系人的电话"android:inputType="phone" /><Buttonandroid:onClick="add"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="添加" /><Buttonandroid:onClick="delete"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="删除" /><Buttonandroid:onClick="update"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="修改" /><Buttonandroid:onClick="query"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="查询" /></LinearLayout>

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 Database SQLite