6

Android Java プロジェクトで複数の SQLite データベースを使用しています。最初のもの (ログイン用) は、次のコードを使用して正常に動作し、接続を閉じています。ただし、次のページでは、別のデータベースを使用する関数を呼び出していますが、新しいデータベースではなく最初のデータベースを参照しているようです。次のエラーが表示されます。

09-14 13:18:01.990: I/SqliteDatabaseCpp(10035): sqlite returned: error code = 1, msg = no such table:
 NextID, db=/mnt/extSdCard/DirectEnquiries/AuditingData/Static/Users

そうです、NextID はユーザーにありません。

ユーザー テーブルを使用するログイン ページのコードは次のとおりです。

if(String.valueOf(loginCount).equals("2")) {

        File dbfile = new File(Global.StaticDB + "/Users" ); 
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);

        Cursor c = db.rawQuery("SELECT UserID from Users where UserID like '" + txtUsername.getText().toString().trim() + "' AND Password like '" + txtPassword.getText().toString().trim() + "'", null); 
        c.moveToFirst();

        if(c.getCount() > 0) {
            Global.Username = c.getString(c.getColumnIndex("UserID"));
            Global.currentDB = spnLocation.getSelectedItem().toString();
            Global.currentDBfull = Global.sctArea + Global.currentDB;

            db.close();
            Context context = getApplicationContext();
            CharSequence text = "Logged In";
            int duration = Toast.LENGTH_SHORT;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();
            Intent ShowMainPage = new Intent(view.getContext(), MainPage.class);
            startActivityForResult(ShowMainPage, 0);


        }

次のページはこれを使用しています:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_page);
    TextView txt = (TextView) findViewById(R.id.textView1);
    txt.setText(Global.Username);
    TextView dbtxt = (TextView) findViewById(R.id.txtDB);
    dbtxt.setText(Functions.getNextID("StationObjects"));

}

そして機能は次のとおりです。

public static int getNextID(String tablename) {
    Log.e("Current DB is: ", Global.currentDBfull);
    File dbfile = new File(Global.currentDBfull); 
    SQLiteDatabase dbF = SQLiteDatabase.openOrCreateDatabase(dbfile, null);

    int rtnID=(int)DatabaseUtils.longForQuery(dbF,"Select NxtNumber from NextID where NxtTable like '" + tablename + "'",null);    
    rtnID += 1;
    //db.rawQuery("update NextID set NxtNumber = '" + rtnID + "' where NxtTable like 'StationObjects'", null);
    dbF.close();
    return rtnID;
}

最初のデータベースではなく、2 番目のデータベースを使用していることを確認するにはどうすればよいですか? トム

4

1 に答える 1

2

次の形式を使用して、データベースを開いたり閉じたりすることができます。

private static String DB_PATH = "/data/data/PACKAGE_NAME/databases/DATABASE_NAME.db";
private static SQLiteDatabase db;
db = SQLiteDatabase.openDatabase(DB_PATH, null, SQLiteDatabase.OPEN_READONLY);
// RUN YOUR QUERIES ETC
db.close()

2 つのデータベースの場合、2 つの DB_PATH を定義し、関連する場所でそれらを参照する必要があります。

これがお役に立てば幸いです, L & L Partners

于 2012-09-17T08:14:01.977 に答える