簡體   English   中英

Android 房間:SQL 錯誤或缺少數據庫

[英]Android Room: SQL error or missing database

我使用 Room 庫創建了一個數據庫,但我無法構建我的應用程序:

Task.java:8: error: [SQLITE_ERROR] SQL error or missing database (near "t": syntax error)
public class Task {
       ^

這是我的Task調用:

@Entity(tableName = "task")
public class Task {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    private long mId;

    @ColumnInfo(
            name = "name",
            defaultValue = "Unknown Title"
    )
    private String mName;

    @ColumnInfo(
            name = "description",
            defaultValue = "Doesn't have any description!"
    )
    private String mDescription;

    @ColumnInfo(
            name = "isDone",
            defaultValue = "false"
    )
    private boolean mIsDone;


    public String getName() {
        return mName;
    }

    public void setName(String name) {
        if (name.length() > 0) mName = name;
    }

    public String getDescription() {
        return mDescription;
    }

    public void setDescription(String description) {
        if (description.length() > 0) mDescription = description;
    }

    public boolean isDone() {
        return mIsDone;
    }

    public void setIsDone(boolean isDone) {
        mIsDone = isDone;
    }

    public void changeIsDoneState() {
        mIsDone = !mIsDone;
    }

    public long getId() {
        return mId;
    }

    public void setId(long id) {
        this.mId = id;
    }
}

還有我的RoomDatabase

@Database(entities = {Task.class}, version = 1)
public abstract class MainDB extends RoomDatabase {

    public abstract TackDao tackDao();

    private static volatile MainDB INSTANCE;
    public static MainDB getInstance(Context c) {

        if (INSTANCE == null) {
            synchronized (MainDB.class) {
                if (INSTANCE == null) INSTANCE = Room.databaseBuilder(
                        c.getApplicationContext(), MainDB.class, "main"
                ).allowMainThreadQueries().build();
            }
        }
        return INSTANCE;
    }
}

還有我的Dao

@Dao
public interface TackDao {

    @Query("SELECT * FROM task")
    LiveData<List<Task>> getAllTasks();

    @Insert
    long insert(Task task);

    @Update
    int update(Task... tasks);

    @Delete
    int delete(Task... tasks);
}

好像你使用有問題:

 defaultValue = "Doesn't have any description!"

Doesn't中的撇號導致了這個問題

將其更改為:

    @ColumnInfo(
            name = "description",
            defaultValue = "Does not have any description!"
    )

確實有效。 不知道你會如何正確地逃避這個撇號值,甚至可能是不可能的,我嘗試做的是:

    @ColumnInfo(
            name = "description",
            defaultValue = "Doesn''t have any description!"
    )

這似乎工作正常

暫無
暫無

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

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