-1

I was just learning about sqlite databases and tried a small application to just add entries into a sqlite data base ....... don't know why it doesn't work ..... I'm really frustrated and almost to lose my interest on this android stuff ....... any help is appreciated ...... Thank you in advance ..........

this is the code :
opener class

package com.example.sqlite;

import android.content.ContentValues;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

public class opener {

   Context cc;
SQLiteDatabase db;

public opener(Context c)
{
    cc=c;
}


class SQLHelper extends SQLiteOpenHelper{


    public SQLHelper(Context context) {

        super(context, "app" , null, 1);

        // TODO Auto-generated constructor stub
    }


    public void onCreate(SQLiteDatabase db) {

        db.execSQL("CREATE TABLE default(name TEXT, abc TEXT, ac TEXT)");


    }


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

        db.execSQL("DROP TABLE IF EXISTS default");

        onCreate(db);

    }

}

public void open()

{

SQLHelper sq= new SQLHelper(cc);

db=sq.getWritableDatabase();

}

public void close()

{

db.close();

}

public long insert(String a,String b,String c)

{

ContentValues cv = new ContentValues();

cv.put("name", a);

cv.put("abc", b);

cv.put("ac", c);

return db.insert("default", null,cv);

}



}

This is the main class :
MainActivity.java

package com.example.sqlite;

import android.os.Bundle;

import android.app.Activity;

import android.app.Dialog;

import android.view.View;

import android.widget.EditText;

public class MainActivity extends Activity {

    EditText ed1;
EditText ed2;
EditText ed3;
EditText ed4;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ed1 = (EditText) findViewById(R.id.editText1);
    ed2 = (EditText) findViewById(R.id.editText2);
    ed3 = (EditText) findViewById(R.id.editText3);
    ed4 = (EditText) findViewById(R.id.editText4);
}

public void add(View v) {
    String ac = ed1.getText().toString();
    String b = ed2.getText().toString();
    String c = ed3.getText().toString();
    opener a = new opener(this);
    a.open();
    long d = a.insert(ac, b, c);
    a.close();
    if (d != -1) {
        Dialog dia = new Dialog(this);
        dia.setTitle("SUCCESS");
        dia.setCanceledOnTouchOutside(true);
        dia.show();
    }

    else {
        Dialog dia = new Dialog(this);
        dia.setTitle("NoSuccess");
        dia.setCanceledOnTouchOutside(true);
        dia.show();
    }
}}

And by the way sorry if it looks messy ..... The console says something like this whenever i try to insert something

07-04 12:45:57.951: I/Database(277): sqlite returned: error code = 1, msg = near "default": syntax error

07-04 12:45:57.951: E/Database(277): Failure 1 (near "default": syntax error) on 0x32a270 when preparing 'CREATE TABLE default(name TEXT, abc TEXT, ac TEXT)'.

07-04 12:45:57.961: D/AndroidRuntime(277): Shutting down VM

07-04 12:45:57.961: W/dalvikvm(277): threadid=1: thread exiting with uncaught exception (group=0x4001d800)

07-04 12:45:58.011: E/AndroidRuntime(277): FATAL EXCEPTION: main

07-04 12:45:58.011: E/AndroidRuntime(277): java.lang.IllegalStateException: Could not execute method of the activity

07-04 12:45:58.011: E/AndroidRuntime(277): at android.view.View$1.onClick(View.java:2072)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.view.View.performClick(View.java:2408)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.view.View$PerformClick.run(View.java:8816)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.os.Handler.handleCallback(Handler.java:587)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.os.Handler.dispatchMessage(Handler.java:92)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.os.Looper.loop(Looper.java:123)

07-04 12:45:58.011: E/AndroidRuntime(277): at a android.app.ActivityThread.main(ActivityThread.java:4627)

07-04 12:45:58.011: E/AndroidRuntime(277): at java.lang.reflect.Method.invokeNative(Native Method)

07-04 12:45:58.011: E/AndroidRuntime(277): at java.lang.reflect.Method.invoke(Method.java:521)

07-04 12:45:58.011: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

07-04 12:45:58.011: E/AndroidRuntime(277): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

07-04 12:45:58.011: E/AndroidRuntime(277): at dalvik.system.NativeStart.main(Native Method)

07-04 12:45:58.011: E/AndroidRuntime(277): Caused by: java.lang.reflect.InvocationTargetException

07-04 12:45:58.011: E/AndroidRuntime(277): at com.example.sqlite.MainActivity.add(MainActivity.java:31)

07-04 12:45:58.011: E/AndroidRuntime(277): at java.lang.reflect.Method.invokeNative(Native Method)

07-04 12:45:58.011: E/AndroidRuntime(277): at java.lang.reflect.Method.invoke(Method.java:521)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.view.View$1.onClick(View.java:2067)

07-04 12:45:58.011: E/AndroidRuntime(277): ... 11 more

07-04 12:45:58.011: E/AndroidRuntime(277): Caused by: android.database.sqlite.SQLiteException: near "default": syntax error: CREATE TABLE default(name TEXT, abc TEXT, ac TEXT)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727)

07-04 12:45:58.011: E/AndroidRuntime(277): at com.example.sqlite.opener$SQLHelper.onCreate(opener.java:29)

07-04 12:45:58.011: E/AndroidRuntime(277): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:106)

07-04 12:45:58.011: E/AndroidRuntime(277): at com.example.sqlite.opener.open(opener.java:45)

Thanks in advance

OcuS
  • 5,320
  • 3
  • 36
  • 45
sarath
  • 45
  • 8

1 Answers1

2

DEFAULT is an SQL keyword that must be quoted every time it is used in SQL statements:

db.execSQL("CREATE TABLE \"default\"(name TEXT, abc TEXT, ac TEXT)");
...
db.execSQL("DROP TABLE IF EXISTS \"default\"");
...
db.insert("\"default\"", null, cv);

You might be better of using another name.

CL.
  • 173,858
  • 17
  • 217
  • 259