Android Studio: база данных создана, но таблица не создана - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать простой файл базы данных с Android Studio. Я написал код, подобный этому, и никаких ошибок не было показано. Я проверил файл data/data/com.example.app/databases, и есть три файла: Student.db, Student.db-shm, Student.db-wal, но не Student.db-journal, как в учебниках в нем. И когда я пытаюсь открыть Student.db с помощью DB Browser , таблицы не создаются.

Я пробовал несколько синтаксисов с частью "CREATE TABLE", но она не работала.

public class Database extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "Student.db";
    public static final String TABLE_NAME = "student_table";
    public static final String COL_1 = "ID";
    public static final String COL_2 = "NAME";
    public static final String COL_3 = "SURNAME";
    public static final String COL_4 = "MARKS"; 

    public Database(Context context) {
       super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
       db.execSQL("create table " + TABLE_NAME + " (ID INTEGER PRIMARY 
       KEY AUTOINCREMENT,NAME TEXT,SURNAME TEXT,MARKS INTEGER)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
       onCreate(db);
    }

}

и активность будет

public class MainActivity extends AppCompatActivity {

    Database myDb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myDb = new Database(this);

    }
}

Ответы [ 5 ]

0 голосов
/ 15 мая 2019

Оказывается, нет ничего плохого в коде. Я должен поместить все три файла Student.db, Student.db-shm, Student.db-wal в одну папку, чтобы открыть его с помощью DB Browser. Спасибо всем за помощь, я многому научился: D

0 голосов
/ 15 мая 2019

Привет, @ trpn39 Попробуйте,

public class DatabaseHandler extends SQLiteOpenHelper  {

public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "test.db";
public static final String TABLE_NAME = "userdata_table";
public static final String COLUMN_ID = "id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_COUNTRY = "country";


public DatabaseHandler(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

String CREATE_TABLE = " CREATE TABLE IF NOT EXISTS " + TABLENAME + " (" +
            KEY_STUID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            KEY_SUB1 + " TEXT NOT NULL," +
            KEY_SUB2 + " TEXT NOT NULL," +
            KEY_SUB3 + " TEXT NOT NULL," +
            KEY_MARKS1 + " INTEGER NOT NULL," +
            KEY_MARKS2 + " INTEGER NOT NULL," +
            KEY_MARKS3 + " INTEGER NOT NULL"
            + ")";

      db.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}
}

Инициализация в любой деятельности

public class ExampleActivity extends AppCompatActivity {

DatabaseHandler databaseHandler;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view);

   databaseHandler = new DataBaseHandler(this);

   //create method to store
   storeData();
}

 public void store(){

 //you need to implement getwritable database here
 ContentValues contentValues = new ContentValues();
                            SQLiteDatabase db = 
     databaseHandler.getWritableDatabase();   

 contentValues.put(SarathCityLocalDatabase.SUB_CATEGORY_LIST_ID, id);
                            contentValues.put(databaseHandler.COLUMN_ID, id);
                            contentValues.put(databaseHandler.COLUMN_NAME, name);
                            contentValues.put(databaseHandler.COLUMN_COUNTRY, county);
                            contentValues.put(databaseHandler.LOGO, logo);  

  //insert data in table

 db.insert(SarathCityLocalDatabase.public class DatabaseHandler extends 
SQLiteOpenHelper  {

 public static final int DATABASE_VERSION = 1;
 public static final String DATABASE_NAME = "test.db";
 public static final String TABLE_NAME = "userdata_table";
 public static final String COLUMN_ID = "id";
 public static final String COLUMN_NAME = "name";
 public static final String COLUMN_COUNTRY = "country";


 public DatabaseHandler(Context context) {
  super(context, DATABASE_NAME, null, DATABASE_VERSION);
 }

 @Override
 public void onCreate(SQLiteDatabase db) {

 String CREATE_TABLE, null, 
   contentValues);
   }

 }

Пожалуйста, дайте мне знать, после того, как вы попробовали это

0 голосов
/ 15 мая 2019

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

Вы сможетечтобы вызвать метод onCreate () в onUpgrade (), изменив версию базы данных следующим образом:

// Database Version
private static final int DATABASE_VERSION = 2;

public Database(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

onUpgrade () вызывается при обновлении приложения, запускается AND когда версия базы данных не совпадает.

Надеюсь, что она может вам помочь.

0 голосов
/ 15 мая 2019

Создание вспомогательного класса, который расширяет SQLiteOpenHelper и переопределяет методы onCreate () и onUpgrade ()

    private static class MyHelper extends SQLiteOpenHelper {
    public MyHelper(Context context, String name, CursorFactory factory, int version) 
    {
        super(context, name, factory, version);
    }

@Override
public void onCreate(SQLiteDatabase db) {
   db.execSQL(" CREATE TABLE " + TABLENAME + " (" +
            id+ " INTEGER PRIMARY KEY," +
            COL_2+ " TEXT," +
            COL_3+ " TEXT," +          
            COL_4+ " INTEGER);"
    );
}
0 голосов
/ 15 мая 2019

Синтаксис запроса, например, такой:

 db.execSQL(" CREATE TABLE " + TABLENAME + " (" +
                KEY_STUID + " TEXT PRIMARY KEY, " +
                KEY_SUB1 + " TEXT NOT NULL, " +
                KEY_SUB2 + " TEXT NOT NULL, " +
                KEY_SUB3 + " TEXT NOT NULL, " +
                KEY_MARKS1 + " INTEGER NOT NULL, " +
                KEY_MARKS2 + " INTEGER NOT NULL, " +
                KEY_MARKS3 + " INTEGER NOT NULL);"
        );
...