2016-01-25 36 views
-1

我有一个数据库,其中我想执行SQL语句,即在文件中。
但是我得到一个InputStream行异常,我不知道为什么。
快乐,帮我解决这个问题。引起R.raw.file的InputStream异常

package com.example.hasana.databases; 

import android.content.Context; 
import android.content.res.AssetManager; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.provider.BaseColumns; 
import android.util.Log; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 

/** 
* Created by hasana on 1/14/2016. 
*/ 
public class DatabaseHelper extends SQLiteOpenHelper implements BaseColumns { 
    private static final String DATABASE_NAME = "mydatabase.db"; 
    private static final int DATABASE_VERSION = 1; 
    public static final String CAT_NAME_COLUMN = "gruppa"; 
    public static final String PHONE_COLUMN = "name"; 
    public static final String AGE_COLUMN = "age"; 
    private static final String DATABASE_TABLE = "cats"; 
     Context mycont; 
     String libraryPath; 
     String sql; 


    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      mycont=context; 
    } 

    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
     super(context, name, factory, version); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d("mytag", "readFile"); 
//  try { 
//   insertFromFile(mycont,R.raw.sqlstat); 
//  } catch (IOException e) { 
//   e.printStackTrace(); 
//  } 
     db.execSQL(sql); 
    } 
    /** 
    * This reads a file from the given Resource-Id and calls every line of it as a SQL-Statement 
    * 
    * @param context 
    * 
    * @param resourceId 
    * e.g. R.raw.food_db 
    * 
    * @return Number of SQL-Statements run 
    * @throws IOException 
    */ 
    public void insertFromFile(Context context, int resourceId) throws IOException { 

     // Open the resource 
     InputStream insertsStream = context.getResources().openRawResource(resourceId); 
     BufferedReader insertReader = new BufferedReader(new InputStreamReader(insertsStream)); 

     // Iterate through lines (assuming each insert has its own line and theres no other stuff) 
     while (insertReader.ready()) { 
      sql += insertReader.readLine(); 
     } 
     insertReader.close(); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     // Запишем в журнал 
     Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion); 

     // Удаляем старую таблицу и создаём новую 
     db.execSQL("DROP TABLE IF IT EXISTS " + DATABASE_TABLE); 
     // Создаём новую таблицу 
     onCreate(db); 
    } 

} 

InputStream insertsStream = context.getResources().openRawResource(resourceId);我得到一个异常

FATAL EXCEPTION: main   Process: com.example.hasana.databases, PID: 21716 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hasana.databases/com.example.hasana.databases.MainActivity}: java.lang.NullPointerException 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
                       at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:136) 
                       at android.app.ActivityThread.main(ActivityThread.java:5001) 
                       at java.lang.reflect.Method.invokeNative(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:515) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
                       at dalvik.system.NativeStart.main(Native Method) 
                      Caused by: java.lang.NullPointerException 
                       at android.database.DatabaseUtils.getSqlStatementType(DatabaseUtils.java:1375) 
                       at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1659) 
                       at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603) 
                       at com.example.hasana.databases.DatabaseHelper.onCreate(DatabaseHelper.java:53) 
                       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 
                       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
                       at com.example.hasana.databases.MainActivity.onCreate(MainActivity.java:23) 
                       at android.app.Activity.performCreate(Activity.java:5231) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)  
                       at android.app.ActivityThread.access$800(ActivityThread.java:135)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:136)  
                       at android.app.ActivityThread.main(ActivityThread.java:5001)  
                       at java.lang.reflect.Method.invokeNative(Native Method)  
                       at java.lang.reflect.Method.invoke(Method.java:515)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)  
                       at dalvik.system.NativeStart.main(Native Method)  
+0

如果我comented insertFromFile()不会有致命的异常,所以问题的代码部分。 P.S.我修复了那个sql sytax错误 –

回答

0

我解决了这一点。 问题是我有两个构造函数,我首先接收上下文,但调用第二个构造函数。我添加mycont =上下文;在第二个构造和它,没关系

DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     mycont=context; 
} 

    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
    super(context, name, factory, version); 
} 
+0

谢谢我,谢谢。 –

相关问题