android有增删改查做电子书,Android中数据库的一些操做(增删改查)

提起Android的开发,就不得不提数据库,几乎每一个App中都会用到Sqlit数据库存储一些数据,小编闲暇时期,写了一个小demo关于数据库的增删改查,以前也介绍过数据库的一个开源框架ORMLite,在这里主要用到的是Android自带的一些空间和属性来实现的,话很少少,直接上代码吧:mysql

一、数据库的建立:android

private static final String TABLENAME = "student";

private static final String CREATETABLE = "CREATE TABLE " + TABLENAME +

"(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)";

public void creatTable(View view){

/**

* 建立数据库

* 参数一:数据库名

* 参数二:模式,通常为MOE_PRIVATE

* 参数三:游标工厂对象,通常写null,表示系统自动提供

*/

SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);

db.execSQL(CREATETABLE);

db.close();

}

二、数据库表的建立和数据的添加:sql

public void insertData(View view){

SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);

ContentValues values = new ContentValues();

values.put("name","张三");

values.put("age",18);

/**

*插入数据

* 参数一:要插入的表名

* 参数二:要插入的空数据所在的行数,第三个参数部位空,则此参数为null

* 参数三:要插入的数据

*/

db.insert(TABLENAME,null,values);

ContentValues values1 = new ContentValues();

values1.put("name","李四");

values1.put("age",21);

db.insert(TABLENAME,null,values1);

db.close();

}

数据添加后的数据库结构:数据库

三、数据库的更新:app

public void updateData(View view){

SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);

ContentValues values = new ContentValues();

values.put("name","赵四");

values.put("age",43);

/**

* 数据的更新

* 参数一:要更新的数据所在的表名

* 参数二:新的数据

* 参数三:要更新数据的查找条件

* 参数四:条件的参数

*/

db.update(TABLENAME,values,"_id=?",new String []{"2"});

db.close();

}

数据更新后:框架

四、数据的查找:ide

public void queryData(View view){

SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);

//查询部分数据

Cursor cursor = db.rawQuery("select * from " + TABLENAME + "where name=?",new String []{"张三"});

//查询所有数据

Cursor cursor1 = db.rawQuery("select * from " + TABLENAME ,null);

//将游标移到第一行

cursor1.moveToFirst();

//循环读取数据

while(!cursor1.isAfterLast()){

//得到当前行的标签

int nameIndex = cursor1.getColumnIndex("name");

//得到对应的数据

String name = cursor1.getString(nameIndex);

int ageIndex = cursor1.getColumnIndex("age");

int age = cursor1.getInt(ageIndex);

Log.d(TAG, "name:"+ name +"age: "+age);

//游标移到下一行

cursor1.moveToNext();

}

db.close();

}

查询的结果:函数

五、数据的删除:布局

public void delectData(View view){

SQLiteDatabase db = this.openOrCreateDatabase("text.db",MODE_PRIVATE,null);

//要删除的数据

db.delete(TABLENAME,"name = ?",new String[]{"赵四"});

db.close();

}

数据删除后:this

SqliteOpenHelper的用法:

该类的方法:

一、getReadableDatabase() 建立或者打开一个可读写的数据库,若是出现问题(磁盘满等),则打开一个只读的数据库。

二、getWritableDatabase() 得到一个可读写的数据库。若是磁盘满则会抛异常。

三、onCreate(SQLiteDatabase db) 只有第一次建立这个数据库的时候调用。通常在这个方法中建立数据的相应表。

四、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调用。这个方法不多使用

五、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发生改变的时候调用,通常若是须要修改表结构就写在这里.

//db.execSQL(“alert 表名 add 列名列数据类型”);

六、close()   关闭打开的全部数据库对象

使用步骤:

建立SQLiteOpenHelper类的子类MySQLiteOpenHelper 类,实现SQLiteOpenHelper类中的抽象方法onCreate()和onUpgrade();

调用 MySQLiteOpenHelper 对象的getWritableDatabase 或 getReadableDatabase方法,得到SQLiteDatabase 对象;

建立表。

调用SQLiteDatabase 对象的execSQL()方法,执行 update,insert,delete操做;调用rawQuery()方法执行select查询操做;

若是执行的是查询操做,则对返回的Cursor进一步处理。

示列:

布局:

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/listView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_below="@+id/button"/>

android:id="@+id/button"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="添加数据"

android:onClick="btnClick"/>

菜单Menu:

xmlns:app="http://schemas.android.com/apk/res-auto" >

android:id="@+id/insert_item"

app:showAsAction="never"

android:title="插入数据"/>

android:id="@+id/delete_item"

app:showAsAction="never"

android:title="删除数据"/>

android:id="@+id/update_item"

app:showAsAction="never"

android:title="修改数据"/>

Student实例:

public class StudentEntity {

private String name;

private Integer age;

public StudentEntity() {

}

public StudentEntity(String name, Integer age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

@Override

public String toString() {

return "StudentEntity{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

SQLiteOpenHelper类的子类:

public class MyOpenHlper extends SQLiteOpenHelper{

private static final String TABALENAME = "student";

private static final String CREATETABLE = "CREATE TABLE " + TABALENAME

+ "(_id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT, age INTEGER)";

//构造方法,系统会自动建立数据库文件

public MyOpenHlper(Context context,String name,int version){

super(context,name,null,version);

}

//只有在第一次打开数据库的时候调用

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(CREATETABLE);

}

//当数据库的版本发生变化的时候调用

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

//更新表结构或删除旧的表结构

db.execSQL("DROP TABLE IF EXISTS "+TABALENAME);

onCreate(db);

}

}

主函数:

public class MySqlite extends MainActivity{

private static final String TABALENAME = "student";

private ListView mListView;

private List mList;

private MyOpenHlper myOpenHlper;

private SQLiteDatabase db;

private Cursor mCursor;

private SimpleCursorAdapter adapter;

private int index = 0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mysqlite);

init();

downLoadData();

}

