簡體   English   中英

通過選擇無法檢索會議室數據庫中單行的數據

[英]Not able to retrieve data of a single row in room database by selecting it

主要活動

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);

}

我的留言課:-

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();

我的房間數據庫課程:-

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'
}

如何清除錯誤?出什么問題?如何通過在日期和時間字段中進行搜索來讀取單行數據?

我已經添加了整個代碼,請告訴我出了點問題,我堅持了2-3天,這一定是錯誤的,這是什么? 為什么查詢返回null?

您的查詢未返回任何內容。 因此消息為空。 您需要確保查詢返回的結果更好,或者添加代碼以處理未發現任何情況的情況,因為這似乎是一個合理的可能狀態。

調試器可以比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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM