android数据库的基本简单操作
2015-10-10 17:18
627 查看
接着上一次,本次完成android数据库的简单操作
添加数据:
上一节已经知道调用SQliteOPenHelper的getReadableDatabase()或getWritableDatabase()方法可以用来创建和升级一个数据库,而且这两个方法都会返回一个SQLiteDataBase对象,借助这个对象可以完成对数据库的操作。
具体步骤:
SqliteDateBase提供了一个方法inset(参数一, 参数二, 参数三)其有三个参数,第一个参数:为表名(想要操作的表), 第二个参数:用于在为未指定添加数据的情况下给某些克为空的列自动赋值为空, 一般为null, 第三个参数:是一个Contentvalues对象,其提供了一系列的put ()方法用于向ContentValues中添加数据,只需将列表中的列以及相对应的数据传入即可。
具体代码如下:
这里我插入了两组数据:
SQLiteDatabase db = databaseHelper.getWritableDatabase(); // 打开数据库
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.NAME, "疯狂java");
values.put(MyDatabaseHelper.AUTHOR, "李刚");
values.put(MyDatabaseHelper.PRICE, 100);
db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
// 插入第二条数据
values.put(MyDatabaseHelper.NAME, "疯狂android讲义");
values.put(MyDatabaseHelper.AUTHOR, "李刚");
values.put(MyDatabaseHelper.PRICE, 98);
db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
---------------------------------------------------------
查询数据:
SQliteDatabase提供了一个Query()方法用于对数据进行查询,这个方法有点小复杂,最短的重载也需要传入七个参数,下面解释所有参数, 第一个参数:表名, 第二个参数:指定查询的列,(若不指定则查询所有的列),第三第四个参数用于用于约束查询某一行或某几行的数据,不指定则默认为查询所有行的数据,第五个参数用于指定需要去group by 的列, 不指定则表示不对数据进行group by 操作,第六个参数用于对group by 后的数据进行过滤,不指定则不过滤, 第七个参数:指定查询结果的排序方式,不指定则为默认的排序方式。
调用Query方法会返回一个cursor对象,查询到的所有数据都将从这个对象中提取。
Cursor 类里也提供了几个方法用于对行数据进行操作
moveTofirst();将游标移至第一行如果为空则返回null
moveTonext();将游标移至下一行如果为空则返回null
getColumnIndex():获取某一列在表中对应位置的索引。
代码如下:
private void Select() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = database.query(MyDatabaseHelper.TABLE_NAME, null, null,
null, null, null, null);
while (cursor.moveToNext() != false) {
String name = cursor.getString(cursor
.getColumnIndex(MyDatabaseHelper.NAME));
String author = cursor.getString(cursor
.getColumnIndex(MyDatabaseHelper.AUTHOR));
String price = cursor.getString(cursor
.getColumnIndex(MyDatabaseHelper.PRICE));
Log.d("the name of the book is----> ", name);
Log.d("the name of the book is----> ", author);
Log.d("the name of the book is----> ", price);
}
}
---------------------------------------------------------
删除数据:
SQLiteDatabase中提供了一个delete方法专门用于数据删除,此方法有三个参数,第一个参数仍然是表名,第二个参数,第三个参数用于约束删除某一行或几行的数据,如果不指定的还就删除所有行。
部分代码如下:
private void delete() {
sqLiteDatabase = databaseHelper.getWritableDatabase();
sqLiteDatabase.delete(MyDatabaseHelper.TABLE_NAME, "name = ?",
new String[] { "疯狂java" });
Toast.makeText(this, "done!!!", 2000).show();
}
----------------------------------------------------------------------------------------------------------------------------
升级数据库:
在创建数据库时我们实现了SQLiteOpenHelper其中有一个方法没有使用,onUpgrade(),该方法用于对数据库升级。目前在book.db中已经存在一张表,接下来再添加一张表,
有如下属性:
public static final String TABLE_NAMETWO = "categroy";
public static final String CID = "_cid";
public static final String CATEGROY_NAME = "categroy_name";
public static final String CATEGROY_CODE = "categroy_code";
创建如下:
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + NAME
+ " TEXT NOT NULL, " + AUTHOR + " TEXT NOT NULL," + PRICE
+ " TEXT NOT NULL )");
db.execSQL("CREATE TABLE " + TABLE_NAMETWO + "(" + CID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CATEGROY_NAME
+ " TEXT NOT NULL," + CATEGROY_CODE + " TEXT NOT NULL)");
Toast.makeText(mcontext, "Done!!", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS book");
db.execSQL("DROP TABLE IF EXISTS categroy ");
onCreate(db);
}
如果不使用该方法category表是不会创建成功的,因为books.db已经存在,之后将不会重复创建的,因此OnCreate()方法将不会执行
对于 onUpgrade ()方法中执行两条drop语句,判断存在任何一张表,就将原先的删除,重新创建。
然后在onCreate()方法中将原来的参数该为大于1的值即可。
new MyDatabaseHelper(this, "books.db", null, 2);
在SQLite可视化工具查看如下:
添加数据:
上一节已经知道调用SQliteOPenHelper的getReadableDatabase()或getWritableDatabase()方法可以用来创建和升级一个数据库,而且这两个方法都会返回一个SQLiteDataBase对象,借助这个对象可以完成对数据库的操作。
具体步骤:
SqliteDateBase提供了一个方法inset(参数一, 参数二, 参数三)其有三个参数,第一个参数:为表名(想要操作的表), 第二个参数:用于在为未指定添加数据的情况下给某些克为空的列自动赋值为空, 一般为null, 第三个参数:是一个Contentvalues对象,其提供了一系列的put ()方法用于向ContentValues中添加数据,只需将列表中的列以及相对应的数据传入即可。
具体代码如下:
这里我插入了两组数据:
SQLiteDatabase db = databaseHelper.getWritableDatabase(); // 打开数据库
ContentValues values = new ContentValues();
values.put(MyDatabaseHelper.NAME, "疯狂java");
values.put(MyDatabaseHelper.AUTHOR, "李刚");
values.put(MyDatabaseHelper.PRICE, 100);
db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
// 插入第二条数据
values.put(MyDatabaseHelper.NAME, "疯狂android讲义");
values.put(MyDatabaseHelper.AUTHOR, "李刚");
values.put(MyDatabaseHelper.PRICE, 98);
db.insert(MyDatabaseHelper.TABLE_NAME, null, values);
---------------------------------------------------------
查询数据:
SQliteDatabase提供了一个Query()方法用于对数据进行查询,这个方法有点小复杂,最短的重载也需要传入七个参数,下面解释所有参数, 第一个参数:表名, 第二个参数:指定查询的列,(若不指定则查询所有的列),第三第四个参数用于用于约束查询某一行或某几行的数据,不指定则默认为查询所有行的数据,第五个参数用于指定需要去group by 的列, 不指定则表示不对数据进行group by 操作,第六个参数用于对group by 后的数据进行过滤,不指定则不过滤, 第七个参数:指定查询结果的排序方式,不指定则为默认的排序方式。
调用Query方法会返回一个cursor对象,查询到的所有数据都将从这个对象中提取。
Cursor 类里也提供了几个方法用于对行数据进行操作
moveTofirst();将游标移至第一行如果为空则返回null
moveTonext();将游标移至下一行如果为空则返回null
getColumnIndex():获取某一列在表中对应位置的索引。
代码如下:
private void Select() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = database.query(MyDatabaseHelper.TABLE_NAME, null, null,
null, null, null, null);
while (cursor.moveToNext() != false) {
String name = cursor.getString(cursor
.getColumnIndex(MyDatabaseHelper.NAME));
String author = cursor.getString(cursor
.getColumnIndex(MyDatabaseHelper.AUTHOR));
String price = cursor.getString(cursor
.getColumnIndex(MyDatabaseHelper.PRICE));
Log.d("the name of the book is----> ", name);
Log.d("the name of the book is----> ", author);
Log.d("the name of the book is----> ", price);
}
}
---------------------------------------------------------
删除数据:
SQLiteDatabase中提供了一个delete方法专门用于数据删除,此方法有三个参数,第一个参数仍然是表名,第二个参数,第三个参数用于约束删除某一行或几行的数据,如果不指定的还就删除所有行。
部分代码如下:
private void delete() {
sqLiteDatabase = databaseHelper.getWritableDatabase();
sqLiteDatabase.delete(MyDatabaseHelper.TABLE_NAME, "name = ?",
new String[] { "疯狂java" });
Toast.makeText(this, "done!!!", 2000).show();
}
----------------------------------------------------------------------------------------------------------------------------
升级数据库:
在创建数据库时我们实现了SQLiteOpenHelper其中有一个方法没有使用,onUpgrade(),该方法用于对数据库升级。目前在book.db中已经存在一张表,接下来再添加一张表,
有如下属性:
public static final String TABLE_NAMETWO = "categroy";
public static final String CID = "_cid";
public static final String CATEGROY_NAME = "categroy_name";
public static final String CATEGROY_CODE = "categroy_code";
创建如下:
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + NAME
+ " TEXT NOT NULL, " + AUTHOR + " TEXT NOT NULL," + PRICE
+ " TEXT NOT NULL )");
db.execSQL("CREATE TABLE " + TABLE_NAMETWO + "(" + CID
+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CATEGROY_NAME
+ " TEXT NOT NULL," + CATEGROY_CODE + " TEXT NOT NULL)");
Toast.makeText(mcontext, "Done!!", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS book");
db.execSQL("DROP TABLE IF EXISTS categroy ");
onCreate(db);
}
如果不使用该方法category表是不会创建成功的,因为books.db已经存在,之后将不会重复创建的,因此OnCreate()方法将不会执行
对于 onUpgrade ()方法中执行两条drop语句,判断存在任何一张表,就将原先的删除,重新创建。
然后在onCreate()方法中将原来的参数该为大于1的值即可。
new MyDatabaseHelper(this, "books.db", null, 2);
在SQLite可视化工具查看如下:
相关文章推荐
- Android类-Service - ADIL
- android弹出对话框
- 开发过程中自己遇到的异常(一)
- Android应用截图方法
- android 如何在自定义对话框中获取edittext中的数据
- Android tabhost 切换activity时数据不刷新
- AndroidStudio无法更新代码
- Android 空心和实心按钮
- Android仿搜狗浏览器加载动画
- android图片文件的路径地址与Uri的相互转换
- 如何解决android studio模拟器显示中文乱码的问题?
- android 数据存储SharedPreferences 学习笔记
- Android常见崩溃或闪退的问题描述及原因总结
- Android下常见的内存泄露 经典
- Android实战-使用gradle打多渠道包
- Android动画学习总结---下
- Android内存泄漏分析及调试
- Android之SeekBar定制
- 黑马66期android学习笔记 day7_Service学习笔记
- 倍数提高工作效率的Android Studio奇技