рд╣рдо Android рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ SQL рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рдЧрддрд┐ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ

рд╢реБрдн рджреЛрдкрд╣рд░

рдЕрдкрдиреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореБрдЭреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдорд╛рдереЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдорд╛рдзрд╛рди рдиреЗ рдмрд╣реБрдд рдзреАрдореЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдП, рдХреНрдпреЛрдВрдХрд┐ 40,000 рд╕реЗ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрди рдкрдВрдХреНрддрд┐ рдЕрджреНрдпрддрдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдореИрдВрдиреЗ рдХреИрд╕реЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рдХрд╣рд╛рдиреА рдЖрдЧреЗ рдмрдврд╝реЗрдЧреАред

рдХрд╛рд░реНрдп рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг:

Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде (рдПрдкреАрдХреЗ рдХреЗ рдЕрдВрджрд░, рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ) рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╢рд╣рд░реЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдереАред рд▓реЗрдХрд┐рди рдЬрд╛рдирдХрд╛рд░реА рдмреБрдирд┐рдпрд╛рджреА рд╣реИ, рднрд╛рд╖рд╛-рд╕реНрд╡рддрдВрддреНрд░, рдФрд░ рднрд╛рд╖рд╛-рдирд┐рд░реНрднрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗрд╡рд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдереЗред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ 1-2 mb рд╕реЗ рдореВрд▓ рдПрдкреАрдХреЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдЬреЛрдбрд╝ рджреЗрдЧреАред рдФрд░ 11 рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдкреИрдЪ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЗрдВрдЯрд░рдиреЗрдЯ (рд╕рд░реНрд╡рд░ рд╕реЗ) рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░ рдкрд░ рд▓реБрдврд╝рдХрд╛ рд╣реБрдЖ рд╣реИред
рдкреИрдЪ рдПрдХ gzip-clamped рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдереА, рдЬрд┐рд╕рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЯреИрдм (\ t) рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдорд╛рди рдереЗред

рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рдпрд╣ рддреЗрдЬ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдпреЛрдЬрдирд╛ рдХреА рдЕрдбрд╝рдЪрди рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИред
рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ рдЬреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдирд┐рд░реНрдорд┐рдд SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ 3 рдлрд╝реАрд▓реНрдб рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ (рдкреИрдЪ рд╕реЗ рдорд╛рди рдЬреЛрдбрд╝реЗрдВ)ред рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдРрд╕реА рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдЬреЛ рднрд╛рд╖рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 20,000 рд╕реЗ 60,000 рддрдХ рдереАрдВред

