sql - 无法使用房间数据库获取数据
问题描述
我创建了一个虚拟项目来学习 Room 数据库。我创建了一个 .db 文件并将其保存在名为 database 的目录下的 Assets 文件夹中。我创建了 Database 类、Entity 类和 Dao 接口。编译时,我在 logcat 中收到警告:“com.example.mydatabasetrial3 W/System:资源调用关闭失败。” 不确定这是否重要,因为 gradle 构建成功完成。当我通过单击按钮运行程序时,我在 logcat 中得到以下信息: I/ViewRootImpl@297f419[MainActivity]: ViewPostIme pointer 0 I/ViewRootImpl@297f419[MainActivity]: ViewPostIme pointer 1 D/ContentValues: null
数据库代码
import android.content.Context;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
@Database(entities = {Sample.class}, version =1)
public abstract class SampleDatabase extends RoomDatabase {
public abstract SampleDao sampleDao();
private static volatile SampleDatabase INSTANCE;
static SampleDatabase getInstance(Context context) {
if (INSTANCE == null) {
synchronized (SampleDatabase.class){
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
SampleDatabase.class, "sample")
.createFromAsset("database/simple.db")
.build();
}
}
}
return INSTANCE;
}
}
道码:
package com.example.mydatabasetrial3;
import androidx.room.Dao;
import androidx.room.Query;
@Dao
public interface SampleDao {
@Query("SELECT * FROM simple_table WHERE uid LIKE :uid")
Sample findStocksById(int uid);
}
实体代码
package com.example.mydatabasetrial3;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity (tableName = "simple_table")
public class Sample {
@PrimaryKey(autoGenerate = false)
@ColumnInfo(name = "uid")
private int uid;
@ColumnInfo(name = "year_1")
private int year1;
@ColumnInfo(name ="year_2")
private int year2;
@Override
public String toString() {
return "Sample{" +
"uid=" + uid +
", year1=" + year1 +
", year2=" + year2 +
'}';
}
public Sample(int uid, int year1, int year2) {
this.uid = uid;
this.year1 = year1;
this.year2 = year2;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public int getYear1() {
return year1;
}
public void setYear1(int year1) {
this.year1 = year1;
}
public int getYear2() {
return year2;
}
public void setYear2(int year2) {
this.year2 = year2;
}
}
主要活动
package com.example.mydatabasetrial3;
import static android.content.ContentValues.TAG;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void extract(View view){
new Thread(new Runnable() {
@Override
public void run() {
List<Sample> stocks = (List<Sample>) SampleDatabase.getInstance(getApplicationContext())
.sampleDao()
.findStocksById(2);
Log.d(TAG, String.valueOf(stocks));
}
}).start();
}
}
我的 xml
<?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">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Data"
android:onClick="extract"></Button>
</RelativeLayout>
这是虚拟数据库的 SQL
CREATE TABLE IF NOT EXISTS simple_table (
`uid` INT,
`year_1` INT,
`year_2` INT
);
INSERT INTO simple_table VALUES
(1,23,24),
(2,34,46);
任何帮助,将不胜感激。此外,我的最终目标是预填充更大的 (100x50) 数据库表。有没有更好的方法来做到这一点?
解决方案
推荐阅读
- java - 为什么基于流的方法需要这么长时间才能完成?
- javascript - 如何将jquery实例传递给选择器
- python - PyInstaller 错误:Python 脚本无法运行
- c# - SFML Image.Pixels 和 FIle.ReadAllBytes 有什么区别
- node.js - 按钮单击时未调用 API
- node.js - 有意访问正确的履行请求
- javascript - 自动完成不过滤列表项Angular
- java - 如何处理以下代码中的运行时错误?我正在编写代码以在 java 中查找数字的第一个数字
- javascript - transitionConfig 在本机反应中不起作用
- python - 如何从中提取内容