3

У меня возникла проблема в случае, когда у меня есть масса запросов вставки в текстовом файле (хранятся в активах), я хочу выполнить все эти запросы во время установки приложения после создание таблиц.sqlite объемная вставка из текстового файла в активах

Я не могу понять, как это сделать.

У меня есть следующий код, который выполняет только первый всех запросов.

 @Override 
     public void onCreate(SQLiteDatabase db) { 

    //create table queries 

    // inserting from the text file in assets 

    InputStream in_s = cntx.getAssets().open("VistaLog.txt"); 
    byte[] b = new byte[in_s.available()]; 
    in_s.read(b); 
    String sql = new String(b); 
    db.execSQL(sql); 

    } 

Но, мне нужно выполнить все запросы один за другим.

Обновление

Используя этот код

StringBuilder SB = новый StringBuilder();

try { 
      InputStream is = ctx.getAssets().open("VistaLog2.txt"); 
      Reader reader = new InputStreamReader(is); 
      char[] chars = new char[8192]; 
      for(int len; (len = reader.read(chars)) > 0;) { 
       // process chars. 
       sb.append((char)len); 
      } 
      reader.close(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      Log.e("chunkfile", "error here: "+e.getMessage()); 
     }  


    String[] queries = sb.toString().split(";"); 
    for(String query : queries){ 

     Log.d("vista_database", "query: "+query); 
      db.execSQL(query); 
     } 

Дает следующую ошибку.

08-07 16:33:06.187: E/Database(8115): Failure 1 (near  
    "                                                                                      
    ᆱ": syntax error) on 0x2a2ba8 when preparing 
    '                                                                                      
ᆱ'. 

    08-07 16:33:06.217: E/vista_database(8115): android.database.sqlite.SQLiteException: 
    near "                                                                                     ᆱ": 
    syntax error:                                                                                      ᆱ 

08-07 16:33:06.217: E/vista_database(8115): at 
android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 

08-07 16:33:06.217: E/vista_database(8115): at 
android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1836) 
08-07 16:33:06.217: E/vista_database(8115):  at com.Vista.Helper.DataHelper$OpenHelper.onCreate(DataHelper.java:1140) 
08-07 16:33:06.217: E/vista_database(8115):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106) 
08-07 16:33:06.217: E/vista_database(8115):  at com.Vista.Helper.DataHelper.<init>(DataHelper.java:105) 
08-07 16:33:06.217: E/vista_database(8115):  at com.bus_service.Vista_bus_service.onCreate(Vista_bus_service.java:64) 
08-07 16:33:06.217: E/vista_database(8115):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-07 16:33:06.217: E/vista_database(8115):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2628) 
08-07 16:33:06.217: E/vista_database(8115):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2680) 
08-07 16:33:06.217: E/vista_database(8115):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-07 16:33:06.217: E/vista_database(8115):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-07 16:33:06.217: E/vista_database(8115):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-07 16:33:06.217: E/vista_database(8115):  at android.os.Looper.loop(Looper.java:123) 
08-07 16:33:06.217: E/vista_database(8115):  at android.app.ActivityThread.main(ActivityThread.java:4628) 
08-07 16:33:06.217: E/vista_database(8115):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-07 16:33:06.217: E/vista_database(8115):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-07 16:33:06.217: E/vista_database(8115):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:879) 
08-07 16:33:06.217: E/vista_database(8115):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:637) 
08-07 16:33:06.217: E/vista_database(8115):  at dalvik.system.NativeStart.main(Native Method) 

Пожалуйста, дайте мне знать, как это сделать.

ответ

2

Его не возможно с SQlitedatabse методов андроида для этого нужно повторить цикл

может быть это будет полезно для вас.

batch operations

попытка прочитать текст из файла, как это будет давать правильные данные

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    StringBuffer sb = new StringBuffer(); 
    InputStream inputStream = null; 

    int i; 
    try { 
     inputStream = getApplicationContext().getAssets() 
       .open("readme.txt"); 
     i = inputStream.read(); 
     while (i != -1) { 
      byteArrayOutputStream.write(i); 
      i = inputStream.read(); 
     } 
     inputStream.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    System.out.println(byteArrayOutputStream.toString()); 
+0

Я пытался использовать последний из приведенных ответов, но то дает мне следующее сообщение об ошибке. 08-07 16: 08: 30.557: E/Database (1879): Ошибка 1 (около «๶»: синтаксическая ошибка) на 0x2a1118 при подготовке ' ๶. 08-07 16: 08: 30.587: E/vista_database (1879): android.database.sqlite.SQLiteException: рядом с «๶»: синтаксическая ошибка: ๶ –

+0

, что означает, что оператор sql то, что вам дано, является синтаксически неправильным ..check это ... –

+0

INSERT в значения StopMaster (stopId, stopName, routeId, sequenceId, filePath) (2509, 'CSUCI [11:25 AM]', 442,3, ''); INSERT в значения StopMaster (stopId, stopName, routeId, sequenceId, filePath) (2510, 'CSUCI [11:30 AM]', 443,1, ''); INSERT в значения StopMaster (stopId, stopName, routeId, sequenceId, filePath) (2511, '' C "St [11:55 AM] ', 443,2,' '); INSERT в значения StopMaster (stopId, stopName, routeId, sequenceId, filePath) (2512, '' C "St [3:00 PM] ', 444,1,' '); –

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