2015-02-01 3 views
1

Я хотел бы построить таблицу с использованием SQLite, которая включает в себя 4500 аэропортов по всему миру, и я не знаю, как я могу их вставить.Вставить большое количество записей

Airport.java

public class Airport { 

int id; 
String name, icao, iata, country, city, countryCode; 

public Airport() { 

} 

public Airport(int id,String name,String icao,String iata, String country, String city, String countryCode) 
{ 
    this.id = id; 
    this.name = name; 
    this.icao = icao; 
    this.iata = iata; 
    this.country = country; 
    this.city = city; 
    this.countryCode = countryCode; 
} 

public Airport(String name,String icao,String iata, String country, String city, String countryCode) 
{ 
    this.name = name; 
    this.icao = icao; 
    this.iata = iata; 
    this.country = country; 
    this.city = city; 
    this.countryCode = countryCode; 
} 

public String getName() { 
    return this.name; 
} 

public String getICAO() 
{ 
    return this.icao; 
} 

public String getIATA() 
{ 
    return this.iata; 
} 

public String getCountry() 
{ 
    return this.country; 
} 

public String getCity() 
{ 
    return this.city; 
} 

public String getCountryCode() 
{ 
    return this.countryCode; 
} 

} 

DatabaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 4; 

private static final String DATABASE_NAME = "airportsDB"; 

private static final String TABLE_AIRPORTS = "airports"; 

private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "airportname"; 
private static final String KEY_ICAO = "icao"; 
private static final String KEY_IATA = "iata"; 
private static final String KEY_COUNTRY = "country"; 
private static final String KEY_CITY = "city"; 
private static final String KEY_COUNTRYCODE = "countrycode"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 
     String CREATE_AIRPORTS_TABLE = "CREATE TABLE " + TABLE_AIRPORTS+" (" 
       +KEY_ID+" INTEGER PRIMARY KEY, "+KEY_NAME+" TEXT, "+KEY_ICAO+ 
       " TEXT, "+KEY_IATA+" TEXT, "+KEY_COUNTRY+" TEXT, "+KEY_CITY+ 
       " TEXT, "+KEY_COUNTRYCODE+" TEXT"+")"; 
     db.execSQL(CREATE_AIRPORTS_TABLE); 


} 


@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_AIRPORTS); 

    // Create tables again 
    onCreate(db); 
} 

public void addAirport(Airport airport){ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, airport.getName()); 
    values.put(KEY_ICAO, airport.getICAO()); 
    values.put(KEY_IATA, airport.getIATA()); 
    values.put(KEY_COUNTRY, airport.getCountry()); 
    values.put(KEY_CITY, airport.getCity()); 
    values.put(KEY_COUNTRYCODE,airport.getCountryCode()); 

    db.insert(TABLE_AIRPORTS,null,values); 
    db.close(); 
} 


} 

MainActivity.js

public class MainActivity extends Activity { 


protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.menu); 

    DatabaseHandler db = new DatabaseHandler(this); 
    Log.d("INSERT: ", "Inserting..."); 
    db.addAirport(new Airport("Alfonso B. Aragon Airport","SKCL","CLO","Colombia","Cali","CO")); 
    db.addAirport(new Airport("Kangding Airport","ZUKD","KGT","China","Kangding","CN")); 
    db.addAirport(new Airport("Ramechhap Airport","VNRC","RHP","Nepal","Ramechhap","NP")); 
    db.addAirport(new Airport("Bajura Airport","VNBR","BJU","Nepal","Bajura","NP")); 
    db.addAirport(new Airport("Budapest Ferenc Liszt International Airport","LHBP","BUD","Hungary","Budapest","HU")); 
    db.addAirport(new Airport("Awantipur","VIAW","AWT","India","Awantipur","IN")); 
    db.addAirport(new Airport("Malvinas Argentinas International Airport","SAWH","USH","Argentina","Ushuaia","AR")); 
    db.addAirport(new Airport("Rotterdam The Hague Airport","EHRD","RTM","Netherlands","Rotterdam","NL")); 
    db.addAirport(new Airport("Rochester International Airport","KRST","RST","United States","Rochester","US")); 
    db.addAirport(new Airport("Hatay Airport","LTDA","HTY","Turkey","Antakya","TR")); 
    db.addAirport(new Airport("Alma Airport","CYTF","YTF","Canada","Alma","CA")); 
    db.addAirport(new Airport("Karpathos Airport","LGKP","AOK","Greece","Karpathos","GR")); 
    db.addAirport(new Airport("Zona da Mata Regional Airport","SBZM","IZA","Brazil","Juiz de Fora","BR")); 
    db.addAirport(new Airport("Blue Mountain Airport","","VBM","United States","Blue Mountain","US")); 
    db.addAirport(new Airport("Bogorodskoye Airport","UHNB","BQG","Russian Federation","Bogorodskoye","RU")); 
    db.addAirport(new Airport("Elista Airport","URWI","ESL","Russian Federation","Elista","RU")); 
    db.addAirport(new Airport("Vorkuta Airport","UUYW","VKT","Russian Federation","Vorkuta","RU")); 
... 
... 
... 
... 
(4500 X db.addAirport...) 
Button send = (Button)findViewById(R.id.sendButton); 
     final EditText airportText = (EditText)findViewById(R.id.airport); 
     final Switch status = (Switch)findViewById(R.id.statusSwitch); 

     send.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Intent i = new Intent(getApplicationContext(), MainActivity.class); 
       i.putExtra("AIRPORT", airportText.getText().toString()); 
       boolean isChecked = status.isChecked(); 

       if(isChecked) 
        i.putExtra("STATUS", "arr"); 

       else 
        i.putExtra("STATUS", "dep"); 

       startActivity(i); 
     } 
    }); 
    } 




} 

ErrorLog: Ошибка: (18, 20) ошибка: код слишком большой

Проблема заключается в том, что слишком большой код, поэтому он не может быть скомпилирован. Как можно эффективно вставить эти записи?

+1

* «Проблема в том, что слишком большой код, поэтому его невозможно скомпилировать ...» * - укажите точное сообщение об ошибке, с которым вы сталкиваетесь. В противном случае просто уменьшите код: (1) предварительно создайте базу данных в автономном режиме и включите ее в качестве ресурса; или (2) путем предоставления информации о аэропорте в текстовом файле в качестве ресурса и заполнения его при запуске. – jww

+0

У меня есть текстовый файл, который включает в себя весь код строки JAVA (строки 4500 db.AddAirport()) Есть ли способ выполнить эти коды из текстового файла? – Avi

ответ

3

Вы не выполняете текстовый файл, вы его читаете и вставляете строки в базу данных. Вы можете сохранить его в формате CSV или JSON, так что вам просто нужно смотреть вверх (если вы еще не знаете):

  • Как упаковать текстовый файл с APK
  • Как открыть такой файл и прочитайте его по строке

У вас, похоже, есть дескриптор на вставке строк, чтобы это было сделано.

Это все, если вам не нравится предложение jww о создании базы данных вне Android и ее упаковке с помощью приложения. Этот подход будет означать, что вашему приложению не нужно тратить время на загрузку db при первом запуске. Если вы хотите сделать это таким образом, возможно, он сможет опубликовать его в качестве ответа, чтобы вы могли принять его.

Смежные вопросы