我有一個包含兩個按鈕和一個文本視圖的應用程序。Select Statement not working properly
btnInsert
:用戶點擊這個時,一個插入語句將被執行btnShow
:選擇語句將被執行,並且結果被顯示在TextView的。
問題是以下內容。我使用AsyncTask來執行寫/讀操作。我創建了兩個獨立的AsyncTasks,一個用於閱讀,一個用於寫作。插入(寫異步正常工作,而且我相信,越來越插入值,因爲如果我運行相同的INSERT語句兩次我得到一個主鍵衝突錯誤:
07-19 11:46:48.080: E/AndroidRuntime(21486): FATAL EXCEPTION: main
07-19 11:46:48.080: E/AndroidRuntime(21486): android.database.sqlite.SQLiteConstraintException: PRIMARY KEY must be unique (code 19)
這就是問題產生的一切顯然,當我運行選擇語句(通過單擊按鈕),然而,而不是價值,我得到[email protected]
。
有人知道什麼問題是?這是非常煩人的,我不知道我做錯了什麼,請看看我的代碼:
public class MainActivity extends Activity
{
static DatabaseImplementation db;
static SQLiteDatabase dbWrite;
static SQLiteDatabase dbRead;
static String insert = "INSERT INTO tbl_Test VALUES(7, 'Test');";
static String select = "SELECT test FROM tbl_Test WHERE _id = 1;";
Button btnInsert;
Button btnShow;
static TextView txtView;
//static String name = "";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = new DatabaseImplementation(this);
dbWrite = db.getWritableDatabase();
dbRead = db.getReadableDatabase();
txtView = (TextView)findViewById(R.id.txtView);
btnInsert = (Button)findViewById(R.id.btnInsert);
btnInsert.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new Insert().execute();
}
});
btnShow = (Button)findViewById(R.id.btnShow);
btnShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
AsyncTask<String, Void, String> n = new Select().execute();
txtView.setText(n.toString());
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
//INSERT ASYNC
private class Insert extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params)
{
//Connect to Database First.
try
{
//String insert = executeInsert();
//onPostExecute(insert);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result)
{
//Connect to Database First.
dbWrite.execSQL(insert);
}
}
//SELECT ASYNC
private class Select extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params)
{
try
{
dbWrite = db.getWritableDatabase();
Cursor c = dbWrite.rawQuery(select, null);
String name = "";
c.moveToFirst();
name = c.getString(0);
return name;
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result)
{
}
}
}
我真的很感激,如果有人能幫助我。
您是否考慮過使用ORM?這種數據庫訪問對我來說似乎非常不穩定。 –
我應該嘗試一下,謝謝你的建議! – ClaireG