Android studio SQLite—数据库存储
往期我们讲过:
初级登录界面:https://blog.youkuaiyun.com/genijmni/article/details/106240013
登录界面记住密码:https://blog.youkuaiyun.com/genijmni/article/details/106479481
APP启动动画、隐藏标题栏、隐藏系统状态栏:
https://blog.youkuaiyun.com/genijmni/article/details/106588165
这次我们将通过数据库实例,了解Android studio SQLite数据库存储的增、删、改、查。
创建数据库
先创建MyDatabaseHelp类继承SQLiteOpenHelper帮助类,然后创建一个student数据库。
表中含有id、stuName、stuNumber、stuAge、stuAddress、stuColleage、stuRemarks、stuRemarks属性。
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_Student = "create table student ("
+ "id integer primary key autoincrement, "
+ "stuName text, "
+ "stuNumber text, "
+ "stuAge integer, "
+ "stuAddress text,"
+ "stuColleage text,"
+ "stuRemarks text)";
private Context mContext;
public MyDatabaseHelper( Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_Student);
Toast.makeText(mContext, "创建成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
目前我们完成了数据库的初步建立,表中拥有了id、姓名、学号、年龄、地址、学校、用户备注的属性。
效果如图:
数据库功能
数据库的四大基础功能:增、删、改、查。通过四大基础功能完成对数据的控制。我们通过配置JAVA文件完成四大功能。
增加数据
我们在JAVA文件中添加我们需要增加的数据,在数据库创建后,点击增加数据按钮和查询数据按钮完成数据的添加和查看,我们在此添加两条数据,一条用来保留,一条用来删除。
Button addData = (Button)findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();//临时变量
values.put("stuName","优快云D");
values.put("stuNumber","10");
values.put("stuAge",21);
values.put("stuAddress","省份");
values.put("stuColleage","学校");
values.put("stuRemarks","删除");
db.insert("Student",null,values);// 插入第一条数据
values.clear();// 开始插入第二条数据
values.put("stuName","优快云");
values.put("stuRemarks","此条信息用来测试删除,用来保留");
db.insert("student",null,values);
}
});
==getWritableDatabase()==为写入
效果如图:
删除数据
通过我们添加的数据可得知:我们想要删除一条数据,但我们如何准确的删除我们想要删除的数据呢?这里我们需要对删除数据定位:
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("student","stuName=?",new String[]{"优快云D"});
这里我通过对姓名进行定位,删除姓名为:优快云D的数据
删除数据定位出来姓名,还可以是ID,学号,年龄,地址,学校,备注。只要是数据库里的属性,都可以用来定位。
删除数据完整代码:
Button deleteButton = (Button) findViewById(R.id.delete_data);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("student","stuName=?",new String[]{"优快云D"});
//删除一个数据
}
});
效果如图:
修改数据
修改数据的方法和删除数据类似,也需要定位。定位你所要修改的属性。例如 我想要修改学校:
ContentValues values = new ContentValues();
values.put("stuColleage","优快云学院");
db.update("student", values,null,null);
这样,学校属性就全部跟改为:优快云学院。
修改数据完整代码:
Button updataData = (Button)findViewById(R.id.updata_data);
updataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("stuColleage","优快云学院");
db.update("student", values,null,null);
}
});
查询数据
查询表中的数据要遍历Cursor对象,取出数据并打印:
if(cursor.moveToFirst()){
do{
// 遍历Cursor对象,取出数据并打印
int id = cursor.getInt(cursor.getColumnIndex("id"));
String stuName = cursor.getString(cursor.getColumnIndex("stuName"));
String stuNumber = cursor.getString(cursor.getColumnIndex("stuNumber"));
int stuAge = cursor.getInt(cursor.getColumnIndex("stuAge"));
String stuAddress = cursor.getString(cursor.getColumnIndex("stuAddress"));
String stuColleage = cursor.getString(cursor.getColumnIndex("stuColleage"));
String stuRemarks = cursor.getString(cursor.getColumnIndex("stuRemarks"));
content.append(id+"\t\t"+stuName+"\t\t\t\t"+
stuNumber+"\t\t\t\t\t"+stuAge+"\t\t\t\t\t\t\t"
+stuAddress+"\t\t\t" +stuColleage+"\t\t\t\t"+stuRemarks+"\n");
}while(cursor.moveToNext());
}
是通过遍历Cursor,把数据结果取出来后,在TextView展示出来:
extView.setText(content.toString());
这样就可以在界面中看到我们需要的结果:
查询数据完整代码:
Button queryButton= (Button) findViewById(R.id.query_data);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 查询Student表中所有的数据
Cursor cursor = db.query("student",null,null,null,null,null,null);
StringBuilder content = new StringBuilder(); //转义字符
content.append("id"+"\t\t"+"stuName"+"\t\t"+
"stuNumber"+"\t\t"+"stuAge"+"\t\t"
+"stuAddress"+"\t\t" +"stuColleage"+"\t\t"+"stuRemarks"+"\n");
if(cursor.moveToFirst()){
do{
// 遍历Cursor对象,取出数据并打印
int id = cursor.getInt(cursor.getColumnIndex("id"));
String stuName = cursor.getString(cursor.getColumnIndex("stuName"));
String stuNumber = cursor.getString(cursor.getColumnIndex("stuNumber"));
int stuAge = cursor.getInt(cursor.getColumnIndex("stuAge"));
String stuAddress = cursor.getString(cursor.getColumnIndex("stuAddress"));
String stuColleage = cursor.getString(cursor.getColumnIndex("stuColleage"));
String stuRemarks = cursor.getString(cursor.getColumnIndex("stuRemarks"));
content.append(id+"\t\t"+stuName+"\t\t\t\t"+
stuNumber+"\t\t\t\t\t"+stuAge+"\t\t\t\t\t\t\t"
+stuAddress+"\t\t\t" +stuColleage+"\t\t\t\t"+stuRemarks+"\n");
}while(cursor.moveToNext());
}
cursor.close();
textView.setText(content.toString());
}
});
效果如下:
我会在下面贴上完整的布局代码和JAVA文件代码。
布局代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:text="创建数据库"
android:id="@+id/create_database"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="增加数据"
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="修改数据"
android:id="@+id/updata_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="删除数据"
android:id="@+id/delete_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:text="查看数据"
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:text="查询数据结果:"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
JAVA代码
public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = findViewById(R.id.textView);
dbHelper = new MyDatabaseHelper(this,"student.db",null,1);
Button createDatabase = (Button)findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){dbHelper.getWritableDatabase();}});
Button addData = (Button)findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();//临时变量
values.put("stuName","优快云D");
values.put("stuNumber","10");
values.put("stuAge",21);
values.put("stuAddress","省份");
values.put("stuColleage","学校");
values.put("stuRemarks","删除");
db.insert("Student",null,values);// 插入第一条数据
values.clear();// 开始插入第二条数据
values.put("stuName","优快云");
values.put("stuRemarks","此条信息用来测试删除,用来保留");
db.insert("student",null,values);
}
});
Button updataData = (Button)findViewById(R.id.updata_data);
updataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("stuColleage","优快云学院");
db.update("student", values,null,null);
}
});
Button deleteButton = (Button) findViewById(R.id.delete_data);
deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("student","stuName=?",new String[]{"优快云D"});
//删除一个数据
}
});
Button queryButton= (Button) findViewById(R.id.query_data);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 查询Student表中所有的数据
Cursor cursor = db.query("student",null,null,null,null,null,null);
StringBuilder content = new StringBuilder(); //转义字符
content.append("id"+"\t\t"+"stuName"+"\t\t"+
"stuNumber"+"\t\t"+"stuAge"+"\t\t"
+"stuAddress"+"\t\t" +"stuColleage"+"\t\t"+"stuRemarks"+"\n");
if(cursor.moveToFirst()){
do{
// 遍历Cursor对象,取出数据并打印
int id = cursor.getInt(cursor.getColumnIndex("id"));
String stuName = cursor.getString(cursor.getColumnIndex("stuName"));
String stuNumber = cursor.getString(cursor.getColumnIndex("stuNumber"));
int stuAge = cursor.getInt(cursor.getColumnIndex("stuAge"));
String stuAddress = cursor.getString(cursor.getColumnIndex("stuAddress"));
String stuColleage = cursor.getString(cursor.getColumnIndex("stuColleage"));
String stuRemarks = cursor.getString(cursor.getColumnIndex("stuRemarks"));
content.append(id+"\t\t"+stuName+"\t\t\t\t"+
stuNumber+"\t\t\t\t\t"+stuAge+"\t\t\t\t\t\t\t"
+stuAddress+"\t\t\t" +stuColleage+"\t\t\t\t"+stuRemarks+"\n");
}while(cursor.moveToNext());
}
cursor.close();
textView.setText(content.toString());
}
});
}
}
本次我们初步去学习SQLite数据库存储的增、删、改、查四大方法的使用。
下一回,我们将SQLite存储运用到注册登录,通过数据库进行注册登录。
也欢迎大家回顾我们往期讲过的初级登录界面、登录界面记住密码、APP启动动画、隐藏标题栏、隐藏系统状态栏的文章。
初级登录界面:https://blog.youkuaiyun.com/genijmni/article/details/106240013
登录界面记住密码:https://blog.youkuaiyun.com/genijmni/article/details/106479481
APP启动动画、隐藏标题栏、隐藏系统状态栏:
https://blog.youkuaiyun.com/genijmni/article/details/106588165