我想获取我的SQLite表的最后插入的ID,当我拥有此ID时,可以将其添加到命名约定中,以为jpg创建唯一的对应名称。
这是我创建图像的功能。
private String saveToInternalStorage(Bitmap bitmapImage){
ContextWrapper cw = new ContextWrapper(getApplicationContext());
// path to /data/data/yourapp/app_data/imageDir
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
// Create imageDir
int id = 999;
id = helper.getID();
File mypath=new File(directory,"Photo" + id +".jpg");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mypath);
// Use the compress method on the BitMap object to write image to the OutputStream
bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return directory.getAbsolutePath();
}
现在我想根据我的SQLite表的行来增加ID。因此,如果插入第7行,我想将照片命名为Photo7.jpg
这是我的datahelper类,在这里我将其称为插入:
package com.example.testapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import static android.icu.text.MessagePattern.ArgType.SELECT;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String COL_1 = "Image";
public static final String COL_2 = "Note";
public static final String COL_3 = "Sort";
public static final String COL_4 = "Weight";
public static final String COL_5 = "Length";
public static final String COL_6 = "Pond";
public static final String Database = "Catch.db";
public static final String Table = "CatchInformation";
public DatabaseHelper(Context context){
super(context, Database, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "+ Table+ "(Id Integer PRIMARY KEY AUTOINCREMENT, IMAGE TEXT, NOTE TEXT, SORT TEXT, WEIGHT TEXT, LENGTH TEXT, POND TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+Table+"");
onCreate(db);
}
public boolean insertData(String image, String note, String sort, String weight, String length, String pond)throws SQLiteException{
long result;
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_1, image);
contentValues.put(COL_2, note);
contentValues.put(COL_3, sort);
contentValues.put(COL_4, weight);
contentValues.put(COL_5, length);
contentValues.put(COL_6, pond);
result = db.insert(Table, null, contentValues);
if(result == -1)
return false;
else
return true;
}
public int getID(){
int receivedID = 0;
receivedID = ???;
return receivedID;
}
}
我应该在“ ???”上填写什么
谢谢!
答案 0 :(得分:0)
在您的SQLite代码中,应在查询插入行后立即使用以下SQL执行查询,查询应返回一个整数(可能是一个长整数),然后应将其作为返回值返回到您的getID方法。
select seq from sqlite_sequence where name="table_name"
答案 1 :(得分:0)
您可以使用SQL内置函数LAST_INSERT_ROWID()
检索最后插入的自动递增的ID。
sqlite3_last_insert_rowid(D)接口通常将最近成功执行INSERT的rowid返回到数据库连接D上的rowid表或虚拟表中。不记录在WITHOUT ROWID表中的插入。如果在数据库连接D上没有成功向rowid表插入INSERT,则sqlite3_last_insert_rowid(D)返回零。
您可以阅读有关此功能的更多信息here.,也可以阅读this as well.
具有以下功能的示例查询:"SELECT LAST_INSERT_ROWID()"
此查询的替代方法是比较数据库中的所有ID,并返回其中最大的ID。
查询示例:"SELECT * FROM your_table WHERE yourColumn = (SELECT MAX(yourID) FROM your_table)"
请记住,以上查询只是为了提出可能的解决方案。