原创 Android之SQLite 操作实例

2021-8-13 14:01 1542 9 2 分类: 软件与OS 文集: android studio

下面通过一个完整的实例来展示如何进行数据库操作。由于实例中使用的方法在上一篇博文中都已经讲述过,因此不再对具体的方法进行分析,主要通过完整的实例让读者有一个宏观的认知实例将通过创建 100条模拟数据,用ListView 展示出来,同时在ListView中对数据进行删除和更新操作。最后演示如何进行数据库版本更新的操作。

在进行具体的数据库操作之前,先建立一个Java 实体类 User类,再通过这个实体类进行数据的封装。User类中包括 userIdnameage三个属性,具体代码如下:

package com.rfstar.sqlitetest2;
  • public class User {
  • private int userId;
  • private String name;
  • private int age;
  • public int getUserId()
  • {
  • return userId;
  • }
  • public void setUserId(int userId)
  • {
  • this.userId=userId;
  • }
  • public String getName()
  • {
  • return name;
  • }
  • public void setName(String name)
  • {
  • this.name=name;
  • }
  • public int getAge()
  • {
  • return age;
  • }
  • public void setAge(int age)
  • {
  • this.age=age;
  • }
  • }
  • 复制代码

    完成Java实体类的创建之后,通过继承SQLiteOpenHelper实现数据库辅助类,实现其中onCeate()法和onUpgrate()方法onCreate()方法中创建表并使段与User类的属性相一致。同时实现onUpgrate()方法,以更新数据库。

    package com.rfstar.sqlitetest2;
  • import android.content.Context;
  • import android.database.sqlite.SQLiteDatabase;
  • import android.database.sqlite.SQLiteOpenHelper;
  • public class OpenHelper extends SQLiteOpenHelper {
  • private static final String name="test.db";
  • private static final int version=1;
  • public OpenHelper(Context context)
  • {
  • super(context,name,null,version);
  • }
  • @Override
  • public void onCreate(SQLiteDatabase sqLiteDatabase) {
  • sqLiteDatabase.execSQL("CREATE TABLE IF NOT EXISTS "+
  • "user (person_id INTEGER PRIMARY KEY AUTOINCREMENT,"+
  • "name varchar(32),age INTEGER)");
  • }
  • @Override
  • public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
  • if(newVersion>oldVersion)
  • {
  • sqLiteDatabase.execSQL("ALTER TABLE user ADD phone VARCHAR(11)");
  • }
  • }
  • }
  • 复制代码

    接下来创建UserDao类,并在该类中实现对User的增、删、改、查操作,代码如下:

    package com.rfstar.sqlitetest2;
  • import android.content.ContentValues;
  • import android.content.Context;
  • import android.database.Cursor;
  • import android.database.sqlite.SQLiteDatabase;
  • import java.util.ArrayList;
  • import java.util.List;
  • public class UserDao {
  • private SQLiteDatabase database;
  • public UserDao(SQLiteDatabase sqLiteDatabase) {
  • this.database = sqLiteDatabase;
  • }
  • public boolean insert(User user) {
  • ContentValues contentValues = new ContentValues();
  • contentValues.put("name", user.getName());
  • contentValues.put("age", user.getAge());
  • long insertResult = database.insert("user", null, contentValues);
  • if (insertResult == -1) {
  • return false;
  • }
  • return true;
  • }
  • public boolean delete(User user) {
  • int deleteResult = database.delete("user", "user_id+?", new String[]{user.getUserId() + ""});
  • if (deleteResult == 0){
  • return false;
  • }
  • return true;
  • }
  • public boolean update(User user)
  • {
  • ContentValues contentValues=new ContentValues();
  • contentValues.put("name",user.getName());
  • contentValues.put("age",user.getAge());
  • int updateResult=database.update("user",contentValues,"user_id=?",new String[]{user.getUserId()+""});
  • if(updateResult==0)
  • {
  • return false;
  • }
  • return true;
  • }
  • public User queryOne(User user)
  • {
  • Cursor cursor=database.query("user",null,"name=?",new String[]
  • {user.getName()},null,null,null);
  • while (cursor.moveToNext())
  • {
  • user.setUserId(cursor.getInt(0));
  • user.setAge(cursor.getInt(2));
  • }
  • return user;
  • }
  • public List<User> queryAll()
  • {
  • List<User> userList=new ArrayList<>();
  • Cursor cursor=database.query("user",null,null,null,null,null,null);
  • while (cursor.moveToNext())
  • {
  • User user=new User();
  • user.setUserId(cursor.getInt(0));
  • user.setName(cursor.getString(1));
  • user.setAge(cursor.getInt(2));
  • userList.add(user);
  • }
  • return userList;
  • }
  • }
  • 复制代码

    当完成上述3个类之后,接下来就可以使用Activity进行各项操作了(1)创建数据

    创建一个MainActivity,并在MainActivity中创建一个循环生成100条数据的方法,代码如下:

    package com.rfstar.sqlitetest2;
  • import androidx.appcompat.app.AppCompatActivity;
  • import android.database.sqlite.SQLiteDatabase;
  • import android.os.Bundle;
  • import android.util.Log;
  • import android.widget.ListView;
  • import android.widget.SimpleAdapter;
  • import java.util.ArrayList;
  • import java.util.HashMap;
  • import java.util.List;
  • import java.util.Map;
  • public class MainActivity extends AppCompatActivity {
  • private OpenHelper openHelper;
  • @Override
  • protected void onCreate(Bundle savedInstanceState) {
  • super.onCreate(savedInstanceState);
  • setContentView(R.layout.activity_main);
  • openHelper=new OpenHelper(this);
  • initData();
  • }
  • private void initData()
  • {
  • SQLiteDatabase sqLiteDatabase=openHelper.getReadableDatabase();
  • UserDao userDao=new UserDao(sqLiteDatabase);
  • sqLiteDatabase.beginTransaction();
  • try
  • {
  • User user=new User();
  • for(int i=0;i<100;i++)
  • {
  • user.setName("大鸟科创空间"+i);
  • user.setAge(6);
  • userDao.insert(user);
  • }
  • sqLiteDatabase.setTransactionSuccessful();
  • }catch (Exception e)
  • {
  • Log.e("user Transaction",e.toString());
  • }finally {
  • sqLiteDatabase.endTransaction();
  • sqLiteDatabase.close();
  • }
  • }
  • }
  • 复制代码

    此时运行程序在手机上,数据就创建成功了。我们将在下一部分进行验证。

    (2)展示数据

    在上一部分创建了100条数据的基础上,用ListView来展现这些数据。这需要修改Acticity的布局文件,并创建一个item布局文件,同时在Activity中查询数据。由于数据中只有name age两个文本,因此选择 SimpleAdapter 作为 ListView 的适配器。

    在布局文件中加入一个ListView控件:

    <?xml version="1.0" encoding="utf-8"?>
  • <RelativeLayout 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"
  • tools:context=".MainActivity">
  • <ListView
  • android:id="@+id/user_list"
  • android:layout_width="match_parent"
  • android:layout_height="wrap_content"/>
  • </RelativeLayout>
  • 复制代码

    为了能够展示出数据中的name和age两个字段,我们创建一个item:

    <?xml version="1.0" encoding="utf-8"?>
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  • android:layout_width="match_parent"
  • android:layout_height="match_parent">
  • <TextView
  • android:id="@+id/user_name"
  • android:layout_width="0dp"
  • android:layout_height="match_parent"
  • android:layout_weight="1"
  • android:layout_gravity="center"
  • android:textSize="20dp"/>
  • <TextView
  • android:id="@+id/user_age"
  • android:layout_width="0dp"
  • android:layout_height="match_parent"
  • android:layout_weight="1"
  • android:gravity="center_vertical"
  • android:textSize="20dp"/>
  • </LinearLayout>
  • 复制代码

    完成了这几个步骤之后,就可以在MainActivity中查询数据库并使用适配器展示到ListView中了。此时不再需要创建数据,不再使用之前创建数据的方法。代码修改如下:

    package com.rfstar.sqlitetest2;
  • import androidx.appcompat.app.AppCompatActivity;
  • import android.database.sqlite.SQLiteDatabase;
  • import android.os.Bundle;
  • import android.widget.ListView;
  • import android.widget.SimpleAdapter;
  • import java.util.ArrayList;
  • import java.util.HashMap;
  • import java.util.List;
  • import java.util.Map;
  • public class MainActivity extends AppCompatActivity {
  • private ListView listView;
  • private List<Map<String,Object>> mapList;
  • private OpenHelper openHelper;
  • private List<User>userList;
  • @Override
  • protected void onCreate(Bundle savedInstanceState) {
  • super.onCreate(savedInstanceState);
  • setContentView(R.layout.activity_main);
  • initData();
  • initView();
  • }
  • private void initView()
  • {
  • listView=(ListView)findViewById(R.id.user_list);
  • final SimpleAdapter simpleAdapter=new SimpleAdapter(
  • this,mapList,R.layout.item,new String[]{"name","age"},
  • new int[]{R.id.user_name,R.id.user_age});
  • listView.setAdapter(simpleAdapter);
  • }
  • private void initData()
  • {
  • openHelper=new OpenHelper(this);
  • SQLiteDatabase sqLiteDatabase=openHelper.getReadableDatabase();
  • UserDao userDao=new UserDao(sqLiteDatabase);
  • userList =userDao.queryAll();
  • mapList=new ArrayList<>();
  • for(User user:userList)
  • {
  • Map<String,Object> map=new HashMap<>();
  • map.put("name",user.getName());
  • map.put("age",user.getAge());
  • mapList.add(map);
  • }
  • sqLiteDatabase.close();
  • }
  • }
  • 复制代码

    运行程序,就会发现创建数据时添加的100条数据显示在界面上了,效果如下图所示:

    作者: 大鸟科创空间, 来源:面包板社区

    链接: https://mbb.eet-china.com/blog/uid-me-3949041.html

    版权声明:本文为博主原创,未经本人允许,禁止转载!

    PARTNER CONTENT

    文章评论0条评论)

    登录后参与讨论
    我要评论
    0
    9
    关闭 站长推荐上一条 /3 下一条