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

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

Войти
Регистрация
Восстановить пароль
 
banga_ivan
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 10
#1

Создание базы данных - Программирование Android

30.06.2015, 22:51. Просмотров 431. Ответов 2
Метки нет (Все метки)

Всем доброго времени суток. Пробую писать программу для Android. Сейчас изучаю SQLite. Когда писал код по примерам все работало. База данных создавалась, данные записывались. Сейчас я модифицировал таблицу для своих нужд. И при создании БД получаю ошибку. Сам разобраться с проблемой не в состоянии. Объясните мне пожалуйста в чем проблема. Код под спойлером.
Кликните здесь для просмотра всего текста
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
package com.smart_wallet.smartwallet.db;
 
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
 
public class DBHelper extends SQLiteOpenHelper implements BaseColumns {
 
    private static final String DATABASE_NAME = "mydb.db";
    private static final int DATABASE_VERSION = 1;
 
    public static final String TABLE_NAME = "History";
 
    public static final String NAME_COLUMN = "name";
    public static final String PRICE_COLUMN = "price";
    public static final String DESCRIPTION_COLUMN = "description";
    public static final String DATE_COLUMN = "date";
    public static final String TYPE_COLUMN = "type";
 
    private static final String CREATE_DATABASE =
            "create table " + TABLE_NAME + " (" + BaseColumns._ID +
                    " integer not null primary key autoincrement, " +
                    NAME_COLUMN + " text not null, " +
                    PRICE_COLUMN + " decimal not null, " +
                    DATE_COLUMN + " text not null, " +
                    TYPE_COLUMN + " integer not null " +
                    DESCRIPTION_COLUMN + " text);";
 
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }
 
    public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
 
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_DATABASE);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
    }
}

Кликните здесь для просмотра всего текста

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
package com.smart_wallet.smartwallet.activity;
 
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
 
import com.smart_wallet.smartwallet.R;
import com.smart_wallet.smartwallet.db.DBHelper;
 
 
public class InPutActivity extends AppCompatActivity {
 
    private EditText name;
    private EditText price;
    private EditText description;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i("InPutActivity", " onCreate ");
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_in_put);
 
 
    }
 
 
    @Override
    protected void onDestroy() {
        Log.i("InPutActivity", " onDestroy ");
 
        super.onDestroy();
    }
 
    private void preparationData() {
        name = (EditText) findViewById(R.id.name);
        price = (EditText) findViewById(R.id.price);
        description = (EditText) findViewById(R.id.description);
 
        if (!name.getText().toString().equals("")) {
 
            if (!price.getText().toString().equals("")) {
 
                new ThreadBD().execute();
 
                Toast toast = Toast.makeText(getApplicationContext(), "Запис додано!", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
 
                finish();
            } else {
                Toast toast = Toast.makeText(getApplicationContext(),
                        "Поле \"Вартість\" не може бути пустимм!", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
            }
 
        } else {
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Поле \"Назва\" не може бути пустим!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();
        }
    }
 
    class ThreadBD extends AsyncTask<Void, Void, Void> {
        private DBHelper dbHelper;
        private SQLiteDatabase sqLiteDatabase;
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Toast toast = Toast.makeText(getApplicationContext(),
                    "База даних готова!", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.BOTTOM, 0, 0);
            toast.show();
        }
 
        @Override
        protected Void doInBackground(Void... params) {
            preparationBD();
            saveData();
            return null;
        }
 
        public void preparationBD() {
            dbHelper = new DBHelper(getApplicationContext(), "mydb.db", null, 1);
            sqLiteDatabase = dbHelper.getWritableDatabase();
        }
 
        private void saveData() {
            ContentValues values = new ContentValues();
 
            values.put(dbHelper.NAME_COLUMN, String.valueOf(name));
            values.put(dbHelper.PRICE_COLUMN, Double.valueOf(price.getText().toString()));
            values.put(dbHelper.DESCRIPTION_COLUMN, String.valueOf(description));
            values.put(dbHelper.DATE_COLUMN, "6.30.2015");
            values.put(dbHelper.TYPE_COLUMN, 1);
 
            sqLiteDatabase.insertOrThrow("History", null, values);
        }
    }
 
 
    public void onClick(View view) {
        Log.i("InPutActivity", " onClick ");
 
        switch (view.getId()) {
            case R.id.btnCancel:
                Log.i("InPutActivity", " onClick: btnCancel ");
 
                finish();
                break;
            case R.id.btnAdd:
                Log.i("InPutActivity", " onClick: btnAdd ");
 
                preparationData();
                break;
        }
    }
}


