2011-05-25 39 views
1

即時得到這個錯誤,當我嘗試訪問我查看SQLiteException - 沒有這樣的表

我已經建立了我的數據庫/查看使用該

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

沒有人有這個問題之前?

+0

哦,所以你知道,當我上運行創建腳本我的本地SQL數據庫,它創建表和視圖罰款! – Steve 2011-05-25 20:40:58

+0

的東西,我沒有發現是一個SimpleCursorAdapter需要一個「_id」列,以便香港專業教育學院還更新了我的字段名稱爲這個 – Steve 2011-05-25 22:13:19

回答

0

什麼站出來對我來說,使用像NVARCHAR(50)數據類型。 SQLite只有一個very simple set of datatypes。我很驚訝它不會在安裝應用程序時拋出異常。嘗試使用簡單的TEXT來代替。

+0

那麼爲什麼它們定義了一套我掛的數據類型的? – 2011-05-25 21:20:36

+1

@mikerobi:SQLite 3不會完全忽略數據類型。它使用它來確定列的親和力。但'NVARCHAR'和'TEXT'沒有區別。 – dan04 2011-05-25 21:46:08

+0

@ dan04,我糾正了,我刪除了我的評論。 – mikerobi 2011-05-26 13:23:27

0

如果您不能訪問你知道你已經初始化數據庫,嘗試創建該表到類試圖查詢該表的活動傳遞上下文。將該上下文用作連接初始化的一部分。

2

你有一些漂亮的SQL那裏。不幸的是,只有第一行SQL將在SQLiteDatabase.execSQL中執行。其餘的將被默默地忽略(方便嗎?)。手動分手的聲明是這樣的:

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

,或者如果你想保持你的SQL在一個單獨的文件,試試這個:

String sqlText = getSqlText(); 
for(String sqlStmt : sqlText.split(";")) 
    myDb.execSQL(slqStmt + ";"); 
+0

公頃會去一些解釋什麼,當我與Questiod探索我的SQLite數據庫,它只有一個拳擊手錶..生病試試這個,看看我得到的所有3個數據庫,如果是的話移動到我的觀點。 – Steve 2011-05-25 22:12:01

相關問題