无法通过选择检索房间数据库中单行的数据
Not able to retrieve data of a single row in room database by selecting it
主要Activity
myRoomDatabase3 = Room.databaseBuilder(getApplicationContext(),MyRoomDatabase.class,"messagedb3").fallbackToDestructiveMigration().allowMainThreadQueries().build();
Message message4 = new Message();
message4.setTime("14:10");
message4.setContactName("Deepika");
message4.setDate("02-12-2018");
message4.setMsg("HI");
MainActivity.myRoomDatabase3.myDao().addMessage(message4);
Toast.makeText(MainActivity.this,"Message added",Toast.LENGTH_SHORT).show();
MyDao接口代码:-
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
@Dao
public interface MyDao {
@Insert
public void addMessage(Message message);
@Query("SELECT * FROM messages3 WHERE message_date LIKE :givenDate AND " + "message_time LIKE :givenTime LIMIT 1")
public Message getMessageInfo(String givenDate,String givenTime);
}
我的留言class:-
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
@Entity(tableName = "messages3")
public class Message {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "message_date")
private String date;
@ColumnInfo(name = "message_time")
private String time;
@ColumnInfo(name = "message_contactName")
private String contactName;
@ColumnInfo(name = "message_msg")
private String msg;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg= msg;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
正在尝试从给定日期和时间的数据库的一行中检索数据:-
Calendar calender = Calendar.getInstance();
calender.set(Calendar.YEAR,2018);
calender.set(Calendar.MONTH, 11);
calender.set(Calendar.DAY_OF_MONTH, 02);
SimpleDateFormat simpledateformat = new SimpleDateFormat("dd-MM-yyyy");
String Date = simpledateformat.format(calender.getTime());
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 14);
cal.set(Calendar.MINUTE, 10);
cal.set(Calendar.SECOND,00);
SimpleDateFormat simpletimeformat = new SimpleDateFormat("hh:mm");
String Time = simpletimeformat.format(cal.getTime());
Message message = MainActivity.myRoomDatabase3.myDao().getMessageInfo(Date,Time);
String contactName = (message==null) ? "No data found" : message.getContactName();
String text = (message == null) ? "No data found" : message.getMsg();
我的房间数据库class:-
import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
@Database(entities = {Message.class},version = 12,exportSchema = false)
public abstract class MyRoomDatabase extends RoomDatabase {
public abstract MyDao myDao();
}
我的build.gradle文件:-
allprojects {
repositories {
google()
jcenter()
}
}
依赖项-
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
}
如何消除错误?哪里出了问题?如何从日期和时间字段中搜索读取单行数据?
我已经添加了我的全部代码 using.Please 请告诉我一些事情 wrong.I 我坚持了 2-3 days.Something 必须是 wrong.What是吗?
为什么查询返回空值?
您的查询未返回任何内容。所以消息为空。您需要确保您的查询 returns 或更好,添加代码以处理未找到任何内容的情况,因为这似乎是合理的可能状态。
调试器可以比 SO 更快地给出相同的答案。
这将避免 NullPointerException:
String text = (message == null) ? “No data found.” : message.getMsg();
如果您希望结果仅作为 Message 的单个记录,请使用以下查询:
SELECT * FROM messages WHERE message_date= :givenDate AND message_time= :givenTime LIMIT 1
现在,它将查询结果绑定到提供的消息对象。
我找到了,这完全是一个愚蠢的错误。
当我将信息输入数据库时,我将时间输入为 14:10 但是当我尝试访问它时,我使用的时间格式是 "hh:mm" 而不是 "HH:mm" 所以我试图找到时间为 02:10 而不是 14:10 的列。这是两个不同的值,因此返回 null。
主要Activity
myRoomDatabase3 = Room.databaseBuilder(getApplicationContext(),MyRoomDatabase.class,"messagedb3").fallbackToDestructiveMigration().allowMainThreadQueries().build();
Message message4 = new Message();
message4.setTime("14:10");
message4.setContactName("Deepika");
message4.setDate("02-12-2018");
message4.setMsg("HI");
MainActivity.myRoomDatabase3.myDao().addMessage(message4);
Toast.makeText(MainActivity.this,"Message added",Toast.LENGTH_SHORT).show();
MyDao接口代码:-
import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
@Dao
public interface MyDao {
@Insert
public void addMessage(Message message);
@Query("SELECT * FROM messages3 WHERE message_date LIKE :givenDate AND " + "message_time LIKE :givenTime LIMIT 1")
public Message getMessageInfo(String givenDate,String givenTime);
}
我的留言class:-
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Entity;
import android.arch.persistence.room.PrimaryKey;
@Entity(tableName = "messages3")
public class Message {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "message_date")
private String date;
@ColumnInfo(name = "message_time")
private String time;
@ColumnInfo(name = "message_contactName")
private String contactName;
@ColumnInfo(name = "message_msg")
private String msg;
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg= msg;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
正在尝试从给定日期和时间的数据库的一行中检索数据:-
Calendar calender = Calendar.getInstance();
calender.set(Calendar.YEAR,2018);
calender.set(Calendar.MONTH, 11);
calender.set(Calendar.DAY_OF_MONTH, 02);
SimpleDateFormat simpledateformat = new SimpleDateFormat("dd-MM-yyyy");
String Date = simpledateformat.format(calender.getTime());
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 14);
cal.set(Calendar.MINUTE, 10);
cal.set(Calendar.SECOND,00);
SimpleDateFormat simpletimeformat = new SimpleDateFormat("hh:mm");
String Time = simpletimeformat.format(cal.getTime());
Message message = MainActivity.myRoomDatabase3.myDao().getMessageInfo(Date,Time);
String contactName = (message==null) ? "No data found" : message.getContactName();
String text = (message == null) ? "No data found" : message.getMsg();
我的房间数据库class:-
import android.arch.persistence.room.Database;
import android.arch.persistence.room.RoomDatabase;
@Database(entities = {Message.class},version = 12,exportSchema = false)
public abstract class MyRoomDatabase extends RoomDatabase {
public abstract MyDao myDao();
}
我的build.gradle文件:-
allprojects {
repositories {
google()
jcenter()
}
}
依赖项-
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
}
如何消除错误?哪里出了问题?如何从日期和时间字段中搜索读取单行数据?
我已经添加了我的全部代码 using.Please 请告诉我一些事情 wrong.I 我坚持了 2-3 days.Something 必须是 wrong.What是吗? 为什么查询返回空值?
您的查询未返回任何内容。所以消息为空。您需要确保您的查询 returns 或更好,添加代码以处理未找到任何内容的情况,因为这似乎是合理的可能状态。
调试器可以比 SO 更快地给出相同的答案。
这将避免 NullPointerException:
String text = (message == null) ? “No data found.” : message.getMsg();
如果您希望结果仅作为 Message 的单个记录,请使用以下查询:
SELECT * FROM messages WHERE message_date= :givenDate AND message_time= :givenTime LIMIT 1
现在,它将查询结果绑定到提供的消息对象。
我找到了,这完全是一个愚蠢的错误。 当我将信息输入数据库时,我将时间输入为 14:10 但是当我尝试访问它时,我使用的时间格式是 "hh:mm" 而不是 "HH:mm" 所以我试图找到时间为 02:10 而不是 14:10 的列。这是两个不同的值,因此返回 null。