0

So basically I am stuck as to why I cannot add any data. I have basically followed along with a youtube tutorial from scratch but for some reason, one particular error is quite persistent. (It does not allow me to add data, as such I cannot make any use of it.)

Below is the code I have been running and any help would be appreciated :) of course, point me in the right direction if this has been asked previously...I did try searching first. I can see it says theres no column named name in user_table, but what i dont understand is there was no such step in the youtube video and it worked fine?

Forgot to add error

    E/SQLiteLog: (1) table Users_Table has no column named NAME
    E/SQLiteDatabase: Error inserting NAME=Kono
    android.database.sqlite.SQLiteException: table Users_Table has no column named NAME (code 1 SQLITE_ERROR): , while compiling: INSERT INTO Users_Table(NAME) VALUES (?)
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:986)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:593)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1597)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1468)
        at com.example.sqldb.dbHelper.insertData(dbHelper.java:46)
        at com.example.sqldb.MainActivity$2.onClick(MainActivity.java:55)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

XML Layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/usersList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/add_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="Name"/>

        <Button
            android:id="@+id/add_data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add"/>

   </LinearLayout>
</LinearLayout>

Main Java Code

package com.example.sqldb;

import androidx.appcompat.app.AppCompatActivity;

import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    dbHelper db;

    Button add_data;
    EditText add_name;
    ListView usersList;

    ArrayList<String> listItem;
    ArrayAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        db = new dbHelper(this);

        listItem = new ArrayList<>();

        add_data = findViewById(R.id.add_data);
        add_name = findViewById(R.id.add_name);
        usersList = findViewById(R.id.usersList);

        viewData();

        usersList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String text = usersList.getItemAtPosition(1).toString();
                Toast.makeText(MainActivity.this, "" + text, Toast.LENGTH_SHORT).show();
            }
        });

        add_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = add_name.getText().toString();
                if(!name.equals("") && db.insertData(name)) {
                    Toast.makeText(MainActivity.this, "Data Added", Toast.LENGTH_SHORT).show();
                    add_name.setText("");
                }else {
                    Toast.makeText(MainActivity.this, "Error: Data has not been added!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void viewData() {
        Cursor cursor = db.viewData();

        if(cursor.getCount() == 0){
            Toast.makeText(this, "No data to show", Toast.LENGTH_SHORT).show();
        }else{
            while (cursor.moveToNext()){
                listItem.add(cursor.getString(1));
            }

            adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listItem);
            usersList.setAdapter(adapter);
        }

    }
}

Database Helper Class

package com.example.sqldb;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class dbHelper extends SQLiteOpenHelper {

    private static final String DB_NAME = "Users.db";
    private static final String DB_TABLE = "Users_Table";

    //Columns
    private static final String ID = "ID";
    private static final String NAME = "NAME";

    private static final String CREATE_TABLE = "CREATE TABLE " + DB_TABLE + "(" +
            ID + "INTEGER PRIMARY KEY AUTOINCREMENT," +
            NAME + " TEXT " + ")";
    public dbHelper(Context context){
        super(context, DB_NAME, null, 1);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(CREATE_TABLE);
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + DB_TABLE);

        onCreate(db);
    }

    //Method to insert data
    public boolean insertData(String name){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(NAME, name);

        long result = db.insert(DB_TABLE, null, contentValues);

        return result != -1;// if result = -1 data will not be inserted

    }

    //Method to create view for data
    public Cursor viewData(){
        SQLiteDatabase db = this.getReadableDatabase();
        String query = "Select * from " + DB_TABLE;
        Cursor cursor = db.rawQuery(query, null);

        return cursor;


    }
}
2
  • Please add the error you see. Commented Feb 13, 2020 at 4:37
  • Please check my answer pls. Commented Feb 13, 2020 at 5:33

2 Answers 2

1

Can you please replace below code snippet any try again to insert:

 public static final String CREATE_TABLE =
                "CREATE TABLE IF NOT EXISTS " + DB_TABLE + "("
                        + ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                        + NAME + " TEXT"                  
                        + ")";

Hope this may help you.

Sign up to request clarification or add additional context in comments.

2 Comments

Hi Insane Cat, Thanks a bunch buddy. Both yours and Durais fixes worked :) I green ticked his as it was the first one I tried. But thank you regardless
The problem is only Space at both side of + NAME + " TEXT " you wrote but right one is + NAME + " TEXT"
1

In Helper Class leave space frond of Integer

In Main Activity

if(!name.equals("")){ db.insertData(name); 
  Toast.makeText(MainActivity.this, "Data Added", Toast.LENGTH_SHORT).show();
  add_name.setText(""); 
}else { 
  Toast.makeText(MainActivity.this, "Error: Data has not been added!",   
  Toast.LENGTH_SHORT).show();
}

2 Comments

please add all comments to your answer since your answer is incomplete. Please do not post the answer in the comments.
and leave space ID + " [space ]INTEGER PRIMARY KEY AUTOINCREMENT," +

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.