public void init(){

mListView = (ListView) findViewById(R.id.listView);

mList = new ArrayList<>();

myOpenHlper = new MyOpenHlper(this,"test.db",2);

db = myOpenHlper.getWritableDatabase();

mCursor = db.rawQuery("select * from "+TABALENAME,null);

adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, mCursor,

new String[]{"name","age"},

new int[]{android.R.id.text1,android.R.id.text2},

SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

mListView.setAdapter(adapter);

}

public void downLoadData(){

mList.add(new StudentEntity("张三",12));

mList.add(new StudentEntity("李四",15));

mList.add(new StudentEntity("王五",18));

mList.add(new StudentEntity("赵六",22));

mList.add(new StudentEntity("麻子", 25));

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main,menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if(id == R.id.insert_item){

if(index

ContentValues values = new ContentValues();

values.put("name",mList.get(index).getName());

values.put("age",mList.get(index).getAge());

db.insert(TABALENAME,null,values);

mCursor = db.rawQuery("select * from "+TABALENAME,null);

adapter.swapCursor(mCursor);

index++;

}

}

return true;

}

/*  public void btnClick(View view){

if(index

ContentValues values = new ContentValues();

values.put("name",mList.get(index).getName());

values.put("age",mList.get(index).getAge());

db.insert(TABALENAME,null,values);

mCursor = db.rawQuery("select * from "+TABALENAME,null);

adapter.swapCursor(mCursor);

index++;

}

}*/

}

其中:SimpleCursorAdapter是CursorAdapter的子类,

使用方式与SimpleAdapter相似

原型:

new SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to , int flags) ;

参数:

1)、Context context, 这个与 SimpleListItemFactory 相关的 ListView 所处运行上下文(context)。也就是这个 ListView 所在的 Activity。

2)、int layout, 显示 list item 的 布局文件。这个 layout 文件中至少要包含在 "to" 参数中命名的 views。

3)、Cursor c, 数据库的光标( Cursor )。若是 cursor 无效,则该参数能够为 null

4)、String[] from, 指定 column 中的哪些列的数据将绑定(显示)到 UI 中。若是 cursor 无效, 则该参数可为 null。

5)、int[] to, 指定用于显示 "from" 参数指定的数据列表的 views。 这些 views 必须都是 TextViews。 "from" 参数的前 N 个值(valus)和 "to" 参数的前 N 个 views 是一一对应的关系。若是 cursor 无效,则该参数可为 null。

6)、flags,用于定义适配器行为的标志位。

Flags used to determine the behavior of the adapter; may be any combination of FLAG_AUTO_REQUERY and FLAG_REGISTER_CONTENT_OBSERVER。

FLAG_AUTO_REQUERY(常量值:1 )从 API11 开始已经废弃。由于他会在应用程序的 UI 线程中执行Cursor查询操做, 致使响应缓慢甚至应用程序中止响应(ANR)application not response的错误。做为替代方案,请使用 LoaderManager 和 CursorLoader.

若是设置FLAG_REGISTER_CONTENT_OBSERVER(常量值:2),适配器会在Cursor上注册一个Observer,当通知到达时会调用 onContentChanged() 方法。

效果图:

原文:https://blog.csdn.net/w_l_s/article/details/62232768

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Android Studio数据作,我们可以使用SQLite数据库。以下是一些基本作: 1.创建数据库 首先,我们需要在Android创建一个SQLite数据库。在Android Studio,你可以通过以下方式创建SQLite数据库: - 创建一个实现SQLiteOpenHelper类的新类 - 在SQLiteOpenHelper类的构造函数使用超类Context、数据库名称和版本号 - 实现onCreate()方法,该方法将在第一次创建数据库时调用 2.添加数据 要向数据库添加数据,请使用SQLiteDatabase类的insert()方法。以下是向数据库添加数据的示例: String sql = "INSERT INTO " + TABLE_NAME + " (name, age) VALUES ('John Doe', 30)"; SQLiteDatabase db = this.getWritableDatabase(); db.execSQL(sql); 3.查询数据 要从数据库检索数据,请使用query()方法。以下是查询数据的示例: String[] columns = {"name", "age"}; String selection = "age > ?"; String[] selectionArgs = {"25"}; Cursor cursor = db.query(TABLE_NAME, columns, selection, selectionArgs, null, null, null); 4.更新数据 可以使用update()方法更新SQLite数据库的数据。以下是更新数据示例: String sql = "UPDATE " + TABLE_NAME + " SET age = 35 WHERE name = 'John Doe'"; SQLiteDatabase db = this.getWritableDatabase(); db.execSQL(sql); 5.删除数据 可以使用delete()方法从SQLite数据库删除数据。以下是删除数据的示例: String sql = "DELETE FROM " + TABLE_NAME + " WHERE name = 'John Doe'"; SQLiteDatabase db = this.getWritableDatabase(); db.execSQL(sql); 希望以上作对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值