Android 如何在sqlite中设置带触发器的自动增量?
伙计们,我只想问一下如何在我的数据库字段中创建触发器进行自动增量,这是我的: DBHelper.javaAndroid 如何在sqlite中设置带触发器的自动增量?,android,sqlite,triggers,Android,Sqlite,Triggers,伙计们,我只想问一下如何在我的数据库字段中创建触发器进行自动增量,这是我的: DBHelper.java public class DBHelper extends SQLiteOpenHelper { public static final String TABLE_NAME = "sma"; public static final String COLUMN_ID = "_id"; public static fina
public class DBHelper extends SQLiteOpenHelper
{
public static final String TABLE_NAME = "sma";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAMA_SMA ="nama_sma";
public static final String COLUMN_ALAMAT_SMA ="alamat_sma";
public static final String COLUMN_LATITUDE_SMA ="latitude_sma";
public static final String COLUMN_LONGITUDE_SMA ="longitude_sma";
public static final String COLUMN_TELEPON_SMA ="telepon_sma";
public static final String COLUMN_WEBSITE_SMA ="website_sma";
public static final String COLUMN_EMAIL_SMA ="email_sma";
public static final String COLUMN_TANGGAL_BERDIRI_SMA ="tanggal_berdiri_sma";
public static final String COLUMN_DESKRIPSI_SMA ="deskripsi_keunggulan_sma";
public static final String COLUMN_TANGGAL_AKREDITASI = "tanggal_akreditasi";
public static final String COLUMN_FACEBOOK ="facebook_sma";
public static final String COLUMN_TWITTER ="twitter_sma";
//foreign key
public static final String COLUMN_FK_ID_BATASAN_USIA ="id_batasan_usia";
public static final String COLUMN_FK_ID_AKREDITASI ="id_akreditasi";
public static final String COLUMN_FK_ID_LOKASI ="id_lokasi";
public static final String COLUMN_FK_ID_KURIKULUM ="id_kurikulum";
public static final String COLUMN_FK_ID_BIAYA ="id_biaya";
private static final String db_name ="schoolmap.db";
private static final int db_version=1;
private static final String db_create = "create table "
+ TABLE_NAME + "("
+ COLUMN_ID + " integer primary key autoincrement, "
+ COLUMN_NAMA_SMA + " varchar(20) not null, "
+ COLUMN_ALAMAT_SMA + " varchar(30) not null, "
+ COLUMN_LATITUDE_SMA + " varchar(10) not null, "
+ COLUMN_LONGITUDE_SMA + " varchar(10) not null, "
+ COLUMN_TELEPON_SMA + " varchar(15) null, "
+ COLUMN_WEBSITE_SMA + " varchar(20) null, "
+ COLUMN_EMAIL_SMA + " varchar(20) null, "
+ COLUMN_TANGGAL_BERDIRI_SMA + " datetime not null, "
+ COLUMN_DESKRIPSI_SMA + " varchar(30) null, "
+ COLUMN_TANGGAL_AKREDITASI + " datetime not null, "
+ COLUMN_FACEBOOK + " varchar(10) , "
+ COLUMN_TWITTER + " varchar(10), "
+ COLUMN_FK_ID_BATASAN_USIA + " integer DEFAULT 1, "
+ COLUMN_FK_ID_AKREDITASI + " integer, "
+ COLUMN_FK_ID_LOKASI + " integer, "
+ COLUMN_FK_ID_KURIKULUM + " integer, "
+ COLUMN_FK_ID_BIAYA + " integer);";
public DBHelper(Context context) {
super(context, db_name, null, db_version);
// Auto generated
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(db_create);
//This code isn't working, is the code wrong?
db.execSQL("CREATE TRIGGER pk AFTER INSERT ON sma " +
"BEGIN " +
"UPDATE sma SET id_batasan_usia = id_batasan_usia + 1 " +
"END");
}
}
触发器不工作,当我第一次运行列_FK_ID_LOKASI时,列_FK_ID_BIAYA默认设置为0,但在插入第二个数据后,它必须是1,对吗?我以前从未用过扳机,所以这次我真的需要帮助,有人能帮我吗?谢谢:D要将某些列的值设置为大于表中任何其他值的值,请使用如下触发器:
CREATE TRIGGER autoinc_sma_lokasi
AFTER INSERT ON sma
WHEN NEW.lokasi IS NULL
BEGIN
UPDATE sma
SET lokasi = IFNULL((SELECT MAX(lokasi) FROM sma) + 1, 0)
WHERE _id = NEW._id;
END;
列ID已在自动递增。你为什么认为你需要扳机?(您的触发器中有语法错误。)@CL:是的,但我需要自动递增列_FK_ID_LOKASI和列_FK_ID_BIAYA,只有使用触发器权限才能执行此操作?外键引用另一个表中的现有记录;发明一个新的值是没有意义的。@CL:好吧,现在我只是编辑我的代码,现在用触发器自动递增怎么样?这些列中的新值应该是什么?我可以问一下,new.lokasi==id\u lokasi,对吗?id=NEW.id是什么意思?不,必须使用表的主键来更新插入的同一行。