SQLiteException - нет такой таблицы - PullRequest
1 голос
/ 26 мая 2011

Я получаю эту ошибку, когда пытаюсь получить доступ к своему представлению

Я построил свою базу данных / Просмотр с использованием

CREATE TABLE Boxer(
BoxerId INTEGER PRIMARY KEY AUTOINCREMENT,
Firstname NVARCHAR(50) NOT NULL,
Lastname NVARCHAR(50) NOT NULL
);

CREATE TABLE Match(
MatchId INTEGER PRIMARY KEY AUTOINCREMENT,
BoxerA INTEGER NOT NULL FOREIGN KEY REFERENCES Boxer(BoxerId),
BoxerB INTEGER NOT NULL FOREIGN KEY REFERENCES Boxer(BoxerId),
MatchDate date NOT NULL DEFAULT GETDATE(),
NumberOfRounds INTEGER NOT NULL DEFAULT  12
);

CREATE TABLE Round(
RoundId INTEGER PRIMARY KEY AUTOINCREMENT,
MatchId INTEGER NOT NULL FOREIGN KEY REFERENCES Match(MatchId),
BoxerA INTEGER NOT NULL DEFAULT 0,
BoxerB INTEGER NOT NULL DEFAULT 0,
Position INTEGER NOT NULL
);

/*
Building a view which dislpays matches with boxers names and total scores
*/
CREATE VIEW MatchDetail AS
SELECT Match.MatchId, A.BoxerId AS IdA, B.BoxerId AS IdB, A.Firstname + ' ' + A.Lastname         AS NameA, B.Firstname + ' ' + B.Lastname AS NameB,
(SELECT SUM(R.BoxerA) AS Score FROM Round AS R WHERE (R.MatchId = Match.MatchId)) AS ScoreA,
(SELECT SUM(R.BoxerB) AS Score FROM Round AS R WHERE (R.MatchId = Match.MatchId)) AS ScoreB, 
Match.MatchDate, Match.NumberOfRounds
FROM Boxer AS A INNER JOIN Match ON A.BoxerId = Match.BoxerA INNER JOIN Boxer AS B ON     Match.BoxerB = B.BoxerId

До сих пор я в значительной степени построил свое приложение, используя пример блокнота, поэтому я затем вызываю свой DbHelper

Cursor MatchesCursor = mDbHelper.fetchAllMatchDetails();

Затем вызывается запрос

public Cursor fetchAllMatchDetails(){
    return mDb.query(VIEW_MATCHDETAIL, new String[] {
            "MatchId"
            }, null, null, null, null, null);
}

VIEW_MATCHDETAIL определяется как строка = "MatchDetail"

и это здесь, где он падает, говоря

нет такой таблицы MatchDetail: при компиляции SELECT MatchId FROM MatchDetail

кто-нибудь имел эту проблему раньше?

Ответы [ 3 ]

2 голосов
/ 26 мая 2011

У вас там красивый SQL.К сожалению, только первая строка sql будет выполнена в SQLiteDatabase.execSQL.Остальные будут игнорироваться молча (удобно, а?).Разделите операторы вручную следующим образом:

https://github.com/browep/fpt/blob/master/src/com/github/browep/nosql/NoSqlSqliteOpener.java

или, если вы хотите сохранить SQL в отдельном файле, попробуйте это:

0 голосов
/ 26 мая 2011

Если вы не можете получить доступ к базе данных, которую, как вы знаете, инициализировали, попробуйте передать Context из Activity, которая создала таблицу, в класс, пытающийся запросить таблицу.Используйте этот контекст как часть инициализации вашего соединения.

0 голосов
/ 26 мая 2011

Что меня выделяет, так это использование типов данных типа NVARCHAR(50).SQLite имеет только очень простой набор типов данных .Я удивлен, что это не вызывает исключения при установке приложения.Попробуйте просто использовать TEXT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...