• 1401/11/20

مشکل در ساخت ستون جدول name با SQLite :

استاد سلام،

من الان در جلسه 25، زمان insertContact با خطایی مواجه میشم که میگه اصلاً نمیتونه ستون name رو درست کنه در جدول

ممنون میشم منو راهنمایی بفرمایید چطور برطرفش کنم؟

خطا:

E/SQLiteLog: (1) table myContacts has no column named name
E/SQLiteDatabase: Error inserting number=81223344553 name=Amir8
    android.database.sqlite.SQLiteException: table myContacts has no column named name (code 1 SQLITE_ERROR[1]): , while compiling: INSERT INTO myContacts(number,name) VALUES (?,?)
 at com.example.database.DBHelper.insertContact(DBHelper.java:48)
 at com.example.database.MainActivity.onCreate(MainActivity.java:24)

 

کلاس Constants

package com.example.database;

public class Constants {
    public static final String DB_NAME = "contacts";
    public static final int VERSION = 1;
    public static final String TABLE_NAME = "myContacts";
    public static final String COLUMN_ID = "id";
    public static final String COLUMN_NAME = "name";
    public static final String COLUMN_NUMBER = "number";
}

 

کلاس Contact

package com.example.database;

public class Contact {
    private String name, number;

    //constructor

    public Contact(String name, String number) {
        this.name = name;
        this.number = number;
    }

    //Methods

    //getter & setter


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

}

 

کلاس DBHelper

package com.example.database;

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

import androidx.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;

public class DBHelper extends SQLiteOpenHelper {


    //constructor
    public DBHelper(@Nullable Context context) {
        super(context, Constants.DB_NAME, null, Constants.VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) { //initial settings of database
        String CREATE_TABLE01 = "CREATE TABLE " +
                Constants.TABLE_NAME + "(" + Constants.COLUMN_ID +
                " INTEGER PRIMARY KEY AUTOINCREMENT , " +
                Constants.COLUMN_NAME + " VARCHAR(30) , " + Constants.COLUMN_NUMBER + " VARCHAR(11) " + ")";

        db.execSQL(CREATE_TABLE01);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion,
                          int newVersion) {
        String DROP_TABLE = "DROP TABLE IF EXISTS " + Constants.TABLE_NAME;
        db.execSQL(DROP_TABLE);

        onCreate(db);
    }

    public void insertContact(Contact contact) { //for inserting data in database
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();

        contentValues.put(Constants.COLUMN_NAME, contact.getName());
        contentValues.put(Constants.COLUMN_NUMBER, contact.getNumber());

//Line 48---->>>>
 db.insert(Constants.TABLE_NAME, null, contentValues);
        db.close();
    }

    public List<Contact> getContacts() { //for getting/reading data from database
        SQLiteDatabase db = this.getReadableDatabase();
        List<Contact> contacts = new ArrayList<>();

        String GET_CONTACTS = "SELECT * FROM "  + Constants.TABLE_NAME;
        Cursor cursor = db.rawQuery(GET_CONTACTS, null);

        if (cursor.getCount() != 0) {
            cursor.moveToFirst(); // say to cursor to go to the first raw
            for (int i = 0; i < cursor.getCount(); i++) {
                contacts.add(new Contact(cursor.getString(1),
                        cursor.getString(2)));
                cursor.moveToNext(); //go to next raw
            }
        }

        return contacts;
    }
}

 

کلاس MainActivity

package com.example.database;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

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

        DBHelper dbHelper = new DBHelper(this);
        dbHelper.insertContact(new Contact("Amir1", "11223344556"));
        dbHelper.insertContact(new Contact("Amir2", "21223344557"));
        dbHelper.insertContact(new Contact("Amir3", "31223344558"));
        dbHelper.insertContact(new Contact("Amir4", "41223344559"));
        dbHelper.insertContact(new Contact("Amir5", "51223344558"));
        dbHelper.insertContact(new Contact("Amir6", "61223344555"));
        dbHelper.insertContact(new Contact("Amir7", "71223344554"));
        dbHelper.insertContact(new Contact("Amir8", "81223344553"));


        for (Contact contact : dbHelper.getContacts()) {
            Log.i(TAG, "onCreate: " + "->Name: " + contact.getName() + " | " + contact.getNumber());
        }

    }


}

 

حداقل به نظر خودم دقیقاً مثل فیلم کد زدم (احتمالاً یه جایی خطاست اما متوجه نشدم بعد 1-2 ساعت گشتن)

پیشاپیش از لطف و پاسخگویی شما متشکرم

ارادتنمد

  • 1401/11/21
  • ساعت 15:22

سلام دوست من.

table myContacts has no column named name

اگه به ارور توجه کنی میگه  نمیتونه ستون به اسم name که شما در کوئری نوشتی رو در دیتابیس و در table مورد نظر پیدا کنه.

به table مراجعه کن شاید نام ستون رو به جای name به اشتباه مثلا nmae یا namee نوشته باشی.


  • 1401/11/22
  • ساعت 22:04

سلام استاد،

ممنون از لطفتون، مشکلم همینه که نمیدونم table رو باید کجا بیابم؟ سپاسگزار میشم اگر راهنمایی بفرمایید اپ جدول رو کجا ذخیره میکنه بصورت پیشفرض؟


  • 1401/11/23
  • ساعت 18:13

نیاز به اینکار نیست.

شما میتونی query بزنی و در نتیجه اطلاعات table رو بدست بیاری.

PRAGMA table_info(table_name)