テスト データベース アプリケーションのソース コード全体を貼り付けます。これで問題が解決するはずです。
注文を行うための UI とサポートする xml ファイルを提供するアクティビティ クラスと、データベース操作を実行するための DbHandler クラスがあります。
これがアクティビティコードです。
package com.test;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteConstraintException;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class TestActivity extends Activity implements OnClickListener{
private EditText accountId = null;
private EditText orderNumber = null;
private Button submit = null;
private DBHandler dbHandler = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupUiElementProperties();
dbHandler = new DBHandler(this);
}
private void setupUiElementProperties() {
accountId = (EditText)findViewById(R.id.accountEditText);
orderNumber = (EditText)findViewById(R.id.orderNoEditText);
submit = (Button)findViewById(R.id.submit);
submit.setOnClickListener(this);
}
public void onClick(View v) {
try {
dbHandler.placeOrder(Integer.parseInt(accountId.getText().toString().trim()),
Integer.parseInt(orderNumber.getText().toString().trim()));
showAlert("ORDER PLACED SUCCESSFULLY");
System.out.println("DONE..");
}catch (SQLiteConstraintException ex) {
System.out.println("SQLITE EXCEPTIOn: " + ex.getMessage());
showAlert("THIS ACCOUNT DOES NOT EXISTS");
}catch (Exception e) {
System.out.println("Exceptionn: " + e.getMessage());
}
}
private void showAlert(String message) {
new AlertDialog.Builder(TestActivity.this)
.setTitle("Alert")
.setMessage(message)
.setPositiveButton("ok", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dlg, int sumthin) {}
})
.show();
}
}
これは、main.xml の xml コードです。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/accountEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_margin="10dp"
android:layout_toRightOf="@+id/accountNoLabel" android:inputType="number">
<requestFocus />
</EditText>
<TextView
android:id="@+id/accountNoLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/accountEditText"
android:layout_alignBottom="@+id/accountEditText"
android:layout_alignParentLeft="true"
android:text="Account Id" android:layout_marginLeft="5dp"/>
<EditText
android:id="@+id/orderNoEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/accountEditText"
android:layout_alignRight="@+id/accountEditText"
android:layout_below="@+id/accountEditText" android:inputType="number"/>
<TextView
android:id="@+id/orderLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/orderNoEditText"
android:layout_alignBottom="@+id/orderNoEditText"
android:layout_alignLeft="@+id/accountNoLabel"
android:text="Order No" />
<Button
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="Submit" />
</RelativeLayout>
そして最後に DbHandler クラス
package com.test;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteConstraintException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHandler extends SQLiteOpenHelper {
private SQLiteDatabase sqliteDatabaseInstance_ = null;
public DBHandler(Context context){
super(context, "TESTDATABASE.db", null, 1);
sqliteDatabaseInstance_ = getWritableDatabase();
sqliteDatabaseInstance_.execSQL("PRAGMA foreign_keys = ON;");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.execSQL("CREATE TABLE ACCOUNT (accountId INTEGER PRIMARY KEY, name TEXT)");
insertAccount(1234, "xyz", db);
db.execSQL("CREATE TABLE ORDER_DETAILS (orderNo INTEGER, accountId INTEGER," +
"FOREIGN KEY (accountId) REFERENCES ACCOUNT(accountId))");
}catch (SQLiteConstraintException sqliteConstraintException) {
System.out.println("sqliteConstraintException: " + sqliteConstraintException.getMessage());
}catch (Exception e) {
System.out.println("Exception in DBHandler.onCreate: "+e.getMessage());
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
public void placeOrder(int accountNo, int orderNo) throws SQLiteConstraintException{
ContentValues cv = new ContentValues();
cv.put("accountId", accountNo);
cv.put("orderNo", orderNo);
sqliteDatabaseInstance_.insertOrThrow("ORDER_DETAILS", null, cv);
}
private void insertAccount(int accId, String accountHolderName, SQLiteDatabase db) {
ContentValues cv = new ContentValues();
System.out.println("db: " + db);
System.out.println("accountId: " + accId) ;
System.out.println("accountHolderName: " + accountHolderName);
cv.put("accountId", accId);
cv.put("name", accountHolderName);
db.insertOrThrow("ACCOUNT", null, cv);
}
}
実際には、注文番号 (ORDER_DETAILS テーブル) を手動で追加する必要はありません。このフィールドは、自動インクリメントしてデータベースに入力する必要があります。
「アカウント」テーブルにはエントリがないため、DbHandler に insertAccount() を追加しました。この方法を使用して、アカウント ID「1234」のアカウントを追加しています。
これはあなたの出力でなければなりません:
シナリオ 1 口座番号: 1234 注文番号: 453412
アカウント ID 1234 が ACCOUNT テーブルに存在するため、このエントリがデータベースに挿入され、正常な更新のアラートが表示されます。
シナリオ 2 アカウント 2343 注文番号: 14523
外部キー制約が失敗するため、このエントリは受け入れられません。そのため、「THIS ACCOUNT DOES NOT EXIST」というアラートが表示されます。
私のデータベースはあなたが必要とするものと同じではないかもしれませんが、これがあなたを助けるのに十分であることを願っています.
SQLITEBROWSER を使用してデータを表示します。
ur db ファイルは以下にある必要があります........
ファイルエクスプローラに移動 -----> データ ------> データ ------> com.test -----> TESTDATA.db