一、
在Android开发中,SQLite是一个轻量级的关系型数据库管理系统,常用于移动设备上存储结构化数据,本文将详细讲解如何在Android应用中创建数据库,并进行数据的插入与查询操作,最后通过ListView或RecyclerView展示数据。
二、准备工作
环境搭建:确保已安装Android Studio,并创建一个新的Android项目。
添加依赖:对于使用Room持久库(推荐方式)的项目,需在build.gradle
文件中添加相应依赖。
implementation "androidx.room:room-runtime:2.3.0" annotationProcessor "androidx.room:room-compiler:2.3.0"
三、创建数据库
1. 定义实体类
定义一个实体类来映射数据库表结构,创建一个User
类表示用户信息。
import androidx.room.Entity; import androidx.room.PrimaryKey; @Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) public int id; public String name; public String email; }
2. 创建DAO接口
数据访问对象(DAO)提供了访问数据库的方法,为User
实体创建一个DAO接口。
import androidx.room.Dao; import androidx.room.Insert; import androidx.room.Query; import java.util.List; @Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT * FROM users") List<User> getAllUsers(); }
3. 创建数据库
使用Room库的Room.databaseBuilder
方法创建数据库实例。
import android.content.Context; import androidx.room.Database; import androidx.room.Room; import androidx.room.RoomDatabase; @Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); private static volatile AppDatabase INSTANCE; static AppDatabase getDatabase(final Context context) { if (INSTANCE == null) { synchronized (AppDatabase.class) { if (INSTANCE == null) { INSTANCE = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user_database") .build(); } } } return INSTANCE; } }
四、插入和查询数据
1. 插入数据
在活动或片段中,获取UserDao
实例并插入数据。
new Thread(new Runnable() { @Override public void run() { User user = new User(); user.name = "John Doe"; user.email = "john.doe@example.com"; AppDatabase.getDatabase(MainActivity.this).userDao().insert(user); } }).start();
2. 查询数据并更新UI
同样在后台线程中查询数据,然后通过Handler
或LiveData
(更推荐)更新UI。
new Thread(new Runnable() { @Override public void run() { final List<User> users = AppDatabase.getDatabase(MainActivity.this).userDao().getAllUsers(); runOnUiThread(new Runnable() { @Override public void run() { // 更新UI,如设置给Adapter } }); } }).start();
五、显示数据
使用ListView显示数据
定义布局文件activity_main.xml
,包含一个ListView:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
创建一个ArrayAdapter
来绑定数据到ListView:
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, userEmails); listView.setAdapter(adapter);
使用RecyclerView显示数据(推荐方式)
定义布局文件item_user.xml
作为每个项目的视图:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/textViewName" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textViewEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
创建UserAdapter
类继承RecyclerView.Adapter
:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHolder> { private List<User> users; public UserAdapter(List<User> users) { this.users = users; } @NonNull @Override public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false); return new UserViewHolder(view); } @Override public void onBindViewHolder(@NonNull UserViewHolder holder, int position) { User user = users.get(position); holder.nameTextView.setText(user.name); holder.emailTextView.setText(user.email); } @Override public int getItemCount() { return users.size(); } static class UserViewHolder extends RecyclerView.ViewHolder { TextView nameTextView; TextView emailTextView; public UserViewHolder(@NonNull View itemView) { super(itemView); nameTextView = itemView.findViewById(R.id.textViewName); emailTextView = itemView.findViewById(R.id.textViewEmail); } } }
在活动中设置RecyclerView和适配器:
RecyclerView recyclerView = findViewById(R.id.recyclerView); recyclerView.setLayoutManager(new LinearLayoutManager(this)); UserAdapter adapter = new UserAdapter(users); // 假设users是查询得到的数据列表 recyclerView.setAdapter(adapter);
六、归纳
通过上述步骤,我们成功在Android应用中创建了一个SQLite数据库,实现了数据的插入、查询,并通过ListView和RecyclerView展示了数据,虽然直接使用SQLite和Cursor进行数据操作也是可行的,但Room持久库以其更简洁、更易维护的特点成为现代Android开发的首选。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1267861.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复