2011-09-15 58 views
7

Tôi có một danh sách mảng khác với tên cột. Tôi muốn có một phương pháp tạo generatized mà nên tạo bảng dựa trên arraylist tôi đã trôi qua. Có thể có một cấu trúc có thể tạo bảng tự động hay không. Vui lòng đề xuất bất kỳ giải pháp nào.Có thể tạo bảng sqlite tại thời gian chạy dựa trên số phần tử trong mảng

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

@ neha, ông là nghi ngờ chính xác tôi cần, cho đến bây giờ tôi không tìm thấy bất kỳ giải pháp, hy vọng câu hỏi của bạn có thể giúp tôi – Abhi

+0

Yes. Có thể. Chỉ cần tạo DDL thích hợp (ngôn ngữ định nghĩa dữ liệu) và gửi nó như là một lệnh không truy vấn, giống như bất kỳ lệnh nào khác. Đề án tạo bảng sẽ phụ thuộc vào các quy tắc cục bộ, tất nhiên. Đảm bảo trích dẫn tất cả số nhận dạng để tránh xung đột từ khóa SQL. –

+0

Cảm ơn. bạn có thể đưa ra một số ví dụ để tôi có thể dễ dàng viết mã không. Tôi đã chỉnh sửa câu hỏi của mình bằng mã tôi có. trong oncreate chức năng tôi không thể giữ đối số cố định vì nó sẽ khác nhau tùy thuộc vào không có kích thước của mảng tôi sẽ vượt qua. – neha

Trả lời

8

Tôi đã tạo lớp của riêng mình để tạo bảng và chèn giá trị theo cách được tổng quát.

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

mã rất hữu ích. cảm ơn – Riser

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