2012-09-14 16 views
6

मैं अपने एंड्रॉइड जावा प्रोजेक्ट में एकाधिक SQLite डेटाबेस का उपयोग कर रहा हूं। निम्नलिखित कोड का उपयोग करके पहला (लॉगिन के लिए) ठीक काम करता है और मैं कनेक्शन बंद कर रहा हूं। हालांकि, निम्नलिखित पृष्ठ पर मैं एक फ़ंक्शन को कॉल कर रहा हूं जो एक अलग डेटाबेस का उपयोग करता है लेकिन ऐसा लगता है कि यह अभी भी पहले डेटाबेस का संदर्भ देता है, न कि नया। मुझे यह त्रुटि मिल रही है:एंड्रॉइड: गलत डेटाबेस का उपयोग कर 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; 
} 

मैं कैसे सुनिश्चित करूं कि यह दूसरे डेटाबेस का उपयोग करता है और पहले नहीं? टॉम

+1

कहाँ आपको लगता है कि लॉगिन डाटाबेस पर अपने कर्सर बंद किया? – jnthnjns

+0

बस पहले उप पर कर्सर को बंद करने का प्रयास किया लेकिन फिर भी वही त्रुटि – TMB87

+3

आपने अपने कई लॉगकट पोस्ट नहीं किए हैं। क्या हम सिर्फ "वर्तमान डीबी है:" संदेश, अपवाद और इतने पर जांच सकते हैं? Global.sctArea भी क्या है, और क्या होता है यदि (c.getCount()> 0) गलत है? आप कई सूचनाओं को मजाक कर रहे हैं (मुझे पता है कि सादगी के लिए है, लेकिन यह बहुत मदद नहीं कर रहा है ...) –

उत्तर

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_PATHs को परिभाषित करने और उन्हें संदर्भ जहां प्रासंगिक करने की आवश्यकता होगी के लिए

आशा इस मदद करता है, एल & एल भागीदारों

संबंधित मुद्दे