Android 如何从sql server在sqlite中插入更新的记录
在我的应用程序中,我从sql server获取记录,并在单击按钮时将其存储在sqlite中,这工作正常,但我的问题是每次单击按钮时记录的数量都会增加一倍。例如,如果sql server有50条记录,sqlite将在第一个按钮上获取50条记录单击第二个按钮单击记录为100,以此类推 我希望sqlite存储的记录数与SQLServer相同。我搜索了这个东西,但也不明白我是安卓的新手。如果我的问题不清楚,任何帮助都将不胜感激 这是我用来在sqlite中插入记录的代码Android 如何从sql server在sqlite中插入更新的记录,android,sql-server,sqlite,Android,Sql Server,Sqlite,在我的应用程序中,我从sql server获取记录,并在单击按钮时将其存储在sqlite中,这工作正常,但我的问题是每次单击按钮时记录的数量都会增加一倍。例如,如果sql server有50条记录,sqlite将在第一个按钮上获取50条记录单击第二个按钮单击记录为100,以此类推 我希望sqlite存储的记录数与SQLServer相同。我搜索了这个东西,但也不明白我是安卓的新手。如果我的问题不清楚,任何帮助都将不胜感激 这是我用来在sqlite中插入记录的代码 public boolea
public boolean insertUserData(String user_id, String user_pwd,String ff_code, String ff_name, String terr_code, String dg_code,String dist_code, String ff_mob,String ff_mgr, String imeino) {
Log.e(" inserting user details", "yes");
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(CONTACTS_COLUMN_USER_ID, user_id);
contentValues.put(CONTACTS_COLUMN_USER_PWD, user_pwd);
contentValues.put(CONTACTS_COLUMN_FF_CODE, ff_code);
contentValues.put(CONTACTS_COLUMN_FF_NAME, ff_name);
contentValues.put(CONTACTS_COLUMN_TERR_CODE, terr_code);
contentValues.put(CONTACTS_COLUMN_DG_CODE, dg_code);
contentValues.put(CONTACTS_COLUMN_DIST_CODE, dist_code);
contentValues.put(CONTACTS_COLUMN_FF_MOB, ff_mob);
contentValues.put(CONTACTS_COLUMN_ff_mgr, ff_mgr);
contentValues.put(CONTACTS_COLUMN_IMEI_NO, imeino);
db.insert("user_detail", null, contentValues);
return true;
}enter code here
您应该在
user\u detail
表定义中将字段定义为PRIMARY KEY
,以防止插入重复记录。似乎user\u id
是一个不错的选择。如果服务器的数据可以更改,则必须在插入新数据之前删除所有旧数据
如果您的行具有声明为主键的未更改ID,则可以使用而不是insert
一种解决方案是:
它将插入N次(通过单击按钮)
试着重现这一点:
INSERT OR REPLACE INTO book(id, name) VALUES(1001, 'Programming')
另一个解决办法是:
检查主键是否已插入
public boolean CheckAcnoFound(int acno)
{
Cursor curchkacno;
curchkacno = mCon.DataFetch("select acno from acledger where acno="
+ acno );
if (curchkacno.getCount() != 0)
return true;
else
return false;
}
插入记录:
if (CheckAcnoFound((Integer.parseInt(xAcLedgerAcNo)))
{
Your Code
}
数据提取方法:
public Cursor DataFetch(String xQuery) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(xQuery, null);
return cursor;
}
是的,服务器数据并不总是保持不变,而是会发生变化。我做了主键,但我的问题还是一样的。您可以用任何示例代码向我演示如何删除旧数据。将
insert
替换为Replace
。
public Cursor DataFetch(String xQuery) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(xQuery, null);
return cursor;
}