我在向 SQLite 表添加列时遇到问题。它显示一条错误消息,指出列local
不存在。我以这种方式接近考试。有人可以帮助我吗?
主要活动:
private Cursor obterCidades() {
String[] projection = {
LocalizacoesContract.CidadeEntry.TABLE_NAME + "." +
LocalizacoesContract.CidadeEntry._ID,
LocalizacoesContract.CidadeEntry.TABLE_NAME + "." +
LocalizacoesContract.CidadeEntry.COLUMN_NAME_NOME_CIDADE + " AS CIDADE ",
LocalizacoesContract.CidadeEntry.TABLE_NAME + "." +
LocalizacoesContract.CidadeEntry.COLUMN_NAME_NOME_LOCAL + " AS LOCAL ",
LocalizacoesContract.PaisEntry.TABLE_NAME + "." +
LocalizacoesContract.PaisEntry.COLUMN_NAME_NOME_PAIS + " AS PAIS "
};
String sortOrder =
LocalizacoesContract.CidadeEntry.TABLE_NAME + "." +
LocalizacoesContract.CidadeEntry.COLUMN_NAME_NOME_CIDADE + " ASC";
c = db.query(
LocalizacoesContract.CidadeEntry.TABLE_NAME + " INNER JOIN " +
LocalizacoesContract.PaisEntry.TABLE_NAME,
projection,
LocalizacoesContract.CidadeEntry.TABLE_NAME + "." +
LocalizacoesContract.CidadeEntry.COLUMN_NAME_ID_PAIS + "=" +
LocalizacoesContract.PaisEntry.TABLE_NAME + "." +
LocalizacoesContract.PaisEntry._ID,
null,
null,
null,
sortOrder
);
return c;
}
这是合同:
import android.provider.BaseColumns;
public final class LocalizacoesContract {
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
// To prevent someone from accidentally instantiating the contract class,
// give it an empty constructor.
public LocalizacoesContract() {}
/* Inner class that defines the table contents */
public static abstract class CidadeEntry implements BaseColumns {
public static final String TABLE_NAME = "cidade";
public static final String COLUMN_NAME_NOME_CIDADE = "nome";
public static final String COLUMN_NAME_NOME_LOCAL = "local";
public static final String COLUMN_NAME_ID_PAIS = "id_pais";
public static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + CidadeEntry.TABLE_NAME + " (" +
CidadeEntry._ID + " INTEGER PRIMARY KEY," +
CidadeEntry.COLUMN_NAME_ID_PAIS + " INTEGER, " +
CidadeEntry.COLUMN_NAME_NOME_CIDADE + TEXT_TYPE +
CidadeEntry.COLUMN_NAME_NOME_LOCAL + TEXT_TYPE +
", FOREIGN KEY (" + CidadeEntry.COLUMN_NAME_ID_PAIS + ") "
+ "REFERENCES " + PaisEntry.TABLE_NAME + "(" + PaisEntry._ID + "));";
public static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + CidadeEntry.TABLE_NAME;
}
/* Inner class that defines the table contents */
public static abstract class PaisEntry implements BaseColumns {
public static final String TABLE_NAME = "pais";
public static final String COLUMN_NAME_NOME_PAIS = "nome";
public static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + PaisEntry.TABLE_NAME + " (" +
PaisEntry._ID + " INTEGER PRIMARY KEY," +
PaisEntry.COLUMN_NAME_NOME_PAIS + TEXT_TYPE + " )";
public static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + PaisEntry.TABLE_NAME;
}
}
它向我显示一个错误,指出列local
不存在。
public static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + CidadeEntry.TABLE_NAME + " (" +
CidadeEntry._ID + " INTEGER PRIMARY KEY," +
CidadeEntry.COLUMN_NAME_ID_PAIS + " INTEGER, " +
CidadeEntry.COLUMN_NAME_NOME_CIDADE + TEXT_TYPE +
CidadeEntry.COLUMN_NAME_NOME_LOCAL + TEXT_TYPE +
", FOREIGN KEY (" + CidadeEntry.COLUMN_NAME_ID_PAIS + ") "
+ "REFERENCES " + PaisEntry.TABLE_NAME + "(" + PaisEntry._ID + "));";
去记录这会产生什么。您会在其中找到一些nome TEXTlocal TEXT
的东西,因为您忘记使用逗号分隔符。
没
关系,我在 2 列之间缺少逗号