#android
#Android
Вопрос:
Когда я нажимаю вставить данные, т. е. R.id.action_insert_data. При нажатии на него вызывается метод insertData. В нем должен отображаться идентификатор строки записи Почему всплывающее сообщение показывает «идентификатор строки = -1»?
Почему новые строки не создаются?
Итак, мой вопрос в том, какие изменения я должен внести, чтобы он вернул идентификатор строки 1.
CatalogActivity.java
private nameDBHelper in;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_catalog);
// Setup FAB to open EditorActivity
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(CatalogActivity.this, EditorActivity.class);
startActivity(intent);
}
});
in = new nameDBHelper(this);
}
public void insertData(){
// Contract.nameDBHelper in = new Contract.nameDBHelper(this);
SQLiteDatabase sqLiteDatabase = in.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(Contract.entry.COLUMN_F_NAME, "first");
contentValues.put(Contract.entry.COLUMN_L_NAME, "last");
long s = sqLiteDatabase.insert(Contract.entry.TABLE_NAME,null,contentValues);
Toast.makeText(getApplicationContext(),"row id= " s,Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu options from the res/menu/menu_catalog.xml file.
// This adds menu items to the app bar.
getMenuInflater().inflate(R.menu.menu_catalog, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// User clicked on a menu option in the app bar overflow menu
switch (item.getItemId()) {
// Respond to a click on the "Insert dummy data" menu option
case R.id.action_insert_data:
insertData();
return true;
// Respond to a click on the "Delete all entries" menu option
case R.id.action_delete_all_entries:
// Do nothing for now
return true;
}
return super.onOptionsItemSelected(item);
}
nameDBHelper.java
private static final String DATABASE_NAME = "first";
private static final int VERSION = 1;
public nameDBHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
/* String sqlTable = CREATE TABLE table1(_id INTEGER, firstname TEXT NO NULL, second TEXT NO NULL);*/
String sqlTable = "CREATE TABLE " Contract.entry.TABLE_NAME "( "
Contract.entry._ID " INTEGER, "
Contract.entry.COLUMN_F_NAME " TEXT, "
Contract.entry.COLUMN_L_NAME " TEXT);";
sqLiteDatabase.execSQL(sqlTable);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
Ответ №1:
Я внес некоторые изменения в ваш запрос create table.
String sqlTable = "CREATE TABLE " Contract.entry.TABLE_NAME "( "
Contract.entry._ID " INTEGER AUTOINCREMENT, "
Contract.entry.COLUMN_F_NAME " TEXT, "
Contract.entry.COLUMN_L_NAME " TEXT);";
Используя это, ваш идентификатор будет автоматически увеличиваться каждый раз, когда вы вносите запись в таблицу. Надеюсь, это поможет.
Ответ №2:
Поскольку в вашем _id
столбце нет АВТОИНКРЕМЕНТА. Вы должны вручную указать значение для _id
столбца.
Добавьте ограничение АВТОИНКРЕМЕНТА в _id
столбец. Вот так.
String sqlTable = "CREATE TABLE " Contract.entry.TABLE_NAME "( "
Contract.entry._ID " INTEGER AUTOINCREMENT, "
Contract.entry.COLUMN_F_NAME " TEXT, "
Contract.entry.COLUMN_L_NAME " TEXT);";
Ответ №3:
работает после добавления «АВТОИНКРЕМЕНТА ПЕРВИЧНОГО КЛЮЧА ЦЕЛОГО ЧИСЛА».
Ответ №4:
Я внес следующие изменения в код, теперь он работает. Я добавил «АВТОИНКРЕМЕНТ ПЕРВИЧНОГО КЛЮЧА»
String sqlTable = "CREATE TABLE " Contract.entry.TABLE_NAME "( " Contract.entry._ID " INTEGER PRIMARY KEY AUTOINCREMENT, " Contract.entry.COLUMN_F_NAME " TEXT, " Contract.entry.COLUMN_L_NAME " TEXT);";