0

データベースに複数のテーブルを作成しようとしていますが、最初のテーブルは正常に作成されただけで、他の2つのテーブルでエラーが発生します。テーブルが作成されていることを確認する方法を知りたいです。

04-18 17:20:45.343: E/AndroidRuntime(956): android.database.sqlite.SQLiteException: no such table: squares: , while compiling: SELECT _squareid, squarename, squarelatitude, squarelongitude FROM squares

これが私のコードです

public class Dbinfo {

    public static final String KEY_RAWID = "_id";
    public static final String KEY_RAWNAME = "name";
    public static final String KEY_PASSWORD = "password";
    public static final String KEY_EMAIL = "email";
    public static final String KEY_SQUAREID = "_squareid";
    public static final String KEY_SQUARENAME = "squarename";
    public static final String KEY_SQUARELATITUDE = "squarelatitude";
    public static final String KEY_SQUARELONGITUDE = "squarelongitude";
    private static final String KEY_STREETID = "streetid";
    private static final String KEY_STREETNAME = "streetname";
    private static final String KEY_STREETLATITUDE="streetlatitude";
    private static final String KEY_STREETLONGTIUDE="streetlongtiude";
    private static final String KEY_STREETCAPACITY = "streetcapacity";
    private static final String KEY_STREETFOREIGN = "streetforegin";

    private static final String DATABASE_NAME = "users_DB";
    private static final String DATABASE_TABLE = "users";
    private static final String DATABASE_TABLESQUARES = "squares";
    private static final String DATABASE_TABLE_STREETS = "streets";
    private static final int DATABASE_VERSION = 1;

    private dbusers ourhelper;
    private final Context ourcontext;
    private static SQLiteDatabase ourDatabase;

    private static class dbusers extends SQLiteOpenHelper {

        public dbusers(Context context) {
            super(context, DATABASE_TABLE, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub

            db.execSQL("CREATE TABLE " + DATABASE_TABLE + "(" + KEY_RAWID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_RAWNAME
                    + " TEXT NOT NULL, " + KEY_PASSWORD + " TEXT NOT NULL, "
                    + KEY_EMAIL + " TEXT NOT NULL);");

            db.execSQL("CREATE TABLE " + DATABASE_TABLESQUARES + "("
                    + KEY_SQUAREID + "INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + KEY_SQUARENAME + "TEXT NOT NULL, " + KEY_SQUARELATITUDE
                    + "TEXT NOT NULL, " + KEY_SQUARELONGITUDE
                    + "TEXT NOT NULL);");

            final String STREET = "CREATE TABLE " + DATABASE_TABLE_STREETS
                    + " (" + KEY_STREETID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_STREETNAME+
                    " TEXT NOT NULL"+KEY_STREETLATITUDE+"TEXT NOT NULL"+KEY_SQUARELONGITUDE
                    + " TEXT NOT NULL, " + KEY_STREETCAPACITY
                    + " text not null, FOREIGN KEY (" + KEY_STREETFOREIGN
                    + ") REFERENCES " + DATABASE_TABLESQUARES + " ("
                    + KEY_SQUAREID + "));";
            db.execSQL(STREET);

何か助けは?

4

2 に答える 2

0

sql作成中の列名の後にいくつかのスペースを入れてくださいString(テーブルの場合DATABASE_TABLESQUARES):

db.execSQL("CREATE TABLE " + DATABASE_TABLESQUARES + "("
                    + KEY_SQUAREID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + KEY_SQUARENAME + " TEXT NOT NULL, " + KEY_SQUARELATITUDE
                    + " TEXT NOT NULL, " + KEY_SQUARELONGITUDE
                    + " TEXT NOT NULL);");

上記の変更を行った後、アプリをアンインストールして再実行する必要があります。これにより、のonCreateメソッドがSQLiteOpenHelper再度呼び出され、新しいSQLに従ってデータベースが初期化されますString。また、SamのコメントとしてString、テーブルのSQL作成を変更しDATABASE_TABLE_STREETS、列宣言の間にいくつかのコンマを追加します(他の2つのテーブルに対して以前に行ったように)。そうしないと、そのテーブルにアクセスしようとすると再び問題が発生します。

于 2012-04-18T15:39:44.340 に答える
0

まず、SQLiteブラウザでデータベースを確認します。
テーブルが見つからない場合は、テーブルの作成に問題があり
ます。テーブルの作成については、次のコードを確認してください。

private static final String DATABASE_CREATE3 = "create table IF NOT EXISTS "
        + TABLE_EXAM + "( " + COLUMN_EXAM_ID
        + " integer primary key autoincrement, " 
        + COLUMN_SUBCHAWISE + " text not null, "
        + COLUMN_EXAM_TYPE + " text not null, "
        + COLUMN_EXAM_DETAILS + " text not null, "
        + COLUMN_MARKS + " number not null);";
于 2012-04-18T15:52:43.280 に答える