Android SQLite 插入方法错误?

Posted

技术标签:

【中文标题】Android SQLite 插入方法错误?【英文标题】:Android SQLite Insert method Error? 【发布时间】:2011-10-05 05:56:44 【问题描述】:

活动:

package hi.com;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class TestsqliteActivity extends Activity 
       /** Called when the activity is first created. */

    EditText inputContent1, inputContent2,inputContent3;
    Button buttonAdd, buttonDeleteAll;
    ListView listContent;

    Cursor cursor;
    SimpleCursorAdapter cursorAdapter;

    private handle mysqliteAdapter;
    private SQLiteDatabase db;
    private static final String fields[] = handle.KEY_ID,handle.COMPANY_NAME;
    private ContentValues conValues;


    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.asdasd);

        inputContent1 = (EditText)findViewById(R.id.content1);
        inputContent2 = (EditText)findViewById(R.id.content2);
        inputContent3 = (EditText)findViewById(R.id.content3);

        buttonAdd = (Button)findViewById(R.id.add);
        listContent = (ListView)findViewById(R.id.contentlist);

        mySQLiteAdapter = new handle(this);
        db = (new handle(this)).getWritableDatabase();
        Cursor data = db.query(handle.COMPANY_TABLE, fields, null, null, null, null, null);

        String[] from = new String[]handle.COMPANY_NAME;
        int[] to = new int[]R.id.text1;
        cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, data, from, to);
        listContent.setAdapter(cursorAdapter);

        buttonAdd.setOnClickListener(buttonAddOnClickListener);
    

    Button.OnClickListener buttonAddOnClickListener
    = new Button.OnClickListener()
        @Override
        public void onClick(View arg0) 

        saveRecords();
        
    ;


private void updateList() 
    // TODO Auto-generated method stub
      cursor.requery();



protected void saveRecords() 
    // TODO Auto-generated method stub

                conValues.put(handle.COMPANY_NAME, inputContent1.getText().toString());


                try 

                    db.insert(handle.COMPANY_TABLE, null, conValues);

                    Log.d("DDMS'ye", "kayit basarili degerini yaz.");

                 catch (SQLiteException e) 

                    Log.d("eHata", e.getLocalizedMessage());

                

            


错误

错误/AndroidRuntime(19930): java.lang.NullPointerException 10-05 12:01:31.302: 错误/AndroidRuntime(19930):在 hi.com.TestsqliteActivity.saveRecords(TestsqliteActivity.java:75) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 hi.com.TestsqliteActivity$1.onClick(TestsqliteActivity.java:61) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 android.view.View.performClick(View.java:2408) 10-05 12:01:31.302: 错误/AndroidRuntime(19930):在 android.view.View$PerformClick.run(View.java:8816) 10-05 12:01:31.302: 错误/AndroidRuntime(19930):在 android.os.Handler.handleCallback(Handler.java:587) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 android.os.Handler.dispatchMessage(Handler.java:92) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 android.os.Looper.loop(Looper.java:123) 10-05 12:01:31.302: 错误/AndroidRuntime(19930):在 android.app.ActivityThread.main(ActivityThread.java:4627) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 java.lang.reflect.Method.invokeNative(Native Method) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 java.lang.reflect.Method.invoke(Method.java:521) 10-05 12:01:31.302: 错误/AndroidRuntime(19930):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 10-05 12:01:31.302:错误/AndroidRuntime(19930):在 dalvik.system.NativeStart.main(Native Method)

请指教我做错了什么......谢谢

【问题讨论】:

你在哪里初始化你的sqLiteDatabase变量?好像你忘了做。 【参考方案1】:

请务必初始化您的 SQLiteDatabase 对象并打开您的数据库。这是 DatabaseHelper 类的想法。你也可以为这个类找到合适的代码 sn-ps。

public DatabaseHelper(Context aContext)


    sqlDB = aContext.openOrCreateDatabase(DatabaseName, SQLiteDatabase.CREATE_IF_NECESSARY, null);

    OpenHelper openHelper = new OpenHelper(aContext, sqlDB);

    sqlDB = openHelper.getWritableDatabase();

这里的 sqlDB 是你的 SQLiteDatabase 对象。 OpenHelper 是一个帮助类来打开你的数据库。

OpenHelper(Context context, SQLiteDatabase sql_db)
    
        super(context, DatabaseName, null,DatabaseVersion);         
        onCreate(sql_db);
    

您可以实现自己的构造函数和类。在这方面获得更多帮助。使用 DatabaseHelper 类可以轻松实现和处理。

【讨论】:

以上是关于Android SQLite 插入方法错误?的主要内容,如果未能解决你的问题,请参考以下文章

Android SQLite:插入/替换方法中的 nullColumnHack 参数

Android Studio - SQLite 插入冻结

Android Sqlite插入空对象引用[重复]

SQLite 中的语法错误(插入语句)

android 插入资料到数据库时的错误android.database.sqlite.SQLiteException: table imagetable has no c

如何从 android studio 中的 SQLite 插入中删除不需要的字符