2012-03-24 123 views
0

我正在使用以下方法打开我的SQLite数据库。打开数据库SQLite时出错

private void open() { 
    database = dbHelper.getReadableDatabase(); 
} 

他是dbHelper的相关部分。 sql.xml的

public void onCreate(SQLiteDatabase la_db) { 
    String s; 
    try { 
     InputStream in = context.getResources().openRawResource(R.raw.sql); 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance() 
       .newDocumentBuilder(); 
     Document doc = builder.parse(in, null); 
     NodeList statements = doc.getElementsByTagName("statement"); 
     for (int i = 0; i < statements.getLength(); i++) { 
      s = statements.item(i).getChildNodes().item(0).getNodeValue(); 
      la_db.execSQL(s); 
     } 
    } catch (Throwable t) { 
     Toast.makeText(context, t.toString(), 50000).show(); 
    } 
} 

部分

.... 
<statement> 
CREATE TABLE IF NOT EXISTS la_table (
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    suggest_text_1 VARCHAR(100), 
    test_value_1 VARCHAR(100), 
    test_value_2 VARCHAR(100), 
    test_type_1 VARCHAR(50), 
    suggest_intent_data VARCHAR(5)) 
</statement> 
<statement>INSERT INTO la_table VALUES(1,"Sodium (Na)","310 - 330 mg/dl",null,"Serum","1")</statement> 
<statement>INSERT INTO la_table VALUES(2,"Potassium (K)","14 - 20 mg/dl","3.5 - 5 mmol/L or mEq/L","Serum","2")</statement> 
..... 

而且我得到这个错误:

01-01 00:59:38.725: E/AndroidRuntime(2060): Caused by: java.lang.NullPointerException 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at com.assistant.lab.royale.DataSource.open(DataSource.java:42) 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at com.assistant.lab.royale.DataSource.listViewCursor(DataSource.java:25) 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at com.assistant.lab.royale.LabAssistant.onCreate(LabAssistant.java:24) 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at android.app.Activity.performCreate(Activity.java:4465) 
+0

发布初始化'dbHelper'变量的代码。 – 2012-03-24 16:48:31

+0

@BorisStrandjev我初始化使用'私人DatabaseHelper dbHelper;'。 – 2012-03-24 16:53:43

+0

你没有向我们展示堆栈框架中提到的代码 – 2012-03-24 16:55:00

回答

1

您提供的代码肯定会失败。您需要在dbHelper的构造函数中提供上下文。我建议你改变你的类这样的:

添加一个构造函数:

private DatabaseHelper dbHelper; 
public DataSource(Context context) { 
    this.dbHelper = new DatabaseHelper(context); 
} 

无法避免传入的背景下,但是这通常不是一个大问题,从每一个Activity你可以通过在this作为context。在这个改变之后,你应该可以毫无问题地使用你的dbHelper

+0

这很有用。 – 2012-03-24 17:19:30

1

dbHelper是空在open(),你需要,如果你的助手来创建一个实例然后才能使用它。

+0

我试着添加'private DatabaseHelper dbHelper = new DatabaseHelper(null);'。它不起作用 – 2012-03-24 17:09:06

+0

它仍然是一样的错误?现在应该是别的东西 – zapl 2012-03-24 17:20:51