Лог:
Кликните здесь для просмотра всего текста
06-30 22:47:35.959 26352-26402/com.smart_wallet.smartwallet E/SQLiteLog﹕ (1) near "description": syntax error
06-30 22:47:35.962 26352-26402/com.smart_wallet.smartwallet E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: com.smart_wallet.smartwallet, PID: 26352
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.database.sqlite.SQLiteException: near "description": syntax error (code 1): , while compiling: create table History (_id integer not null primary key autoincrement, name text not null, price decimal not null, date text not null, type integer not null description text);
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
at com.smart_wallet.smartwallet.db.DBHelper.onCreate(DBHelper.java:46)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at com.smart_wallet.smartwallet.activity.InPutActivity$ThreadBD.preparationBD(InPutActivity.java:95)
at com.smart_wallet.smartwallet.activity.InPutActivity$ThreadBD.doInBackground(InPutActivity.java:88)
at com.smart_wallet.smartwallet.activity.InPutActivity$ThreadBD.doInBackground(InPutActivity.java:73)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
************at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
************at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
************at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
************at java.lang.Thread.run(Thread.java:818)
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 22:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание базы данных (Программирование Android):

Создание базы данных в андроид - Программирование Android
Помогите пожалуйста! Я только-только начинаю изучать программирование на андроид. Хочу взяться за создание базы данных, но не знаю с чего...

Создать базу данных с(Создание функции БД, Создание процедуры БД, Создание тригера БД) - Программирование Android
В задание для курсовой работы по БД входят вот такие пункты: 1.2 Создание функции БД. 1.3 Создание процедуры БД 1.4 Создание...

Постолбцовое отображение данных из базы данных SQLite - Программирование Android
Уважаемые форумчане, помогите пожалуйста. Необходимо вывести данные из таблицы базы данных в TextView. Вот код, когда в TextView...

Вывод данных из базы данных SQLite - Программирование Android
Здравствуйте уважаемые форумчане! Делаю программу для работы с базой данных SQLite. Смысл простой: есть одна база, в ней 9 таблиц, от 2 до...

Android - Вывод данных из базы данных - Программирование Android
Всем здравствуйте! Задача не сложная, надо просто знать:-[ Нужно вывести данные из БД SQLite в таблицу. Не надо их ни добавлять, ни...

Создание списка из Базы - Программирование Android
У меня есть база, а на 2 странице должен быть список, но выдает ошибку

2
Mikalai
259 / 235 / 95
Регистрация: 11.01.2015
Сообщений: 662
01.07.2015, 01:59 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Пропустил запятую
Java
1
2
3
4
5
6
7
8
private static final String CREATE_DATABASE =
            "create table " + TABLE_NAME + " (" + BaseColumns._ID +
                    " integer not null primary key autoincrement, " +
                    NAME_COLUMN + " text not null, " +
                    PRICE_COLUMN + " decimal not null, " +
                    DATE_COLUMN + " text not null, " +
                    TYPE_COLUMN + " integer not null " +//пропущена запятая после null
                    DESCRIPTION_COLUMN + " text);";
PS:
К статическим полям нужно обращаться не через ссылку на объект класса
Java
1
2
3
4
5
6
7
8
9
10
11
private void saveData() {
            ContentValues values = new ContentValues();
 
            values.put(dbHelper.NAME_COLUMN, String.valueOf(name));
            values.put(dbHelper.PRICE_COLUMN, Double.valueOf(price.getText().toString()));
            values.put(dbHelper.DESCRIPTION_COLUMN, String.valueOf(description));
            values.put(dbHelper.DATE_COLUMN, "6.30.2015");
            values.put(dbHelper.TYPE_COLUMN, 1);
 
            sqLiteDatabase.insertOrThrow("History", null, values);
        }
а через название класса
Java
1
2
3
4
5
6
7
8
9
10
11
private void saveData() {
            ContentValues values = new ContentValues();
 
            values.put(DBHelper.NAME_COLUMN, String.valueOf(name));
            values.put(DBHelper.PRICE_COLUMN, Double.valueOf(price.getText().toString()));
            values.put(DBHelper.DESCRIPTION_COLUMN, String.valueOf(description));
            values.put(DBHelper.DATE_COLUMN, "6.30.2015");
            values.put(DBHelper.TYPE_COLUMN, 1);
 
            sqLiteDatabase.insertOrThrow("History", null, values);
        }
1
banga_ivan
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 10
01.07.2015, 07:47  [ТС] #3
Спасибо большое! Все заработало.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 07:47
Привет! Вот еще темы с ответами:

Базы данных в андроиде - Программирование Android
Структура данных примерно такова public class Stat { int id, key_id; List&lt;String&gt; date; List&lt;String&gt; rub_1; ...

Вывод из базы данных - Программирование Android
Хочу вывести список паролей из бд в ListView. package com.example.android_39_sqliteregistrationsys; import android.app.Activity; ...

Шифрование базы данных - Программирование Android
У меня есть база данных. Мне надо ее зашифровать. есть https://guardianproject.info/code/sqlcipher/ все бы круто но меня смущает...

Инициализация базы данных - Программирование Android
Есть главная активити + 3 фрагмента. Из фрагментов вызываются AsyncTask и результаты пишутся в DB. Постоянно вижу в логах ошибки на...


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

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

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