【Android】sqlite探索
来源:互联网 发布:最优化高级计算方法 编辑:程序博客网 时间:2024/05/17 22:55
参考郭霖大大的《第一行代码》
一开始先了解数据库的建立和增删改查就可以了,不要分散重点,学会了再学下一个
实现效果:
点两下插入数据,然后点查询,会出现四条数据,两本书的信息(数据随便写的)
点击更新数据会将所有书名为《纯粹理性批判》的价格改为38(再点一下查询)
点击删除数据,会把所有页数超过500的书删掉,也就是郭霖大大的《第一行代码》
创建一个MySQLiteOpenHelper 类继承SQLiteOpenHelper,用于执行 数据库 的创建和更新
CreateTableSentence 是建表语句,想象一个名为book的表格
id name author price pages
1
2
3
4
名称,作者,价格,页数
primary key 主键
autoincrement 自增长
把建表语句放入execSQL函数里,就建立了一张表(看代码)
class MySQLiteOpenHelper extends SQLiteOpenHelper{ private Context mContext; private String CreateTableSentence ="create table book (" + "id integer primary key autoincrement, " + "author text, " + "price real, " + "pages integer, " + "name text)"; MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); mContext=context; } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(CreateTableSentence);//执行建表语句 Toast.makeText(mContext,"创建表格book",Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { sqLiteDatabase.execSQL("drop table if exists book"); onCreate(sqLiteDatabase); Toast.makeText(mContext,"更新数据库",Toast.LENGTH_SHORT).show(); }}
定义了5个按钮分别做相关的操作,一个文本用于显示book表中的信息
定义三个ContentValues用来存储数据(名起得长用来学英语),ContentValues有点像Map< String ,Object >,不过网上查了一下说不能存储对象,只能存储简单的数据类型,如int,string之类的
public class MainActivity extends Activity implements View.OnClickListener{ private MySQLiteOpenHelper mMySQLiteOpenHelper; private ContentValues mCritiqueOfPureReasonContentValues;//纯粹理性批判 private ContentValues mTheFirstLineOfCodeContentValues;//第一行代码 private ContentValues mUpdateCritiqueOfPureReasonPriceContentValues;//升级纯粹理性批判价格//一堆按钮 private Button mCreateDatabaseButton; private Button mAddDataButton; private Button mUpdateButton; private Button mDeleteButton; private Button mQueryButton; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initEvent(); }}
下面的初始化基本上都没什么,稍微注意一下初始化数据,主要部分是在后面按钮的点击事件
private void initView(){ mCreateDatabaseButton=findViewById(R.id.id_button_create_database); mAddDataButton=findViewById(R.id.id_button_add_data); mUpdateButton=findViewById(R.id.id_button_update); mDeleteButton=findViewById(R.id.id_button_delete); mQueryButton=findViewById(R.id.id_button_query); textView=findViewById(R.id.id_text); } private void initData(){ mCreateDatabaseButton.setText("创建数据库"); mAddDataButton.setText("插入数据"); mDeleteButton.setText("删除数据"); mUpdateButton.setText("更新数据"); mQueryButton.setText("查询数据"); mMySQLiteOpenHelper =new MySQLiteOpenHelper(this,"BookStore.db",null,2);//硬盘中的文件名 //用于插入数据,两本书的信息 mCritiqueOfPureReasonContentValues =new ContentValues(); mCritiqueOfPureReasonContentValues.put("name","《纯粹理性批判》"); mCritiqueOfPureReasonContentValues.put("author","康德"); mCritiqueOfPureReasonContentValues.put("price",36.4); mCritiqueOfPureReasonContentValues.put("pages",485); mTheFirstLineOfCodeContentValues =new ContentValues(); mTheFirstLineOfCodeContentValues.put("name","《第一行代码》"); mTheFirstLineOfCodeContentValues.put("author","郭霖"); mTheFirstLineOfCodeContentValues.put("price",66.4); mTheFirstLineOfCodeContentValues.put("pages",585); //用于更新数据,把纯粹理性批判的价格改为38 mUpdateCritiqueOfPureReasonPriceContentValues=new ContentValues(); mUpdateCritiqueOfPureReasonPriceContentValues.put("price",38); } private void initEvent(){ mCreateDatabaseButton.setOnClickListener(this); mAddDataButton.setOnClickListener(this); mUpdateButton.setOnClickListener(this); mDeleteButton.setOnClickListener(this); mQueryButton.setOnClickListener(this); }
mSQLiteDatabase是数据库使用getWritableDatabase创建或者打开数据库时返回的一个可对数据库操作的对象,我们使用这个对象对数据库进行增删改查
增删改就不说了,查询时使用query方法,可以指定相关的行和列,这里传入null,然后返回所有book表的数据到mCursor中,再用循环取出来,显示到textView中(光看文字看不懂,请结合看代码看,熟练使用Ctrl键+F键)
@Override public void onClick(View view) { SQLiteDatabase mSQLiteDatabase;//在点击事件中对数据进行操作 switch (view.getId()){ case R.id.id_button_create_database: mMySQLiteOpenHelper.getWritableDatabase(); break; case R.id.id_button_add_data: mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase(); mSQLiteDatabase.insert("book",null, mCritiqueOfPureReasonContentValues);//第一行 mSQLiteDatabase.insert("book",null, mTheFirstLineOfCodeContentValues);//第二行 break; case R.id.id_button_delete: mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase(); mSQLiteDatabase.delete("book","pages>?",new String[]{"500"});//删除页数大于500的行 break; case R.id.id_button_update: mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase(); //选择book表中name为《纯粹理性批判》的所有行更新 mSQLiteDatabase.update("book", mUpdateCritiqueOfPureReasonPriceContentValues,"name=?",new String[]{"《纯粹理性批判》"}); break; case R.id.id_button_query: mSQLiteDatabase = mMySQLiteOpenHelper.getWritableDatabase(); Cursor mCursor= mSQLiteDatabase.query("book",null,null,null,null,null,null);//获取book表中的所有数据 String textString=""; if (mCursor.moveToFirst()){ while (true){ String name=mCursor.getString(mCursor.getColumnIndex("name")); String author=mCursor.getString(mCursor.getColumnIndex("author")); int pages=mCursor.getInt(mCursor.getColumnIndex("pages")); double price=mCursor.getDouble(mCursor.getColumnIndex("price")); textString=textString+"书名:"+name+",作者:"+author+",页数:"+pages+",价格:"+price+"\n";//追加到文本后 if (!mCursor.moveToNext())break;//移动失败结束循环 } } mCursor.close(); textView.setText(textString); break; } }
增加一个事务功能
public class MainActivity extends Activity implements View.OnClickListener{ …… private Button mReplaceButton; private void initView(){ …… mReplaceButton=findViewById(R.id.id_button_replace); } private void initData(){ …… mReplaceButton.setText("替换全部数据(事务)"); } private void initEvent(){ …… mReplaceButton.setOnClickListener(this); } @Override public void onClick(View view) { SQLiteDatabase mSQLiteDatabase;//在点击事件中对数据进行操作 switch (view.getId()){ …… case R.id.id_button_replace: mSQLiteDatabase=mMySQLiteOpenHelper.getWritableDatabase(); mSQLiteDatabase.beginTransaction(); try { mSQLiteDatabase.delete("book",null,null); mSQLiteDatabase.insert("book",null, mCritiqueOfPureReasonContentValues); mSQLiteDatabase.setTransactionSuccessful(); }catch (Exception e){ e.printStackTrace(); }finally { mSQLiteDatabase.endTransaction(); } break; } }}
如果在删除过程中出现异常,则事务不会成功,删除操作会撤回。
- 【Android】sqlite探索
- Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)
- Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)
- Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)
- 【Android】【Sqlite】sqlite 相关
- android sqlite
- Android SQLite
- android---SQLite
- android sqlite
- android sqlite
- Android SQLite
- Android SQLite
- Android SQLite
- SQLite Android
- Android SQLite
- android sqlite
- Android SQLite
- Android SQLite
- IntelliJ IDEA中JSP白色部分消除方法
- quartz框架简单使用
- Java中抽象类和接口的用法和区别
- 使用maven archetype指定远程仓库的骨架工程来生成工程报错的问题
- Jquery EasyUI 面板尾部(5)
- 【Android】sqlite探索
- 合式公式的判断
- 算法导论-分治法-合并排序的Python&C++实现
- System.IO命名空间
- Android drawable资源源码分析
- strcpy函数的使用
- Kotlin语言学习之AndroidStudio下的单元测试
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
- 数组中元素出现的次数