我有一個sqlite數據庫只有一列填充了一些名字我從一堆edittexts.I'm使用它來支持自動完成。 我已經設置數據庫爲該列的唯一,所以我不會在我的自動完成中得到重複。 事情是,我想做出如下: 如果有人輸入重複,請在數據庫中爲該名稱計數器。所以如果我輸入「奶酪」5次數據庫中的「奶酪」將有5在不同的列中。 我想用這個來實現的是顯示最經常使用的自動完成功能,還有一些「頂級使用的名稱」listview或其他東西。 你能幫我一個片段嗎?如何檢測它何時嘗試向數據庫中輸入副本並增加計數器? 謝謝!這是我的代碼到目前爲止。SQLite:如果重複,增加計數器
public class SQLiteCountryAssistant extends SQLiteOpenHelper
{
private static final String DB_NAME = "usingsqlite.db";
private static final int DB_VERSION_NUMBER = 1;
private static final String DB_TABLE_NAME = "countries";
private static final String DB_COLUMN_1_NAME = "country_name";
private static final String DB_CREATE_SCRIPT = "create table " + DB_TABLE_NAME +
" (_id integer primary key autoincrement, country_name text UNIQUE);)";
private SQLiteDatabase sqliteDBInstance = null;
public SQLiteCountryAssistant(Context context)
{
super(context, DB_NAME, null, DB_VERSION_NUMBER);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// TODO: Implement onUpgrade
}
@Override
public void onCreate(SQLiteDatabase sqliteDBInstance)
{
Log.i("onCreate", "Creating the database...");
sqliteDBInstance.execSQL(DB_CREATE_SCRIPT);
}
public void openDB() throws SQLException
{
Log.i("openDB", "Checking sqliteDBInstance...");
if(this.sqliteDBInstance == null)
{
Log.i("openDB", "Creating sqliteDBInstance...");
this.sqliteDBInstance = this.getWritableDatabase();
}
}
public void closeDB()
{
if(this.sqliteDBInstance != null)
{
if(this.sqliteDBInstance.isOpen())
this.sqliteDBInstance.close();
}
}
public long insertCountry(String countryName)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DB_COLUMN_1_NAME, countryName);
return this.sqliteDBInstance.insert(DB_TABLE_NAME, null, contentValues);
}
public boolean removeCountry(String countryName)
{
int result = this.sqliteDBInstance.delete(DB_TABLE_NAME, "country_name='" + countryName + "'", null);
if(result > 0)
return true;
else
return false;
}
public long updateCountry(String oldCountryName, String newCountryName)
{
ContentValues contentValues = new ContentValues();
contentValues.put(DB_COLUMN_1_NAME, newCountryName);
return this.sqliteDBInstance.update(DB_TABLE_NAME, contentValues, "country_name='" + oldCountryName + "'", null);
}
public String[] getAllCountries()
{
Cursor cursor = this.sqliteDBInstance.query(DB_TABLE_NAME, new String[] {DB_COLUMN_1_NAME}, null, null, null, null, DB_COLUMN_1_NAME + " ASC");
if(cursor.getCount() >0)
{
String[] str = new String[cursor.getCount()];
int i = 0;
while (cursor.moveToNext())
{
str[i] = cursor.getString(cursor.getColumnIndex(DB_COLUMN_1_NAME));
i++;
}
return str;
}
else
{
return new String[] {};
}
}
}
很抱歉這麼晚纔回復,忙於我的巴徹勒度(社會學,那麼你就會明白爲什麼我「這樣的」一本初學者,我沒有編程背景)。從我看到的情況來看,這與我到目前爲止學到的任何東西都不相似,當涉及到android sqlite時。爲什麼?這是一些其他類型的SQLite嗎?我如何在我的項目中實現這一點?對不起,這個愚蠢的問題...我開始學習像3-4周前.. –
我必須做這樣的事情嗎? String sql =「INSERT或IGNORE INTO訪問VALUES($ ip,0)」; db.execSQL(sql);或者db.execSQL(//直接在這裏命令); ?對不起,如果我錯了,真的很難理解,從頭開始,不得不研究每一個細節,嘿。 –
示例代碼來自PHP問題。 $ ip是一個PHP變量。你會用你的價值取代它。因此,例如: INSERT或IGNORE INTO國家VALUES('America',0);'後面跟'UPDATE國家SET點擊率=點擊數+1 WHERE country ='America'' 如果沒有這樣的國家,它被添加並且其命中計數設置爲0,然後立即更新爲1.如果在DB中有*這樣的國家,則第一個語句被忽略並且其命中計數器增加1. 你可以運行這個像'db.execSQL(sql);'其中sql是你的sql變量。我在我的android sqlite界面上有點生疏。 –