استاد سلام،
من الان در جلسه 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 ساعت گشتن)
پیشاپیش از لطف و پاسخگویی شما متشکرم
ارادتنمد
سلام دوست من.
table myContacts has no column named name
اگه به ارور توجه کنی میگه نمیتونه ستون به اسم name که شما در کوئری نوشتی رو در دیتابیس و در table مورد نظر پیدا کنه.
به table مراجعه کن شاید نام ستون رو به جای name به اشتباه مثلا nmae یا namee نوشته باشی.
سلام استاد،
ممنون از لطفتون، مشکلم همینه که نمیدونم table رو باید کجا بیابم؟ سپاسگزار میشم اگر راهنمایی بفرمایید اپ جدول رو کجا ذخیره میکنه بصورت پیشفرض؟
نیاز به اینکار نیست.
شما میتونی query بزنی و در نتیجه اطلاعات table رو بدست بیاری.
PRAGMA table_info(table_name)