2011-09-15 5 views
7

Tengo una lista de matrices diferente con nombres de columna. Quiero tener un método de creación generada que cree una tabla basada en la lista de arrays que he pasado. ¿Es posible tener una estructura con puede crear tabla dinámicamente? Por favor sugiera cualquier solución.¿Es posible crear una tabla sqlite en tiempo de ejecución en función del número de elementos en la matriz

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, la suya es la duda exactamente lo que necesito, hasta ahora no encontré ninguna solución, espero que tu pregunta me puede ayudar – Abhi

+0

Sí. Es posible. Simplemente genere el DDL apropiado (lenguaje de definición de datos) y envíelo como un comando sin consulta, como cualquier otro. El esquema de generación de tablas dependerá de las reglas locales, por supuesto. Asegúrese de citar todos los identificadores para evitar conflictos de palabras clave SQL. –

+0

Gracias. ¿Puedes dar algún ejemplo para que me sea fácil codificar? He editado mi pregunta con el código que tengo. en la función oncreate no puedo mantener los argumentos fijos, ya que diferirá dependiendo del tamaño de la matriz que pase. – neha

Respuesta

8

Creé mi propia clase para crear tablas e insertar valores de manera generada.

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

código muy útil. Gracias – Riser

Cuestiones relacionadas