Почему таблица не создается в SQLite Android Studio 3.1.4 или 3.2.1 - PullRequest
0 голосов
/ 25 октября 2018

Почему таблица не создана в SQLite Android Studio 3.1.4 или 3.2.1 Я использую этот код дома на Android studio 3.1 работает отлично, но в 3.1.4 и 3.2.1, которые я использую в школе, это делает базу данных, ноне стол.

Я использовал logcat, чтобы напечатать запрос и вставить его в браузер БД, он отлично работает и создает таблицу.Я сделал несколько Log.d в методе onCreate (), чтобы подтвердить, что код прибывает в этот метод, и он прибывает в метод.

public class SQLCon extends SQLiteOpenHelper
 {
    public static final String DBNAME = "unidb.db";
    public static int VER = 1;
    private SQLiteDatabase db;

    final String CREATEUSERTABLE = "CREATE Table IF NOT EXISTS "+
            ContractSQL.User.TABLE_NAME+"( "+
            ContractSQL.User.ID+" INTEGER PRIMARY KEY autoincrement,"+
            ContractSQL.User.FN+" varchar(45),"+
            ContractSQL.User.SN+" varchar(45),"+
            ContractSQL.User.EM+" varchar(45),"+
            ContractSQL.User.GROUP+" varchar(45),"+
            ContractSQL.User.PW+ " varchar(45));";

    public SQLCon(Context context) {
        super(context, DBNAME, null, VER);

 this.getWritableDatabase();
        //onCreate(this.getWritableDatabase());
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d("CREATEUSERTABLETAG", CREATEUSERTABLE);

        db.execSQL(CREATEUSERTABLE);
        //this.getWritableDatabase().execSQL(CREATEUSERTABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}


Contract Class:



 public final class ContractSQL
 {
    private ContractSQL(){}

    public static class User
    {
        public static final String TABLE_NAME = "_user_";
        public static final String ID = "_id_";
        public static final String FN = "_fn_";
        public static final String SN = "_sn_";
        public static final String GROUP = "_group_";
        public static final String PW = "_pw_";
        public static final String EM = "_em_";
    }

}

1 Ответ

0 голосов
/ 25 октября 2018

Копирование приведенного выше кода в SQLCon.java и ContractSQL.java соответственно, а затем использование кода из действия с использованием: -

public class MainActivity extends AppCompatActivity {

    AdminSQLiteOpenHelper mASQLiteHlpr;
    SQLCon mSQLcon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSQLcon = new SQLCon(this);
        Cursor csr = mSQLcon.getWritableDatabase().query("sqlite_master",null,null,null,null,null,null);
        while (csr.moveToNext()) {
            Log.d("DBINFO", "Found Item " + csr.getString(csr.getColumnIndex("name")));
        }
        csr.close();
    }
}

Работает нормально и выдает в журнале следующее: -

10-25 19:40:37.311 1164-1164/axtest.axtest D/CREATEUSERTABLETAG: CREATE Table IF NOT EXISTS _user_( _id_ INTEGER PRIMARY KEY autoincrement,_fn_ varchar(45),_sn_ varchar(45),_em_ varchar(45),_group_ varchar(45),_pw_ varchar(45));
10-25 19:40:37.311 1164-1164/axtest.axtest D/DBINFO: Found Item android_metadata
10-25 19:40:37.311 1164-1164/axtest.axtest D/DBINFO: Found Item _user_
10-25 19:40:37.311 1164-1164/axtest.axtest D/DBINFO: Found Item sqlite_sequence
  • android_metadata - это таблица, созданная с помощью кода SQLite, доступного с android (используется для локали).
  • sqlite_sequence создана из-за того, что вы закодировали AUTOINCREMENT.Он содержит самый высокий rowid , используемый на сегодняшний день (если не изменен).
    • кодирование ?? INTEGER PRIMARY KEY (с или без AUTOINCREMENT) делает столбец ??( id в вашем случае) псевдоним специального столбца rowid . rowid - 64-разрядное целое число без знака.Первоначально он будет равен 1, а затем, как правило, будет увеличиваться на 1 (хотя нет гарантии, что он будет).
    • AUTOINCREMENT имеет накладные расходы и только вводит ограничение, что rowid всегда должен быть больше.Это редко требуется, и рекомендуется не использовать AUTOINCREMENT. SQLite Autoincrement

Таким образом, может показаться, что вы либо не проверяете, чтотаблица существует с использованием метода звука (пример метода звука включен в приведенный выше код) или что существуют некоторые внешние ограничения из-за различных сред.

Принятие вышеуказанного кода, который запрашивает таблицу sqlite_master, покажет, создается ли таблица.

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