findAll使用时遇到的问题
当我们用findAll查询数据时,一般情况下都是可以查询到的,但是当我们的表中有一个外键时,如以下代码:Song是与Album相关联的一个表,这里Album与Song是一对多的关系
public class Album extends DataSupport {
private String name;
private double price;
private List<Song> songs = new ArrayList<Song>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Song> getSongs() {
return songs;
}
public void setSongs(List<Song> songs) {
this.songs = songs;
}
public void addSong(Song song)
{
this.songs.add(song);
}
public Album(double price,String name)
{
this.price=price;
this.name=name;
}
public void setPrice(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
}
Song.java代码
public class Song extends DataSupport {
private String name;
private String songer;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSonger() {
return songer;
}
public void setSonger(String songer) {
this.songer = songer;
}
public Song(String name,String songer)
{
this.songer=songer;
this.name=name;
}
}
主函数MainActivity.java
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// SQLiteDatabase db=LitePal.getDatabase();
bindId();
addDate();
}
private void addDate()
{
if(!DataSupport.findAll(Album.class).isEmpty())
{
DataSupport.deleteAll(Album.class);
DataSupport.deleteAll(Song.class);
}
Song song = new Song("123","1223");
song.save();
Song song1 = new Song("233","121212");
song1.save();
Song song2 = new Song("23232323","34424232432");
song2.save();
Album album = new Album(1.32,"121212");
album.addSong(song);
album.addSong(song1);
album.addSong(song2);
album.save();
Album album1 = new Album(2.34,"@3433422");
album1.addSong(song1);
album1.save();
List<Album> albums = DataSupport.findAll(Album.class,true);
Album album2 = albums.get(0);
List<Song> songs = album2.getSongs();
textView.setText(String.valueOf(songs.size()));
}
private void bindId() {
textView=findViewById(R.id.text);
}
}
注意,我们要获得一个album下的所有歌曲,要用如下代码:
List<Album> albums = DataSupport.findAll(Album.class,true);
Album album2 = albums.get(0);
List<Song> songs = album2.getSongs();
textView.setText(String.valueOf(songs.size()));
findAll后面的参数true不能丢,这是激进查询,它可以将关联表中的数据也查出来,如果没有了true,就无法查询到关联表中的数据。但这种方法的缺点是速度比较慢,而且无法迭代。