1. Download our Official Android App: Forums for Android!

Trying to make use of databases

Discussion in 'Android Development' started by Derek Hill, Aug 27, 2017.

  1. Derek Hill

    Derek Hill Lurker
    Thread Starter
    Rank:
    None
    Points:
    16
    Posts:
    6
    Joined:
    Aug 17, 2017

    Aug 17, 2017
    6
    1
    16
    Male
    I am trying to create and insert a row for a login registration.

    This is the code i use for my main page
    Code (Text):
    1.  
    2. public class MainActivity extends AppCompatActivity {
    3.     //database
    4.     DBHelper helper = new DBHelper(this);
    5.     @Override
    6.     protected void onCreate(Bundle savedInstanceState) {
    7.         super.onCreate(savedInstanceState);
    8.         setContentView(R.layout.activity_main);
    9.     }
    10.     //clicking button to send user/pass
    11.     public void onSubmit(View view){
    12.         //getting text values and storing it as variables.
    13.         EditText usertxt=(EditText)findViewById(R.id.ETuser);
    14.         EditText passtxt=(EditText)findViewById(R.id.ETpass);
    15.         EditText cpasstxt=(EditText)findViewById(R.id.ETcpass);
    16.         TextView out=(TextView)findViewById(R.id.TVoutput);
    17.  
    18.         //storing them as string
    19.         String struser = usertxt.getText().toString();
    20.         String strpass = passtxt.getText().toString();
    21.         String strcpass = cpasstxt.getText().toString();
    22.  
    23.         //Checking to see if username password or confirm password is blank.
    24.         if(TextUtils.isEmpty(struser) || TextUtils.isEmpty(strpass) || TextUtils.isEmpty(strcpass)){
    25.             Toast pass = makeText(MainActivity.this,"Please fill all fields.", LENGTH_SHORT);
    26.             pass.show();
    27.         }
    28.         //checks to see if the pass and confirm pass is the same. if not then display message saying it doesnt match.
    29.         if(!(strpass).equals(strcpass)){
    30.             Toast pass = makeText(MainActivity.this,"Does not match", LENGTH_SHORT);
    31.             pass.show();
    32.         }else{
    33.             helper.insertRow();
    34.         }
    35.         //setting text value of this text id.
    36.         out.setText(usertxt.getText().toString()+"/"+passtxt.getText().toString()+"/"+cpasstxt.getText().toString());
    37.     }
    38. }
    39.  
    and my db class...
    Code (Text):
    1.  
    2. public class DBHelper extends SQLiteOpenHelper {
    3.     SQLiteDatabase db;
    4.  
    5.     public DBHelper(Context context){
    6.         super(context, "Testing.db", null, 1);
    7.     }
    8.  
    9.     @Override
    10.     public void onCreate(SQLiteDatabase db) {
    11.         db.execSQL("create table account (id integer primary key not null auto_increment, user text, pass text, rank text)");
    12.         this.db = db;
    13.     }
    14.     public void insertRow(){
    15.         db = this.getWritableDatabase();
    16.         ContentValues values = new ContentValues();
    17.         Cursor cursor = db.rawQuery("SELECT * FROM account", null);
    18.         int count = cursor.getCount();
    19.         values.put("id", count+1);
    20.         values.put("user", "derek");
    21.         values.put("pass", "testpass");
    22.         db.insert("account", null, values);
    23.         db.close();
    24.     }
    25.  
    26.     public String searchPass(String user){
    27.         db = this.getReadableDatabase();
    28.         Cursor cursor = db.rawQuery("SELECT user, pass FROM account",null);
    29.         String a, b;
    30.         b = "Not Found";
    31.         if(cursor.moveToFirst()){
    32.             do{
    33.                 a = cursor.getString(0);
    34.                 if(a.equals(user)){
    35.                     b = cursor.getString(1);
    36.                     break;
    37.                 }
    38.             }
    39.             while(cursor.moveToNext());
    40.         }
    41.         return b;
    42.     }
    43.  
    44.     @Override
    45.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    46.         db.execSQL("DROP TABLE IF EXISTS account");
    47.         this.onCreate(db);
    48.     }
    49. }
    50.  
    what i am trying to achieve...

    what i would like to do is to register a user and password for security. I would also like those values passed to the insertrow() function. But when i try to click submit the app crashes.

     

    Advertisement

  2. LV426

    LV426 I say we take off and nuke this place from orbit
    Moderator
    Rank:
     #11
    Points:
    1,988
    Posts:
    7,879
    Joined:
    Oct 16, 2015

    Oct 16, 2015
    7,879
    11,515
    1,988
    Male
    Software developer
    South West of England
    Please post the stack trace from the Logcat view.
     
  3. Derek Hill

    Derek Hill Lurker
    Thread Starter
    Rank:
    None
    Points:
    16
    Posts:
    6
    Joined:
    Aug 17, 2017

    Aug 17, 2017
    6
    1
    16
    Male
    Code (Text):
    1.  
    2. 3/com.example.syn.testing E/AndroidRuntime: FATAL EXCEPTION: main
    3.                                                                        Process: com.example.syn.testing, PID: 2663
    4.                                                                        java.lang.IllegalStateException: Could not execute method for android:onClick
    5.                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
    6.                                                                            at android.view.View.performClick(View.java:5637)
    7.                                                                            at android.view.View$PerformClick.run(View.java:22429)
    8.                                                                            at android.os.Handler.handleCallback(Handler.java:751)
    9.                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
    10.                                                                            at android.os.Looper.loop(Looper.java:154)
    11.                                                                            at android.app.ActivityThread.main(ActivityThread.java:6119)
    12.                                                                            at java.lang.reflect.Method.invoke(Native Method)
    13.                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    14.                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    15.                                                                         Caused by: java.lang.reflect.InvocationTargetException
    16.                                                                            at java.lang.reflect.Method.invoke(Native Method)
    17.                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    18.                                                                            at android.view.View.performClick(View.java:5637)
    19.                                                                            at android.view.View$PerformClick.run(View.java:22429)
    20.                                                                            at android.os.Handler.handleCallback(Handler.java:751)
    21.                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
    22.                                                                            at android.os.Looper.loop(Looper.java:154)
    23.                                                                            at android.app.ActivityThread.main(ActivityThread.java:6119)
    24.                                                                            at java.lang.reflect.Method.invoke(Native Method)
    25.                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    26.                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    27.                                                                         Caused by: android.database.sqlite.SQLiteException: near "auto_increment": syntax error (code 1): , while compiling: create table account (id integer primary key not null auto_increment, user text, pass text, rank text)
    28.                                                                            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    29.                                                                            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    30.                                                                            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    31.                                                                            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    32.                                                                            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    33.                                                                            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
    34.                                                                            at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677)
    35.                                                                            at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
    36.                                                                            at com.example.syn.testing.DBHelper.onCreate(DBHelper.java:22)
    37.                                                                            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
    38.                                                                            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
    39.                                                                            at com.example.syn.testing.DBHelper.insertRow(DBHelper.java:26)
    40.                                                                            at com.example.syn.testing.MainActivity.onSubmit(MainActivity.java:45)
    41.                                                                            at java.lang.reflect.Method.invoke(Native Method)
    42.                                                                            at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
    43.                                                                            at android.view.View.performClick(View.java:5637)
    44.                                                                            at android.view.View$PerformClick.run(View.java:22429)
    45.                                                                            at android.os.Handler.handleCallback(Handler.java:751)
    46.                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
    47.                                                                            at android.os.Looper.loop(Looper.java:154)
    48.                                                                            at android.app.ActivityThread.main(ActivityThread.java:6119)
    49.                                                                            at java.lang.reflect.Method.invoke(Native Method)
    50.                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    51.                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    52.  
    I am still getting used to this so im still learning.
     
  4. LV426

    LV426 I say we take off and nuke this place from orbit
    Moderator
    Rank:
     #11
    Points:
    1,988
    Posts:
    7,879
    Joined:
    Oct 16, 2015

    Oct 16, 2015
    7,879
    11,515
    1,988
    Male
    Software developer
    South West of England
    Top tip: Read the stack trace. It usually tells you exactly what the problem is -

    Code (Text):
    1.  
    2. Caused by: android.database.sqlite.SQLiteException: near "auto_increment": syntax error (code 1): , while compiling: create table account (id integer primary key not null auto_increment, user text, pass text, rank text)
    3. ..
    4. at com.example.syn.testing.DBHelper.onCreate(DBHelper.java:22)
    5.  
    So that line would be

    Code (Text):
    1.  
    2. db.execSQL("create table account (id integer primary key not null auto_increment, user text, pass text, rank text)");
    3.  
    So you can see it doesn't like "auto_increment". Your next step is to consult the SQLite online reference manual

    https://sqlite.org/lang_createtable.html

    Now tell me what you should be using instead of auto_increment.
     
  5. Derek Hill

    Derek Hill Lurker
    Thread Starter
    Rank:
    None
    Points:
    16
    Posts:
    6
    Joined:
    Aug 17, 2017

    Aug 17, 2017
    6
    1
    16
    Male
    i should use AUTOINCREMENT with no underscore. after primary key. the error disappeared.

    Also...i have a question. i get pixel errors on the emulator that looks similar to this.

    Edit: Hmm....so i punched it in and even though no errors was seen i cant view the database with android device monitor. Still nothing there. I am only trying to send testing data though it but its not even initializing.
     

    Attached Files:

    #5 Derek Hill, Aug 27, 2017
    Last edited: Aug 27, 2017
  6. LV426

    LV426 I say we take off and nuke this place from orbit
    Moderator
    Rank:
     #11
    Points:
    1,988
    Posts:
    7,879
    Joined:
    Oct 16, 2015

    Oct 16, 2015
    7,879
    11,515
    1,988
    Male
    Software developer
    South West of England
    What's the actual problem with the app?
     
  7. Derek Hill

    Derek Hill Lurker
    Thread Starter
    Rank:
    None
    Points:
    16
    Posts:
    6
    Joined:
    Aug 17, 2017

    Aug 17, 2017
    6
    1
    16
    Male
    the actual problem is that when i put in the account info as a test and view in android monitor i dont see the database. its like its not getting created.

    and the half split screen is really annoying too and i dont know what is causing it.
     

Share This Page

Loading...