Форум программистов, компьютерный форум CyberForum.ru

Ошибка при добавлении в базу данных - Android

Войти
Регистрация
Восстановить пароль
 
contedevel
 Аватар для contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 589
31.07.2013, 00:12     Ошибка при добавлении в базу данных #1
Здравствуйте!
Я раньше не работал с бд, это мое первое приложение, делал опираясь на урок...
Вот такой код в итоге получился:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.contedevel.timetable.db;
 
import java.util.ArrayList;
import java.util.List;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DatabaseHandler extends SQLiteOpenHelper {
    //Static variables
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "timetableManager";
    public static final String TABLE_NAME = "timetable";
    
    //Timetable's columns
    public static final String KEY_ID          = "_id";
    public static final String KEY_ORDER       = "_order";
    public static final String KEY_WEEK_NUMBER = "_week";
    public static final String KEY_DAY         = "_day";
    public static final String KEY_SUBJECT     = "_subject";
    public static final String KEY_STARTEND    = "_startend";
    public static final String KEY_TEACHER     = "_teacher";
    public static final String KEY_AUDITORY    = "_auditory";
    public static final String KEY_HOMETASK    = "_hometask";
 
    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_ORDER + " INTEGER," + KEY_WEEK_NUMBER + " INTEGER,"
                + KEY_DAY + " TEXT," + KEY_SUBJECT + " TEXT," + KEY_STARTEND + " TEXT," 
                + KEY_TEACHER + " TEXT," + KEY_AUDITORY + " TEXT," + KEY_HOMETASK + " TEXT" + ");";
        db.execSQL(CREATE_TABLE);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
 
        // Create tables again
        onCreate(db);
    }
 
    public void addItem(TimetableItem item) {
        SQLiteDatabase db = this.getWritableDatabase();
        
        ContentValues values = new ContentValues();
        values.put(KEY_ORDER, item.getOrder());
        values.put(KEY_WEEK_NUMBER, item.getWeekNumber());
        values.put(KEY_DAY, item.getDay());
        values.put(KEY_SUBJECT, item.getSubject());
        values.put(KEY_STARTEND, item.getStartEnd());
        values.put(KEY_TEACHER, item.getTeacher());
        values.put(KEY_AUDITORY, item.getAuditory());
        values.put(KEY_HOMETASK, item.getHometask());
        
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
}


Вот вспомогательный класс:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.contedevel.timetable.db;
 
public class TimetableItem {
    //Variables
    private int _id;
    private int _order;
    private int _week;
    private String _day;
    private String _subject;
    private String _startend;
    private String _teacher;
    private String _auditory;
    private String _hometask;
    
    public TimetableItem () {
        this._id = -1;
        this._order = -1;
        this._week = -1;
        this._day = null;
        this._subject = null;
        this._startend = null;
        this._teacher = null;
        this._auditory = null;
        this._hometask = null;
    }
    
    public TimetableItem (int id, int order, int week, String day, String subject, String startend, String teacher, String auditory, String hometask) {
        this._id = id;
        this._order = order;
        this._week = week;
        this._day = day;
        this._subject = subject;
        this._startend = startend;
        this._teacher = teacher;
        this._auditory = auditory;
        this._hometask = hometask;
    }
    
    public void reset() {
        this._id = -1;
        this._order = -1;
        this._week = -1;
        this._day = null;
        this._subject = null;
        this._startend = null;
        this._teacher = null;
        this._auditory = null;
        this._hometask = null;
    }
    
    public void setID(int id) {
        this._id = id;
    }
    
    public void setOrder(int order) {
        if(order > 0) {
            this._order = order;
        }
        else {
            this._order = -1;
        }
    }
    
    public void setWeekNumber(int number) {
        if(number == 1 || number == 2) {
            this._week = number;
        }
        else {
            this._week = -1;
        }
    }
    
    public void setDay(String day) {
        if(day == "Monday" || day == "Tuesday" || day == "Wednesday"|| day == "Thursday" 
                || day == "Friday" || day == "Saturday" || day == "Sunday") {
            this._day = day;
        }
        else {
            this._day = null;
        }
    }
    
    public void setSubject(String subject) {
        this._subject = subject;
    }
    
    public void setStartEnd(String startend) {
        this._startend = startend;
    }
    
    public void setTeacher(String teacher) {
        this._teacher = teacher;
    }
    
    public void setAuditory(String auditory) {
        this._auditory = auditory;
    }
    
    public void setHometask(String hometask) {
        this._hometask = hometask;
    }
    
    public int getID() {
        return this._id;
    }
    
    public int getOrder() {
        return this._order;
    }
    
    public int getWeekNumber() {
        return this._week;
    }
    
    public String getDay() {
        return this._day;
    }
    
    public String getSubject() {
        return this._subject;
    }
    
    public String getStartEnd() {
        return this._startend;
    }
    
    public String getTeacher() {
        return this._teacher;
    }
    
    public String getAuditory() {
        return this._auditory;
    }
    
    public String getHometask() {
        return this._hometask;
    }
}


Вот диалог, из которого происходит обращение:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.contedevel.timetable;
 
import com.contedevel.timetable.db.DatabaseHandler;
import com.contedevel.timetable.db.TimetableItem;
 
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
 
