1

I'm trying to insert and retrieve data from database in eclipse using sqlite, but it shows a RuntimeError. I create a layout with three edit texts and one button to create simple information from but nothing is created. I create java database with the following code:

package com.example.databasetest;



import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DBHelper extends SQLiteOpenHelper{

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "teacher";
    private static final String TABLE_NAME = "teacher_table";

    private static final String NAME = "teacher_name";
    private static final String FATHER_NAME = "father_name";
    private static final String MOTHER_NAME = "mother_name";

    SQLiteDatabase data=this.getWritableDatabase();

    Context ctx;



    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        ctx=context;
        Log.d("DATABASE OPERATION", "DATABASE CREATED");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        data=db;
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + NAME + " TEXT,"
                + FATHER_NAME + " TEXT,"
                + MOTHER_NAME + " INTEGER,"
                + ");");
        Log.d("DATABASE OPERATION", "TABLE CREATED");


    }
     public void open() throws SQLException
     {
         DBHelper db1 = new DBHelper(ctx);
            data = db1.getWritableDatabase();
     }

     public void close()
     {
         data.close();
     }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXCEPTION EXISTS");
        onCreate(db);       
    }
    public void onInsert(DBHelper db,String name,String f_name, String m_name)
    {
        SQLiteDatabase sql= db.getWritableDatabase();
        ContentValues cv=new ContentValues();
        cv.put("teacher_name",name);
        cv.put("father_name", f_name);
        cv.put("mother_name", m_name);
        sql.insert(TABLE_NAME, null, cv);
        Log.d("DATABASE OPERATION", "ONE ROW INSERTED.....");
    }

}

AND java file as...

package com.example.databasetest;


import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {

    EditText NAME,FATHER,MOTHER,ID;
    String name,father,mother,id;
    int i=1;
    Button save;
    Context ctxx;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NAME=(EditText)findViewById(R.id.name);
        FATHER=(EditText)findViewById(R.id.father_name);
        MOTHER=(EditText)findViewById(R.id.mother_name);
        ID=(EditText)findViewById(R.id.emp_id);


        save=(Button)findViewById(R.id.submit);
        save.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                id=ID.getText().toString();
                name=NAME.getText().toString();
                father=FATHER.getText().toString();
                mother=MOTHER.getText().toString();

                if(id.equals(i))
                {
                    Toast.makeText(getBaseContext(), "not allow insertion", Toast.LENGTH_LONG).show();
                }
                else
                {
                DBHelper DB=new DBHelper(ctxx);
                DB.open();
                DB.onInsert(DB, name, father, mother);
                Toast.makeText(getBaseContext(), "insertion sucessful", Toast.LENGTH_LONG).show();
                finish();
                }
            }
        });


    }
}

and its show run time error when i click on button as in log cat..

05-08 02:54:05.932: D/AndroidRuntime(922): Shutting down VM
05-08 02:54:05.999: W/dalvikvm(922): threadid=1: thread exiting with uncaught exception (group=0x41465700)
05-08 02:54:06.189: E/AndroidRuntime(922): FATAL EXCEPTION: main
05-08 02:54:06.189: E/AndroidRuntime(922): java.lang.NullPointerException
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
05-08 02:54:06.189: E/AndroidRuntime(922):  at com.example.databasetest.DBHelper.<init>(DBHelper.java:22)
05-08 02:54:06.189: E/AndroidRuntime(922):  at com.example.databasetest.MainActivity$1.onClick(MainActivity.java:49)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.view.View.performClick(View.java:4240)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.view.View$PerformClick.run(View.java:17721)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.os.Handler.handleCallback(Handler.java:730)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.os.Looper.loop(Looper.java:137)
05-08 02:54:06.189: E/AndroidRuntime(922):  at android.app.ActivityThread.main(ActivityThread.java:5103)
05-08 02:54:06.189: E/AndroidRuntime(922):  at java.lang.reflect.Method.invokeNative(Native Method)
05-08 02:54:06.189: E/AndroidRuntime(922):  at java.lang.reflect.Method.invoke(Method.java:525)
05-08 02:54:06.189: E/AndroidRuntime(922):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
05-08 02:54:06.189: E/AndroidRuntime(922):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-08 02:54:06.189: E/AndroidRuntime(922):  at dalvik.system.NativeStart.main(Native Method)
05-08 02:54:09.589: I/Process(922): Sending signal. PID: 922 SIG: 9
2
  • your ctxx has not been initialize. try DBHelper DB=new DBHelper(getApplicationContext()); Commented May 8, 2015 at 7:31
  • if it is useful accept or upvote. Commented May 8, 2015 at 7:37

4 Answers 4

2

ctxx is never initialzed, and this probably the cause of the crash. Generally speaking, when you deal with Activity and Fragment subclass, you almost never need to keep a reference to the Context. Activity is a subclass of Context, and usually this is enough. In a Fragment you can retrieve the context of the Activity hosting the Fragment with getActivity()

Chante

 DBHelper DB=new DBHelper(ctxx);

with

DBHelper DB=new DBHelper(MainActivity.this);

As @DerGolem pointed out, you are using the type INTEGER for the column MOTHER_NAME. Probably you want to use TEXT, instead, and you will also need a the primary key "_id"

  db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                + NAME + " TEXT,"
                + FATHER_NAME + " TEXT,"
                + MOTHER_NAME + " TEXT"
                + ");");
Sign up to request clarification or add additional context in comments.

3 Comments

@Blackbelt you should remove the ',' ... its a table creation
how i retrieve data froom one table to another table
please feel free to ask a new question,
0

In your activity initialize the ctxx in onCreate:

ctxx=this;

or

DBHelper DB=new DBHelper(MainActivity.this);

whenever you will initialize database object will null you will get sqlite locked exception.

Comments

0

Also fixe this

public void onCreate(SQLiteDatabase db) {
        data=db;
        db.execSQL("CREATE TABLE " + TABLE_NAME + " ("
                + NAME + " TEXT,"
                + FATHER_NAME + " TEXT,"
                + MOTHER_NAME + " TEXT"
                + ");");
        Log.d("DATABASE OPERATION", "TABLE CREATED");


    }

for "INTEGER," remove ,.

and intialise it like this DBHelper.

DBHelper DB=new DBHelper(MainActivity.this);

Comments

0

You need init ctxx in onCreate() method:

ctxx = this;

If you want to know more about sqlite on android -> ok. But if you want to less code you can try some SqliteLibrary for android. (example ActiveAndroid, GreenDAO.....).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.