2011-09-15 11 views
7

में तत्वों की संख्या के आधार पर रनटाइम पर स्क्लाइट तालिका बनाना संभव है मेरे पास स्तंभ नामों के साथ एक अलग सरणीसूची है। मैं एक जेनरेटेड बनाने की विधि बनाना चाहता हूं जो कि पास की गई सरणी सूची के आधार पर तालिका बनाना चाहिए। क्या संरचना के साथ गतिशील रूप से तालिका बना सकते हैं। कृपया कोई समाधान सुझाएं।क्या सरणी

private static class OpenHelper extends SQLiteOpenHelper { 

     OpenHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     System.out.println("openhelper1"); 

    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d("**DataHelper", "***********in oncreate"); 
     db.execSQL("CREATE TABLE " + TABLE_NAME + " (username TEXT,altnum TEXT,passkey TEXT,flag TEXT)"); 

    } 


    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w("Example", "Upgrading database, this will drop tables and recreate."); 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
     onCreate(db); 
    } 
} 
+1

@ नेहा, मुझे संदेह है कि मुझे अभी तक कोई ज़रूरत नहीं है, आशा है कि आपका प्रश्न मुझे – Abhi

+0

हां मदद कर सकता है। यह संभव है। बस उचित डीडीएल (डेटा परिभाषा भाषा) उत्पन्न करें और इसे किसी अन्य की तरह गैर-क्वेरी कमांड के रूप में भेजें। टेबल जनरेशन योजना निश्चित रूप से स्थानीय नियमों पर निर्भर करेगी। एसक्यूएल कीवर्ड विवादों से बचने के लिए सभी पहचानकर्ताओं को उद्धृत करना सुनिश्चित करें। –

+0

धन्यवाद। क्या आप कुछ उदाहरण दे सकते हैं ताकि मेरे लिए कोड करना आसान हो। मैंने अपने प्रश्न को मेरे पास कोड के साथ संपादित किया है। ऑनक्रेट फ़ंक्शन में मैं निश्चित तर्क नहीं रख सकता क्योंकि यह किसी सरणी के आकार के आधार पर भिन्न होगा। – neha

उत्तर

8

मैंने टेबल बनाने और जनरेटेड तरीके से मूल्य डालने के लिए अपनी कक्षा बनाई।

public void createDynamicDatabase(Context context,String tableName,ArrayList<String> title) { 

      Log.i("INSIDE createLoginDatabase() Method","*************creatLoginDatabase*********"); 
      try { 

       int i; 
       String querryString; 
       myDataBase = context.openOrCreateDatabase("Db",Context.MODE_WORLD_WRITEABLE, null);   //Opens database in writable mode. 
       //System.out.println("Table Name : "+tableName.get(0)); 

       querryString = title.get(0)+" VARCHAR(30),"; 
       Log.d("**createDynamicDatabase", "in oncreate"); 
       for(i=1;i<title.size()-1;i++) 
       {    
        querryString += title.get(i); 
        querryString +=" VARCHAR(30)"; 
        querryString +=","; 
       } 
       querryString+= title.get(i) +" VARCHAR(30)"; 

       querryString = "CREATE TABLE IF NOT EXISTS " + tableName + "("+querryString+");"; 

       System.out.println("Create Table Stmt : "+ querryString); 

       myDataBase.execSQL(querryString); 

      } catch (SQLException ex) { 
       Log.i("CreateDB Exception ",ex.getMessage()); 
      } 
     } 
     public void insert(Context context,ArrayList<String> array_vals,ArrayList<String> title,String TABLE_NAME) { 
      Log.d("Inside Insert","Insertion starts for table name: "+TABLE_NAME); 
      myDataBase = context.openOrCreateDatabase("Db",Context.MODE_WORLD_WRITEABLE, null);   //Opens database in writable mode. 
      String titleString=null; 
      String markString= null; 
      int i; 
      titleString = title.get(0)+","; 
      markString = "?,"; 
      Log.d("**createDynamicDatabase", "in oncreate"); 
      for(i=1;i<title.size()-1;i++) 
      {    
       titleString += title.get(i); 
       titleString +=","; 
       markString += "?,"; 
      } 
      titleString+= title.get(i); 
      markString += "?"; 

      //System.out.println("Title String: "+titleString); 
      //System.out.println("Mark String: "+markString); 


      INSERT="insert into "+ TABLE_NAME + "("+titleString+")"+ "values" +"("+markString+")"; 
      System.out.println("Insert statement: "+INSERT); 
      //System.out.println("Array size iiiiii::: "+array_vals.size()); 
      //this.insertStmt = this.myDataBase.compileStatement(INSERT); 
      int s=0; 

      while(s<array_vals.size()){ 

      System.out.println("Size of array1"+array_vals.size()); 
        //System.out.println("Size of array"+title.size()); 
      int j=1; 
      this.insertStmt = this.myDataBase.compileStatement(INSERT); 
      for(int k =0;k< title.size();k++) 
      { 

       //System.out.println("Value of column "+title+" is "+array_vals.get(k+s)); 
       //System.out.println("PRINT S:"+array_vals.get(k+s)); 
       System.out.println("BindString: insertStmt.bindString("+j+","+ array_vals.get(k+s)+")"); 
       insertStmt.bindString(j, array_vals.get(k+s)); 



       j++; 
      } 

      s+=title.size(); 

      } 
      insertStmt.executeInsert(); 
     } 
+0

बहुत उपयोगी कोड। धन्यवाद – Riser