【发布时间】:2021-06-17 00:26:30
【问题描述】:
我正在用 Java 编写一个 Android 应用程序,并且我已经更改了我的数据库,现在我想将它迁移到新版本,但为此我需要计算一些旧值,然后将它们插入其中一个新表进入数据库但是当我调用时
database.execSQL()
使用我的变量然后访问它们似乎没有设置它们,因为每个值都是 0。
这是不可能的,还是我只是错过了什么?
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE 'season' ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
'spring' INTEGER DEFAULT 0, 'summer' INTEGER DEFAULT 0, 'autumn' INTEGER
DEFAULT 0, 'winter'
INTEGER DEFAULT 0, 'spook' INTEGER DEFAULT 0)");
database.execSQL("INSERT INTO 'Clothes' (type_of_clothing,clothing_name,description,seasonId,in_laundry,TypeList) " +
"SELECT type_of_clothing,clothing_name,description,type_of_clothing,in_laundry,TypeList " +
"FROM ClothesNew");
Cursor cursor = database.query("SELECT * FROM Clothes");
Cursor secondCursor = database.query("SELECT * FROM ClothesSeason");
ArrayList<Season> seasonsToBeAdded = new ArrayList<>();
while (cursor.moveToNext()) {
secondCursor.moveToNext();
int Sid = cursor.getInt(0);
String seasonString = secondCursor.getString(2);
Season season = new Season(seasonString);
int tempId = Sid;
boolean isInList = false;
for (Season tempSeason : seasonsToBeAdded) {
if (tempSeason.equals(season)) {
tempId = seasonsToBeAdded.indexOf(tempSeason);
isInList = true;
break;
}
}
if (!isInList) {
season.setId(seasonsToBeAdded.size());
tempId = season.getId();
seasonsToBeAdded.add(season);
}
if (seasonsToBeAdded.size() == 0) {seasonsToBeAdded.add(season);}
database.execSQL("UPDATE Clothes SET seasonId = :tempId WHERE uid = :Sid");
}
int id, spring, summer, autumn, winter, spook;
for (Season season : seasonsToBeAdded) {
id = season.getId();
spring = season.getSpring();
summer = season.getSummer();
autumn = season.getAutumn();
winter = season.getWinter();
spook = season.getSpook();
database.execSQL("INSERT INTO season " +
"VALUES(:id, :spring, :summer, :autumn, :winter, :spook) ");
}
Cursor otherCursor = database.query("SELECT * FROM season");
ArrayList<Integer> springValues= new ArrayList<>();
while (otherCursor.moveToNext()) {
springValues.add(otherCursor.getInt(1));
}
}
当我查看存储在 springValues 中的值时,即使我在此查询中添加了正确的值,它们也都是 0
database.execSQL("INSERT INTO season " +
"VALUES(:id, :spring, :summer, :autumn, :winter, :spook) ");
我可以不在这里使用 :var 符号吗?
【问题讨论】:
标签: java android sqlite android-studio android-room