рдЬрд╛рд╡рд╛ рдХреЛрдб рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ (рдореИрдВ рдХреЛрдб рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рднреА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ рдФрд░ рдХрд╣реАрдВ рднреА рд╕рд╣реЗрдЬреЗ рдирд╣реАрдВ рдЧрдПред рдореИрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдЕрдбрд╝рдЪрдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд╛рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рди рджреЛрд╣рд░рд╛рдПрдВред )ред
try { buffRead = new BufferedReader(fileIn, (1000*1024)); // 1000 KB String line; int lineNum = 0; while ((line = buffRead.readLine()) != null) { try { String[] values = line.split("\t"); if (values.length < 2) // cause 3rd value van be empty { // some error, try next line continue; } int idInt = Integer.valueOf(values[0]); String name = values[1]; getDb().execSql("update " + getTableNabe() + " set " + lang.getColumnName() + " = ? where " + COLUMN_ID + " = ? ", new String[] { name, String.valueOf(idInt) }); getDb().execSql("update " + getTableNabe() + " set " + lang.getColumnSort() + " = ? where " + COLUMN_ID + " = ? ", new String[] { String.valueOf(lineNum++), String.valueOf(idInt) }); if (values.lengh == 3 && values[2].length != 0) { String data = values[2]; getDb().execSql("update "+ getTableNabe() + " set " + lang.getColumnData() + " = ? where " + COLUMN_ID + " = ? ", new String[] { data, String.valueOf(idInt) }); } } catch (NumberFormatException e) { e.printStackTrace(); return false; } catch (SQLException e) { e.printStackTrace(); return false; } createIndexOnLang(lang); }// end of while } catch (IOException e) { e.printStackTrace(); return false; } finally { if (buffRead != null) { try { buffRead.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; 


рдЦреИрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕реБрдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрд╣рдирд╛ рдХрд┐ рдзреАрд░реЗ-рдзреАрд░реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рдирд╛ рд╣реИред рдХреЛрдб рдиреЗ рджрд░реНрдЬрдиреЛрдВ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реАрдВред
рдореЗрд░реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рдПрдХ рд▓реЗрдирджреЗрди рдЬреЛрдбрд╝рдирд╛ рдерд╛ред

рдкрд╛рд╢ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  getDb().beginTransaction(); 

рдЪрдХреНрд░ рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  getDb().setTransactionSuccessful(); 

рдФрд░ рдЕрдВрддрд┐рдо рдмреНрд▓реЙрдХ рдореЗрдВ
  getDb().endTransaction(); 


рдпрд╣ рд╡реГрджреНрдзрд┐ рдмрдбрд╝реА рдирд╣реАрдВ рдереАред рддрдм рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдЧреНрд░рд╣рдг рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓реНрд╕ ( ADT ) рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣рд╛рдБ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдбреАрдбреАрдПрдордПрд╕ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд╣реИред

рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рдореБрдЭреЗ рдПрдбреАрдмреА рдХреА рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓реЗ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдХреА рдХрдорд┐рдпрд╛рдВ

рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рддрдВрддреНрд░ рдХреА рдорджрдж рд╕реЗ, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдореЗрд░реЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдереАред
1. рдереВрдХ рдПрдХ рдмрд╣реБрдд рд╣реА рдзреАрдорд╛ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдерд╛ред
2. рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдХреЗ рд╕рд╛рде, рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд░ рдмрд╛рд░ рдирдП рд╕реНрдЯреНрд░рд┐рдВрдЧрд░рдмрд┐рд▓реНрдбрд░реНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рддрдм рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдлреЗрдВрдХ рджрд┐рдП рдЧрдП рдереЗред рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рд╣реИ , рдХрднреА рднреА рд╕рд╛рдЗрдХрд┐рд▓ рдкреНрд▓рд╕ (+) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЧреЛрдВрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд StringBuilder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЪрдХреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рдЬреЛ, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕реБрдзрд╛рд░ рд╣реИред
3. Android рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╣реА SQL рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд╛рд▓реЗ рдФрд░ рдЕрдирд▓реЙрдХ рдмрдирд╛рдП рдЧрдП рдереЗред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж , рдореБрдЭреЗ setLockingEnabled рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдорд┐рд▓реА, рдЗрд╕реЗ рдЧрд▓рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЧрддрд┐ рдореЗрдВ рдЕрдЪреНрдЫреА рд╡реГрджреНрдзрд┐ рдорд┐рд▓реАред
4. рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреЙрд▓ рдХреЗ рд▓рд┐рдП SQLiteStatement рддреИрдпрд╛рд░ рдХрд░рдирд╛ред рдпрд╣ рднреА рдПрдХ рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдереЛрдбрд╝рд╛ рдЧреБрдЧрд▓реА, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдмрдпрд╛рди, рддрд╛рд░ рдХреА рддрд░рд╣, рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд▓реВрдк рдореЗрдВ, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрд╛рдВрдзреЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред

рдЬрд╛рд╡рд╛ рдХреЛрдб рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг

рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ, рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ, рд▓реВрдк рд╕реЗ SQLiteStatement рддреИрдпрд╛рд░ рдХрд░рдиреЗ, рд▓реВрдк рд╕реЗ рд╕рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛рд░реНрдп рдХреЛ рд╣рдЯрд╛рдиреЗ, рд▓реВрдк рд╕реЗ рдкрд╣рд▓реЗ getDb () рдЬреЛрдбрд╝рдиреЗ рд╕реЗред SetLockingEnabled (рдЭреВрдард╛), рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рд╛ рд╣реИред

 try { buffRead = new BufferedReader(fileIn, (1000*1024)); // 1000 KB String line; int lineNum = 0; checkDbErrors(); getDb().beginTransaction(); getDb().setLockingEnabled(false); // Prepare SQL queries String updateStatment = "update " + getTableName() + " set "; String whereStatment = " where " + COLUMN_ID + " = ?"; String updateNameSQL = updateStatment + lang.getColumns().getColumnName() + " = ? " + whereStatment; String updatqDataSQL = updateStatment + lang.getColumns().getColumnData() + " = ? " + whereStatment; String updatqSortSQL = updateStatment + lang.getColumns().getColumnSort() + " = ? " + whereStatment; SQLiteStatement updateName = getDb().compileStatement(updateNameSQL); SQLiteStatement updateData = getDb().compileStatement(updatqDataSQL); SQLiteStatement updateSort = getDb().compileStatement(updatqSortSQL); while ((line = buffRead.readLine()) != null) { try { int idInt = parseIdFromString(line); String name = parseNameFromString(line, line.indexOf('\t') + 1); String data= parseDataFromString(line, name.length() + 1); updateName.bindString(1, name); updateName.bindLong(2, idInt); updateName.execute(); if (data.length() != 0) { updateWiki.bindString(1, data); updateWiki.bindLong(2, idInt); updateWiki.execute(); } updateSort.bindLong(1, lineNum++); updateSort.bindLong(2, idInt); updateSort.execute(); } catch (NumberFormatException e) { e.printStackTrace(); return false; } catch (SQLException e) { e.printStackTrace(); return false; } } getDb().setTransactionSuccessful(); } catch (IOException e) { e.printStackTrace(); return false; } finally { getDb().endTransaction(); if (buffRead != null) { try { buffRead.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; 


рддрд░реАрдХреЛрдВ
parseIdFromString (рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд╛рдЗрди),
parseNameFromString (рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд╛рдЗрди, int рд╕реЗ) рдФрд░
parseDataFromString (String line, int from) рдмреЗрд╣рдж рдЕрдирд╛рдбрд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд╛рдЬрди рд╡рд┐рдХрд▓реНрдк рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ:
рд╣реЗрд▓реНрдкрд░ рдореЗрдердб рдХреЛрдб
  private int parseIdFromString(String line) { int ind = line.indexOf('\t'); if (ind == -1) { return 0; } String idStr = line.substring(0, ind); int length = idStr.length(); if (length == 0) { return 0; } int result = 0; int zero = '0'; for (int i = 0; i < length; ++i) { result += (idStr.charAt(i) - zero) * Math.pow(10, length - i - 1); } return result; } private String parseNameFromString(String line, int from) { int ind = line.indexOf('\t', from); if (ind == -1) { return new String(); } return line.substring(from, ind); } private String parseDataFromString(String line, int from) { int ind = line.indexOf('\t', from); if (ind == -1) { return new String(); } return line.substring(from, ind); } 


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк parseNameFromString рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдПрдХ рд▓рд▓рд╛рдЯ рдЕрдиреБрд╡рд╛рдж рдЗрдВрдЯ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд╛рдбрд╝реА рд╕рдВрд╕реНрдХрд░рдг Integer.valueOf (рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдирддреАрдЬрддрди, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рдЕрдкрдбреЗрдЯ рд╡рд┐рдХрд▓реНрдк рдиреЗ рдореВрд▓ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджрд╕ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╛рдиреА рдПрдЪрдЯреАрд╕реА рдбрд┐рдЬрд╛рдпрд░ рдкрд░ рд▓рдЧрднрдЧ 1.5-2 рдорд┐рдирдЯ рдореЗрдВ рдХрд┐рдП рдЧрдП рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ 43,000 рд▓рд╛рдЗрдиреЛрдВ рдиреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛

рд▓реЗрдХрд┐рди, рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдореБрдЭреЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдЬрдм рддрдХ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХреА рднрд╛рд╖рд╛ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ, рддрдм рддрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП 2 рдорд┐рдирдЯ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрднреА рднреА рд╢рдорди рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдорд╛рдг рдХреЗ рдЖрджреЗрд╢реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдм рдПрдВрдбреНрд░реЙрдЗрдб SDK \ source \ android- рд╕реЗ native_exuteute () рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдмрд╕реЗ рд▓рдВрдмрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред 14 \ android \ рдбреЗрдЯрд╛рдмреЗрд╕ \ sqlite \ SQLiteStatement.javaред рдпрд╣ c ++ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рджреЗрд╢реА рддрд░реАрдХрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рд╣рдордиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдЬрд╛рджреВ рд▓реЙрдЧрдЯрд╛рдЗрдорд╕реНрдЯреИрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдЦреЛ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдИ рдереА, рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рднреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдкрд░реЗрд╢рди рдореЗрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЬрд╛рд╡рд╛ рд╣реИ ... рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╡реНрдпрдВрдЧреНрдп, рдореЗрд░реЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ)

рд╣рдо C ++ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ

рдирддреАрдЬрддрди, рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдкрд░реЗрд╢рд╛рди рди рдХрд░рдиреЗ рдФрд░ C ++ рдореЗрдВ рдЕрдкрдирд╛ рдЗрдВрд╕рд░реНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рд▓рд╛рдареА рдФрд░ ... рдХреЗ рд╕рд╛рде рдХрд╣рддреЗ рд╣реИрдВ)ред NDK рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ JNI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рд╡рд╛ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред

рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдПрдирдбреАрдХреЗ рдХреЗ рддрд╣рдд рд╕рд╛рдЗрдХреНрд▓рд╛рдЗрдЯ рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдЦреИрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рдкреНрд░рд╛рдердорд┐рдХред рд╣рдо рд╕реНрд░реЛрдд sqlite рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред рд╕рд╛рдЗрдЯ рдФрд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ NDK рдХреЗ рддрд╣рдд рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд╛рдж рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдПрдирдбреАрдХреЗ рдХреЗ рддрд╣рдд рдХреЛрдб рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣реИрдмреЗ рдкрд░, рдФрд░ рди рдХреЗрд╡рд▓ рдЙрд╕ рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ SQLite рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреАред рдЬрдм рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Google рд╕рдореВрд╣ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд▓рд┐рдВрдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдереЗ) рдорд┐рд▓реЗ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдЬрд┐рд╕рдореЗрдВ SQLite рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрдЫ рд╕рдВрд╕реНрдХрд░рдг рдПрдореНрдмреЗрдбреЗрдб рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рднрд┐рдиреНрди рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдерд╛ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрдиреБрдореЛрджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рдЖрдзрд╛рд░ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╕реНрд╡рдпрдВ SQLite рдХреЗ рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрд░реЛрдд рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЬрд╛рд╡рд╛ рдкрд░ рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ, рдПрдХ рд╣реА рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде, рдЖрдк рдЗрд╕реЗ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рддреЛрдбрд╝рдирд╛ рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдордп рд╣реБрдЖ рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рд╕рдордп рдЬрдм рдореЗрд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдПрдХ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдзрд╛рд░ рд╣рдореЗрд╢рд╛ рдореЗрд░реА рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЧрд▓рддреА рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рдЖрдкрдХреЛ рдореВрд▓ рдХреЛрдб рд╕реЗ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЗрди рдЬрд╛рд╡рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЫреВрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓реЛрдЧ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдард┐рдХрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ SQLite рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИред

