Тема: Видалення колонки з таблиці БД SQLite ( декілька запитань ) .
Я знаю, щоб видалити колонку в БД SQLite треба :
- створити нову таблицю (без колонки яку треба видалити),
- перенести дані зі старої таблиці в нову,
- видалити стару таблицю,
- та переіменувати нову таблицю.
Я для початку створюю копію таблиці , зі всіма колонками (потім збираюсь робити без колонки яку треба видалити). Виникли питання :
1 . Як в цілому мій код (нижче) ?
спочатку я Створюю нову таблицю з однією колонкою ІД. 
потім         Добавляю в нову таблицю колонки 
              - Вставляю  в нову таблицю  строки ( INSERT INTO...). Лишу  поле ІД буде заповнене даними 
              - За допомогою    update   добавляю дані в інші поля (крім ІД)  
2.  довелось двічі писати  rs = statmt.executeQuery("SELECT * FROM " + tableName); інакше в циклі while  не вставлялися дані в нову таблицю.  Чому ?
3.  Питання стосується двійних та одинарних лапок . Коли треба двійні, а коли двійні та одинарні  ?
 String sql1Update = " update  '"+newTableName+"' set "+colNamesList.get(i)+" = '"+ obj[n]+"'  where id = "+ obj[0]+" ";                             //   '"+ obj[n]+"'  -  пишу в двійних та одинарних лапках. Інакше добавити текстові дані не вдавалося, тільки числа .
4. Ще я не раз використовую  Statement statmt  та  PreparedStatement prstm для виконання різних запитів. Коли  їх  треба закривати -  щоразу після використання чи достатньо одного разу в кінці метода ?
Ось код:
де:
tableName - ім'я старої таблиці
colNamesList - список (колекція імен колонок )
colTypesList - список  типів колонок
public void RemoweColumn ()  {
        try {
            PreparedStatement prstm =null;
            Statement statmt = null;
            statmt= conn.createStatement();
    rs = statmt.executeQuery("SELECT * FROM " + tableName);    //  1-й раз роблю запит
     colTypesList.clear();
     for(int n=1;n <=colNamesList.size();n++){
            colTypesList.add(rs.getMetaData().getColumnTypeName(n));
          }
// Створюю нову таблицю з однією колонкою ІД (colNamesList.get(0))
         String newTableName = tableName +"Copy";
              String sql =  "CREATE TABLE ["+newTableName+"] (["+colNamesList.get(0) +"] INTEGER)";
              statmt.execute(sql);
//Добавляю в нову таблицю колонки    
          
              for(int n=1;n<colNamesList.size(); n++){  
                 String  AddColumn = "Alter Table "+newTableName+"  ADD  '"+colNamesList.get(n) +"'  '"+ colTypesList.get (n)+"' " ;
                 statmt.execute(AddColumn);
            }
             rs = statmt.executeQuery("SELECT * FROM " + tableName);  //  2-й раз доводиться  робити запит
           
// В  циклі заповнюю даними нову таблицю
           while(rs.next()){
           Object[] obj = new Object[colNamesList.size()] ; // В [b] obj [/b] зберігається одна строка 
           for(int n=0; n<colNamesList.size(); n++){ 
                   obj[n] =  rs.getObject(colNamesList.get(n));      
                }
// Вставляю  в нову таблицю  строки ( INSERT INTO...). Лише  поле ІД буде заповнене даними
             String sqlInsert = " INSERT INTO   '"+newTableName+"' ("+colNamesList.get(0)+")  VALUES("+ obj[0]+")";
                 prstm = conn.prepareStatement(sqlInsert);
                 prstm.executeUpdate();
                 if (prstm!=null )prstm.close(); 
       // За допомогою    update   добавляю дані в інші поля (крім ІД)      
          for( int n = 1; n< colNamesList.size(); n++){
                    String sql1Update = " update  '"+newTableName+"' set "+colNamesList.get(n)+" = '"+ obj[n]+"'  where id = "+ obj[0]+" ";                                  //   '"+ obj[n]+"'  -  пишу в двійних та одинарних лапках. Інакше добавити текстові дані не вдавалося, тільки числа .
                prstm = conn.prepareStatement(sql1Update);
                     prstm.executeUpdate();
                     if (prstm!=null )prstm.close();
                }
            }
            if (statmt!=null )statmt.close();
            if (prstm!=null ) try {
             prstm.close();
             } catch (SQLException ex) {
                 Logger.getLogger(TM.class.getName()).log(Level.SEVERE, null, ex);
             }
        } catch (SQLException ex) {
            Logger.getLogger(TM.class.getName()).log(Level.SEVERE, null, ex);
        }
     }
 Та будь-ласка.