2011-05-25 99 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

相关问题