рдХрд╣рд╛рдиреА рдкрд░ рд╡рд╛рдкрд╕ред
рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЕрдкрдбреЗрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред SQLite рдШрд╕реАрдЯрд╛ред C ++ рдХреЛрдб рд╕реНрд╡рдпрдВ рдЙрди рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред
рд╕рд╛рде рд╣реА, рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реАред рдпрд╣ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдореНрдорд┐рд▓рди рдХреА рдЧрддрд┐ рдХреИрд╕реЗ рдмрдврд╝рд╛рдИ рдЬрд╛рдПред

рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдирд┐рдХрд▓рд╛, рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ

C ++ рдХреЛрдб
 std::vector<std::string>& split(const std::string &s, char delim, std::vector<std::string> &elems) { elems.clear(); std::stringstream ss(s); std::string item; while (std::getline(ss, item, delim)) { elems.push_back(item); } return elems; } std::string prepareUpdateStatment(std::string columnName, std::string columnValue, std::string id) { std::ostringstream constructor; constructor << "update cities set " << columnName << " = \"" << columnValue << "\" where _id = " << id; return constructor.str(); } std::string prepareUpdateStatmentForBind(std::string columnName) { std::ostringstream constructor; constructor << "update cities set " << columnName << " = ? where _id = ? "; return constructor.str(); } std::string getColumnName(std::string column, std::string lang) { std::ostringstream constructor; constructor << lang << "_" << column; return constructor.str(); } std::string parseInt(int i) { std::ostringstream ss; ss << i; return ss.str(); } bool pushToDBWithPreparedStatments(std::string line, sqlite3* db, std::string lang, int lineNum, sqlite3_stmt* stmtnUpdateName, sqlite3_stmt* stmtnUpdateSort, sqlite3_stmt* stmtnUpdateData) { if (line.size() == 0) { return true; // end of file } int error = SQLITE_OK; std::vector<std::string> elems; elems = split(line, '\t', elems); if (elems.size() < 2) { log("line parse error"); return false; } std::string& idStr = elems[0]; int idInt = atoi(idStr.c_str()); std::string& nameStr = elems[1]; sqlite3_bind_text(stmtnUpdateName, 1 , nameStr.c_str(), -1, SQLITE_STATIC); sqlite3_bind_int(stmtnUpdateName, 2 , idInt); if ((error = sqlite3_step(stmtnUpdateName)) != SQLITE_DONE) { logError(error, sqlite3_errmsg(db)); return false; } sqlite3_clear_bindings(stmtnUpdateName); sqlite3_reset(stmtnUpdateName); sqlite3_bind_int(stmtnUpdateSort, 1 , lineNum); sqlite3_bind_int(stmtnUpdateSort, 2 , idInt); if ((error = sqlite3_step(stmtnUpdateSort)) != SQLITE_DONE) { logError(error, sqlite3_errmsg(db)); return false; } sqlite3_clear_bindings(stmtnUpdateSort); sqlite3_reset(stmtnUpdateSort); if (elems.size() == 3) { std::string& DataStr = elems[2]; sqlite3_bind_text(stmtnUpdateData, 1 , DataStr.c_str(), -1, SQLITE_STATIC); sqlite3_bind_int(stmtnUpdateData, 2 , idInt); if ((error = sqlite3_step(stmtnUpdateData)) != SQLITE_DONE) { logError(error, sqlite3_errmsg(db)); return false; } sqlite3_clear_bindings(stmtnUpdateData); sqlite3_reset(stmtnUpdateData); } return true; } void parseAndUpdateDB(std::string databasePath, std::string patchPath, std::string lang) { time_t beforeStartTime = time(NULL); sqlite3* db; if (sqlite3_open_v2(databasePath.c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_NOMUTEX | SQLITE_OPEN_PRIVATECACHE, NULL) != SQLITE_OK) { logError("Error wile opening db", sqlite3_errmsg(db)); return; } std::string line; std::ifstream myfile(patchPath.c_str()); if (!myfile.is_open()) { log("Error wile opening patch file"); return; } int lineNum = 0; int error = SQLITE_OK; // Begin transaction if ( (error = sqlite3_exec(db, "begin", NULL, NULL, NULL)) != SQLITE_OK) { logError(error, sqlite3_errmsg(db)); return; } sqlite3_stmt* stmtnUpdateName; std::string updateName = prepareUpdateStatmentForBind(getColumnName("name", lang)); if ( (error = sqlite3_prepare(db, updateName.c_str(), updateName.length(), &stmtnUpdateName, NULL)) != SQLITE_OK) { logError(error, sqlite3_errmsg(db)); return; } sqlite3_stmt * stmtnUpdateSort; std::string updateSort = prepareUpdateStatmentForBind(getColumnName("sort", lang)); if ( (error = sqlite3_prepare(db, updateSort.c_str(), updateSort.length(), &stmtnUpdateSort, NULL)) != SQLITE_OK) { logError(error, sqlite3_errmsg(db)); return; } sqlite3_stmt * stmtnUpdateData; std::string updateData = prepareUpdateStatmentForBind(getColumnName("data", lang)); if ( (error = sqlite3_prepare(db, updateData.c_str(), updateData.length(), &stmtnUpdateData, NULL)) != SQLITE_OK) { logError(error, sqlite3_errmsg(db)); return; } // For fast work sqlite3_exec(db, "PRAGMA synchronous = OFF", NULL, NULL, NULL); sqlite3_exec(db, "PRAGMA journal_mode = MEMORY", NULL, NULL, NULL); while ( myfile.good() ) { std::getline(myfile, line); if (!pushToDBWithPreparedStatments(line, db, lang, lineNum++, stmtnUpdateName, stmtnUpdateSort, stmtnUpdateData)) { break; } } sqlite3_finalize(stmtnUpdateName); sqlite3_finalize(stmtnUpdateSort); sqlite3_finalize(stmtnUpdateData); // End transaction if ( (error = sqlite3_exec(db, "end", NULL, NULL, NULL)) != SQLITE_OK) { logError(error, sqlite3_errmsg(db)); return; } sqlite3_close(db); myfile.close(); time_t afterFinishTime = time(NULL); int result = afterFinishTime- beforeStartTime; log("result of run is %d secs" , result); } 



рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрд╛ рдФрд░ рдбрд┐рдмрдЧ рдХрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ NDK рдХреЗ рддрд╣рдд рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛, рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рддрд╣рдд рд╕рдм рдХреБрдЫ рдЬрд╛рджреБрдИ рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдХреЛрдб рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдВрддрд┐рдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЧрд▓рддреА рдирд╣реАрдВ рдвреВрдВрдврдиреА рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдХрд╛ рд╕рд╛рд░ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ C ++ рдореЗрдВ рд╕рдорд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ C ++ рдореЗрдВ рдпрд╣ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рддреЛ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдбрд┐рдмрдЧ (рдЧреНрд░рд╣рдг рд╕реЗ рдЬреБрдбрд╝реЗ) рдХреЗ рддрд╣рдд рдПрдХ рд╣реА рдПрдЪрдЯреАрд╕реА рдбрд┐рдЬрд╛рдпрд░ рдкрд░ 43,000 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдПрдХ рд╣реА рдЗрдВрд╕рд░реНрдЯ, рд▓рдЧрднрдЧ 43 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ред рдпрд╛рдиреА рдХрд╣реАрдВ, 1 рдПрдордПрд╕ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрдиред рдпрджрд┐ рдЖрдк рдЧреНрд░рд╣рдг рдФрд░ рдбрд┐рдмрдЧ рдХреЛ рдХрд╛рдЯ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ 20-25 рд╕реЗрдХрдВрдб рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред рдПрдЪрдЯреАрд╕реА рд╡рди рдПрд╕ рдЬреИрд╕реЗ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рд╕рдореНрдорд┐рд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рд▓рдЧрднрдЧ 10-15 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред рдЬреЛ рд╢реБрд░реБрдЖрддреА рдорд┐рдирдЯреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рднреА рдкреНрд░рдпрд╛рд╕ рдмреЗрдХрд╛рд░ рдирд╣реАрдВ рдЧрдПред

рдиреИрддрд┐рдХрддрд╛

рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ SQLite рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдХреИрд╕реЗ рддреЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореВрд▓ рд╕реНрддрд░ рдкрд░ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП)ред рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдЕрднреА рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдФрд░ рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреАред

рдпреБрдкреАрдбреА:
рдзрдиреНрдпрд╡рд╛рдж to_climb , рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕реБрдзрд╛рд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред 1n рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЧреЛрдВрдж 3 рдЕрджреНрдпрддрди рдЕрдиреБрд░реЛрдзред
рдпрд╛рдиреА 3 рдХрд╝рд╛рдиреВрди рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓рдВрдмреА рдкреНрд░рдЬрд╛рддрд┐рдпрд╛рдВ
рдЕрджреНрдпрддрди рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрдЯ var1 = ?, var2 =? рдХрд╣рд╛рдБ _рдж =?

Source: https://habr.com/ru/post/In190876/


All Articles