2012-09-14 44 views
6

Tôi đang sử dụng nhiều cơ sở dữ liệu SQLite trong dự án java android của mình. Việc đầu tiên (cho một đăng nhập) hoạt động tốt, bằng cách sử dụng mã sau đây và tôi đóng kết nối. Tuy nhiên, trên trang sau tôi đang gọi một hàm sử dụng cơ sở dữ liệu khác nhưng có vẻ như vẫn tham chiếu đến cơ sở dữ liệu đầu tiên và không phải là cơ sở dữ liệu mới. Tôi nhận được lỗi này:Android: SQLite sử dụng cơ sở dữ liệu sai

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 

Điều gì là đúng, NextID không có trong Người dùng.

Đây là đoạn mã cho trang đăng nhập trong đó sử dụng những người sử dụng bảng:

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); 


     } 

Trang tiếp theo là sử dụng này:

@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")); 

} 

Và chức năng là:

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; 
} 

Làm cách nào để đảm bảo rằng nó sử dụng cơ sở dữ liệu thứ hai và không phải là cơ sở dữ liệu đầu tiên? Tom

+1

Nơi mà bạn đã đóng con trỏ của bạn trên mà cơ sở dữ liệu đăng nhập? – jnthnjns

+0

Chỉ cần thử đóng con trỏ trên phụ đầu tiên nhưng vẫn cùng lỗi – TMB87

+3

Bạn đã không đăng nhiều logcat của mình. Chúng ta có thể kiểm tra thông báo "Current DB is:", ngoại lệ và vân vân không? Ngoài ra Global.sctArea là gì, và điều gì xảy ra nếu (c.getCount()> 0) là sai? Bạn đang giấu nhiều thông tin (tôi biết đó là vì sự đơn giản, nhưng nó không giúp ích nhiều ...) –

Trả lời

2

Bạn có thể thử bằng cách sử dụng định dạng sau để mở và đóng cơ sở dữ liệu của bạn:

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() 

Đối với trường hợp của 2 cơ sở dữ liệu bạn sẽ cần phải xác định 2 DB_PATHs và tham khảo họ nơi có liên quan.

Hope this helps, L & L Partners

Các vấn đề liên quan