Android Studio 为什么我的数据库视图名称在我的Dao中显示为non found?

smdncfj3  于 2023-02-05  发布在  Android
关注(0)|答案(1)|浏览(223)

我不知道为什么,但Android Studio找不到我的DatabaseView。即使我安装其他项目
这是数据库视图。它在一个名为LibroDatos的类中创建。

package com.example.pruebaexamenroom;

import androidx.room.DatabaseView;

@DatabaseView(value = "SELECT libro.id, libro.titulo, libro.autor," +
        "libro.idCliente,cliente.name as nombreCliente FROM libro " +
        "INNER JOIN Cliente ON libro.idCliente = cliente.idHumano",
            viewName = "v_LibroDatos")

public class LibroDatos {
    public int id;
    public String Titulo;
    public String Autor;
    public int idCliente;
    public String nombreCliente;

}

这就是道,这里就是说不存在的地方

package com.example.pruebaexamenroom;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Transaction;

import java.util.List;
@Dao
public interface DaoLibro {
        @Transaction
        @Query("SELECT * FROM v_LibroDatos")
        List<LibroDatos> obtenerLibros();

        @Insert
        void InsertarLibro(Libro...libros);

        @Query("UPDATE libro SET titulo =:titulo,autor=:autor WHERE id =:id")
        void updateLibro(int id,String titulo,String autor);

        @Query("DELETE FROM libro")
        void borrarLibro();

        
}

这是AppDatabase。它的所有声明都在这里。

package com.example.pruebaexamenroom;

import androidx.room.Database;
import androidx.room.RoomDatabase;

@Database(
        entities = {Libro.class, Cliente.class},
        views = {LibroDatos.class},
        version = 1
)
public abstract class AppDatabase extends RoomDatabase {
    public abstract DaoCliente daoCliente();
    public abstract DaoLibro daoLibro();
}
nwsw7zdq

nwsw7zdq1#

我相信您可以忽略这个错误,并且项目将成功编译。
如果在编写obtenerLibros Query时为视图键入v,您将看到它在提示完成时知道,例如:

但仍然将其标记为错误。然而,它成功地编译了。

注意如果您查看构建日志,则会看到警告:-

warning: The query returns some columns [titulo, autor] which are not used by a.a.so75347005javaroomviewnotfound.LibroDatos. You can use @ColumnInfo annotation on the fields to specify the mapping. You can annotate the method with @RewriteQueriesToDropUnusedColumns to direct Room to rewrite your query to avoid fetching unused columns. 
a.a.so75347005javaroomviewnotfound.LibroDatos has some fields [Titulo, Autor] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: id, titulo, autor, idCliente, nombreCliente. - a.a.so75347005javaroomviewnotfound.DaoLibro.obtenerLibros()

所以你不妨
1.包括@RewriteQueriesToDropUnusedColumns注解
1.将LibroDatos类中的成员变量重命名为小写。
对于1:-

@Transaction
@RewriteQueriesToDropUnusedColumns //<<<<<<<<<< ADDED
@Query("SELECT * FROM v_LibroDatos")
List<LibroDatos> obtenerLibros();

第2名:-

public class LibroDatos {
   public int id;
   public String titulo; //<<<<<<<<<< was Titulo
   public String autor; //<<<<<<<<< was Autor
   public int idCliente;
   public String nombreCliente;

}

相关问题