두 개의 단추와 텍스트보기로 구성된 응용 프로그램이 있습니다.Select 문이 제대로 작동하지 않습니다.
btnInsert
는 : 사용자가이를 클릭하면, 삽입 명령문
수행 될 것이다 : SELECT 문이 실행되며, 그 결과이 텍스트 뷰에 표시된다.btnShow
문제는 다음과 같습니다. AsyncTask를 사용하여 쓰기/읽기 작업을 수행하고 있습니다. 저는 두 개의 분리 된 AsyncTask를 작성했습니다. 하나는 읽기 용이고 하나는 쓰기 용입니다. 인서트 (비동기가 제대로 작동 쓰기, 그리고 내가 두 번 같은 삽입 문을 실행하기 때문에 경우 값이 나는 기본 키 위반 오류가 삽입지고 있음을 확신 :.
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)
문제가 발생하는 곳은 모두 (선택 버튼을 클릭하여) Select Statement를 실행하면 값이 적절하게 수행됩니다. [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을 사용 해본 적이 있습니까? 이런 종류의 DB 액세스는 나에게 매우 불안정한 것처럼 보입니다. –
나는 그것을 언젠가 시험해보아야한다, 제안에 감사드립니다! – ClaireG