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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
#1

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

31.07.2013, 00:12. Просмотров 615. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Я раньше не работал с бд, это мое первое приложение, делал опираясь на урок...
Вот такой код в итоге получился:
Кликните здесь для просмотра всего текста
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"? В чем моя ошибка?
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 00:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при добавлении в базу данных (Программирование Android):

Ошибка при добавлении данных в список - Программирование Android
Здравствуйте, такой вопрос, у меня список и собственный адаптер, в адаптере размер списка указан от количества элементов в списке String...

Ошибка Gradle при добавлении Espresso - Программирование Android
Проблема с добавлением библиотеки Espresso как зависимость при помощи Gradle. build.gradle корневой // Top-level build file where...

Не прокручивать ListView при добавлении в него данных - Программирование Android
Добрый день! Подскажите пожалуйста. Делаю программу. В ней есть функционал на подобии чата. Т.е. новые сообщения снизу, старые...

Ошибка при добавлении файла в очередь загрузки (android.app.DownloadManager) - Программирование Android
Пытаюсь загрузить файл с сервера, таким способом: public void download(Context context, String url) { String...

Ошибка при записи данных в файл - Программирование Android
Помогите пожалуйста!! Вот лог ошибки: java.lang.NullPointerException: Attempt to invoke interface method...

Ошибка при записи данных в SQLite - Программирование Android
Нужно добавить данные в БД SQLite, добавить нужно только текст. Проект запускается, но при нажатии на кнопку программа падает, в чем беда?...

2
Wenceslaus
Android Developer
130 / 130 / 4
Регистрация: 05.07.2013
Сообщений: 205
31.07.2013, 13:09 #2
Как по мне, код вполне работоспособный. Возможен вариант, что при первом запуске приложения таблица была создана без столбца "_hometask", посему его и не существует. В этом случае достаточно увеличить версию БД, чтоб вызвался onUpgrade и обновил структуру таблиц.
1
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 598
31.07.2013, 14:57  [ТС] #3
Спасибо, попробую... Но деинсталировал прогу, и при повторной установке вылез тот же баг в лог, если я не ошибаюсь бд должна была удалиться вместе с программой, но тестил на эмуляторе... попробую на реальном устройстве
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 14:57
Привет! Вот еще темы с ответами:

Ошибка при работе с базой данных - Программирование Android
скажите почему ошибка при этих строках: sqdb.insert(sms.TABLE_NAME1, sms.NAME1, cv); sqdb.execSQL(&quot;CREATE TABLE &quot; +...

Помощь при добавлении Actionbarsherlock - Программирование Android
Привет всем. Подскажите кто знает как к проекту в Idea Intellij добавить Actionbarsherlock? Я делал таким образом: 1) Скачал архив...

TextWatcher. При добавлении в проект вылет - Программирование Android
Доброго времени суток. На активити есть EditText, хочу добавить в проект обработчик изменения текста в этом элементе. Во всемогущем...

Расположение кнопки при программном добавлении - Программирование Android
Добрый день, уважаемые форумчане. Хотелось бы задать глупый вопрос, на который я так и не нашел ответа. Программно создаю кнопку при...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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