Question: Android Java SQLite database: The database does not take 2 String inputs

Question

Android Java SQLite database: The database does not take 2 String inputs

Answers 2
Added at 2017-06-04 20:06
Tags
Question

I am learing to code and made a stopwatch that saves the laptimes in a String and gets the date as a String as well. I want to put those in a SQLite database (so i can later display the date in a listview and open it in another activity that shows all the laptimes.) I've followed some of the codes on the internet and try to put stuff together so I might look over some things in my code. I've commented on the parts I think i understand so you can follow my thinking a bit.

The problem: when i press save the following code is executed and returns the toastmessage: Somehting went wrong.

 save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String dateStamp = getCurrentTimeStamp();
                AddData(dataInput, dateStamp);
                //DatabaseHelper.deleteAll();
            }
        }); //save data though AddData method as input the listText

The method AddData is as follows:

public void AddData(String time, String date) {
        boolean insertData = DatabaseHelper.addData(time, date);

        if (insertData) {
            toastMessage(dataInput);
        } else {
            toastMessage("Something went wrong");
        }
    }

The boolean method in the DatabaseHelper class is this:

public boolean addData(String times, String date) { //addData that takes a string
        SQLiteDatabase db = this.getWritableDatabase(); //database called db and use getWritableDatabase method
        ContentValues contentValues = new ContentValues();  //make a new object of ContentValues
        contentValues.put(COL_2, times); //put COL_2 and the String in the ContentValues object
        contentValues.put(COL_3, date);

          long result = db.insert(TABLE_NAME, null, contentValues);   //insert contentValues object into the table
        //if date as inserted incorrectly it will return -1
        if (result == -1) {
            db.close();
            return false;
        } else {
            return true;
        }

    }

It works when i input just 1 variable in addData() but not with 2 that I later implemented. I think it should work. Below I also put the code that is used to make the SQLite Database.

public static final String TABLE_NAME = "stopwatch";   //make a table with name
    public static final String COL_1 = "ID";   //make an ID for every colomn
    public static final String COL_2 = "times";    //make a 2nd colomn for data
    public static final String COL_3= "date";

    public DatabaseHelper(Context context) {
        super(context, TABLE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {   //make the onCreate method that takes the database as input
        String createTable = "CREATE TABLE " + TABLE_NAME + " ( " + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                COL_2 +" TEXT" + COL_3 +" TEXT)";    //create the table with SQL statements to input the data correctly
        db.execSQL(createTable);    //input the SQL statements in the DB

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  //make upgrade method that takes the database and the versions
        db.execSQL("DROP IF TABLE EXISTS " + TABLE_NAME);   //execute SQL statements drop table and which one
        onCreate(db);   //run through create method
    }

I hope someone can help me to find the problem so I can learn more.

Answers to

Android Java SQLite database: The database does not take 2 String inputs

nr: #1 dodano: 2017-06-04 21:06

Your create table query is missing a comma after the COL_2 +" TEXT"

@Override
public void onCreate(SQLiteDatabase db) {   
    String createTable = "CREATE TABLE " + TABLE_NAME + " ( " + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COL_2 +" TEXT, " + COL_3 +" TEXT)";  // Added a comma after the COL_2
    db.execSQL(createTable);   

}
nr: #2 dodano: 2017-06-04 21:06

I can see one problem from a quick glance and that is a missing comma in your creation statement which would mean that your database was not created as you intended. Try the below amendment.

String createTable = "CREATE TABLE " + TABLE_NAME + " ( " + COL_1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            COL_2 +" TEXT," + COL_3 +" TEXT)"; 
Source Show
◀ Wstecz