Если вы используете метод SQLiteDatabse insert , он возвращает rowid в строке вставки (для таблиц, которые не определены без WOWHOUT ROWID).Поскольку вы использовали INTEGER PRIMARY KEY для определения столбца id , это псевдоним столбца rowid , поэтому будет возвращено значение, присвоенное id (если столбец был успешно вставлен, иначе возвращается -1).
например,
ContentValues cv = new ContentValues();
cv.put("name","Fred");
cv.put("fathername","George");
cv.put("dob","2000-01-01");
cv.put("age",21)
long returned_id = your_sqlite_database.insert("table1",null,cv);
return_id будет идентификатором строки, вставленной в table1.
Как правило, вышеприведенное относится к методу, который принимает имя, имя отца, dob и age в качестве параметров и возвращает идентификатор.
Рабочий пример
Помощник по базам данных (подкласс SQLiteOpenHelper) DBHelper.java
Это создает базу данных и таблицы и определяет 3 метода: -
: -
public class DBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "mydb";
public static final int DBVERSION = 1;
public static final String TBL_TABLE1 = "table1";
public static final String TBL_TABLE2 = "table2";
public static final String COL_TABLE1_ID = "id";
public static final String COL_TABLE1_NAME = "name";
public static final String COL_TABLE1_FATHERNAME = "fathername";
public static final String COL_TABLE1_DOB = "dob";
public static final String COL_TABLE1_AGE = "age";
public static final String COL_TABLE2_ID = "m_id";
public static final String COL_TABLE2_TREATDATE = "treatdate";
public static final String COL_TABLE2_HOSPITAL = "hospital";
public static final String COL_TABLE2_CITY = "city";
public static final String COL_TABLE2_ID2 = "id2";
SQLiteDatabase mDB;
public DBHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
mDB = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
String table1_crtsql = "CREATE TABLE IF NOT EXISTS " + TBL_TABLE1 + "(" +
COL_TABLE1_ID + " INTEGER PRIMARY KEY, " +
COL_TABLE1_NAME + " TEXT, " +
COL_TABLE1_FATHERNAME + " TEXT, " +
COL_TABLE1_DOB + " TEXT, " +
COL_TABLE1_AGE + " INTEGER" +
")";
db.execSQL(table1_crtsql);
String table2_crtsql = "CREATE TABLE IF NOT EXISTS " + TBL_TABLE2 + "(" +
COL_TABLE2_ID + " INTEGER PRIMARY KEY, " +
COL_TABLE2_TREATDATE + " TEXT, " +
COL_TABLE2_HOSPITAL + " TEXT, " +
COL_TABLE2_CITY + " TEXT, " +
COL_TABLE2_ID2 + " INTEGER REFERENCES " + TBL_TABLE1 + "(" + COL_TABLE1_ID + ")" +
")";
db.execSQL(table2_crtsql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
@Override
public void onConfigure(SQLiteDatabase db) {
super.onConfigure(db);
db.setForeignKeyConstraintsEnabled(true);
}
public long addTable1Row(String name, String fathername, String dob, int age) {
ContentValues cv = new ContentValues();
cv.put(COL_TABLE1_NAME,name);
cv.put(COL_TABLE1_FATHERNAME,fathername);
cv.put(COL_TABLE1_DOB,dob);
cv.put(COL_TABLE1_AGE,age);
return mDB.insert(TBL_TABLE1,null,cv);
}
public long addTable2Row(String treatdate, String hospital, String city, long table1_reference) {
ContentValues cv = new ContentValues();
cv.put(COL_TABLE2_TREATDATE,treatdate);
cv.put(COL_TABLE2_HOSPITAL,hospital);
cv.put(COL_TABLE2_CITY,city);
cv.put(COL_TABLE2_ID2,table1_reference);
return mDB.insert(TBL_TABLE2,null,cv);
}
public Cursor getAllFromTable1JoinedWithTable2() {
String tables = TBL_TABLE1 +
" JOIN " + TBL_TABLE2 +
" ON " +
TBL_TABLE2 + "." + COL_TABLE2_ID2 +
" = " +
TBL_TABLE1 + "." + COL_TABLE1_ID;
return mDB.query(tables,null,null,null,null,null,null);
}
}
- Примечание AUTOINCREMENT не использовалось, так как оно является ненужным, использовались определенные типы столбцов, а не производные типы столбцов (не то, чтобы это оказало какое-либо влияние)
MainActivity.java
Это создает объекты DBHelper, а затем использует доступные методы для добавления некоторых строк в каждую из таблиц.2 строки добавляются в таблицу 1, а 3 добавляются в таблицу 2 (Фред имеет 2 посещения больницы).
Затем данные извлекаются в соответствии с отношением между таблицей 2 и таблицей 1, поэтому извлекаются 3 строки.Они выгружаются в системный журнал.
public class MainActivity extends AppCompatActivity {
DBHelper mDBhlpr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBhlpr = new DBHelper(this);
//Add Fred
long parentid = mDBhlpr.addTable1Row("Fred","George","2000-01-01",19);
// Add a hospital visit for Fred
mDBhlpr.addTable2Row("2019-01-01","Prince Fred","Timbukto",parentid);
//Add Mary and a hospital visit all in one go
mDBhlpr.addTable2Row("2019-01-02","St Barts","Springfield",
mDBhlpr.addTable1Row("Mary","Tom","1999-12-23",19)
);
// Another hospital visit for Fred
mDBhlpr.addTable2Row("2019-01-03","John Radcliffe","Oxford",parentid);
// Get the joined data and dump it to the log
Cursor csr = mDBhlpr.getAllFromTable1JoinedWithTable2();
DatabaseUtils.dumpCursor(csr);
}
}
Результат
Журнал включает в себя: -
I/System.out: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@3fd1bbe9
I/System.out: 0 {
I/System.out: id=1
I/System.out: name=Fred
I/System.out: fathername=George
I/System.out: dob=2000-01-01
I/System.out: age=19
I/System.out: m_id=1
I/System.out: treatdate=2019-01-01
I/System.out: hospital=Prince Fred
I/System.out: city=Timbukto
I/System.out: id2=1
I/System.out: }
I/System.out: 1 {
I/System.out: id=2
I/System.out: name=Mary
I/System.out: fathername=Tom
I/System.out: dob=1999-12-23
I/System.out: age=19
I/System.out: m_id=2
I/System.out: treatdate=2019-01-02
I/System.out: hospital=St Barts
I/System.out: city=Springfield
I/System.out: id2=2
I/System.out: }
I/System.out: 2 {
I/System.out: id=1
I/System.out: name=Fred
I/System.out: fathername=George
I/System.out: dob=2000-01-01
I/System.out: age=19
I/System.out: m_id=3
I/System.out: treatdate=2019-01-03
I/System.out: hospital=John Radcliffe
I/System.out: city=Oxford
I/System.out: id2=1
I/System.out: }
I/System.out: <<<<<