public class EditDialog extends Dialog{
    String day;
    String week;
    TimePicker tpStart;
    TimePicker tpEnd;
    TimetableItem item;
    DatabaseHandler db;
    final EditText etSubject;
    final EditText etTeacher;
    final EditText etAuditory;
 
    public EditDialog(Context context, String week, String day) {
        super(context);
        // TODO Auto-generated constructor stub
        this.day = day;
        this.week = week;
        this.setContentView(R.layout.dialog_edit);
        item = new TimetableItem();
        final Button bOk = (Button) findViewById(R.id.bOk);
        etSubject = (EditText) findViewById(R.id.etSubject);
        etTeacher = (EditText) findViewById(R.id.etTeacher);
        etAuditory = (EditText) findViewById(R.id.etAuditory);
        tpStart = (TimePicker) findViewById(R.id.tpStart);
        tpEnd = (TimePicker) findViewById(R.id.tpEnd);
        db = new DatabaseHandler(context);
        //Positive button
        bOk.setText(R.string.create_dialog);
        bOk.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                clickOK();
            }           
        });
    }
    
    private void clickOK () {
        // TODO Auto-generated method stub
        item.setDay(day);
        if(week == "First") {
            item.setWeekNumber(1);
        }
        else {
            item.setWeekNumber(2);
        }
        item.setSubject(etSubject.getText().toString());
        item.setTeacher(etTeacher.getText().toString());
        item.setAuditory(etAuditory.getText().toString());
        item.setStartEnd(tpStart.getCurrentHour().toString() + ":"
                + tpStart.getCurrentMinute().toString() + " - " 
                + tpEnd.getCurrentHour().toString() + ":" + tpEnd.getCurrentMinute().toString());
        item.setHometask("");
        item.setOrder(1);
        db.addItem(item);
    }
 
}


И вот, что получаю в логе:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
07-30 20:09:38.788: E/SQLiteLog(1063): (1) table timetable has no column named _hometask
07-30 20:09:38.908: D/dalvikvm(1063): GC_CONCURRENT freed 229K, 9% free 3741K/4096K, paused 77ms+96ms, total 258ms
07-30 20:09:38.929: E/SQLiteDatabase(1063): Error inserting _week=2 _day=null _hometask= _auditory=193 _subject=russian _order=1 _startend=8:0 - 8:9 _teacher=bondar
07-30 20:09:38.929: E/SQLiteDatabase(1063): android.database.sqlite.SQLiteException: table timetable has no column named _hometask (code 1): , while compiling: INSERT INTO timetable(_week,_day,_hometask,_auditory,_subject,_order,_startend,_teacher) VALUES (?,?,?,?,?,?,?,?)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at com.contedevel.timetable.db.DatabaseHandler.addItem(DatabaseHandler.java:67)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at com.contedevel.timetable.EditDialog.clickOK(EditDialog.java:142)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at com.contedevel.timetable.EditDialog.access$1(EditDialog.java:125)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at com.contedevel.timetable.EditDialog$3.onClick(EditDialog.java:96)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.view.View.performClick(View.java:4204)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.view.View$PerformClick.run(View.java:17355)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.os.Handler.handleCallback(Handler.java:725)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.os.Looper.loop(Looper.java:137)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at java.lang.reflect.Method.invokeNative(Native Method)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at java.lang.reflect.Method.invoke(Method.java:511)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-30 20:09:38.929: E/SQLiteDatabase(1063):     at dalvik.system.NativeStart.main(Native Method)
]

Перепробовал уже кучу вариантов, но так и не могу понять, почему не видит столбец "_hometask"? В чем моя ошибка?
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 00:12     Ошибка при добавлении в базу данных
Посмотрите здесь:

Android Помощь при добавлении Actionbarsherlock
Android Ошибка при записи данных в SQLite
Размер фона уменьшается при добавлении кнопки Android
Ошибка при добавлении файла в очередь загрузки (android.app.DownloadManager) Android
Не прокручивать ListView при добавлении в него данных Android
Android При добавлении AdMob возникают ошибки
Ошибка при работе с базой данных Android
Android Ошибка при добавлении данных в список
Android Расположение кнопки при программном добавлении
Ошибка при записи данных в файл Android
Android Ошибка Gradle при добавлении Espresso
TextWatcher. При добавлении в проект вылет Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
 Аватар для Wenceslaus
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
31.07.2013, 13:09     Ошибка при добавлении в базу данных #2
Как по мне, код вполне работоспособный. Возможен вариант, что при первом запуске приложения таблица была создана без столбца "_hometask", посему его и не существует. В этом случае достаточно увеличить версию БД, чтоб вызвался onUpgrade и обновил структуру таблиц.
contedevel
 Аватар для contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 589
31.07.2013, 14:57  [ТС]     Ошибка при добавлении в базу данных #3
Спасибо, попробую... Но деинсталировал прогу, и при повторной установке вылез тот же баг в лог, если я не ошибаюсь бд должна была удалиться вместе с программой, но тестил на эмуляторе... попробую на реальном устройстве
Yandex
Объявления
31.07.2013, 14:57     Ошибка при добавлении в базу данных
Ответ Создать тему
Опции темы

Текущее время: 17:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru