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

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

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

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

30.06.2015, 22:51. Просмотров 386. Ответов 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)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2015, 22:51     Создание базы данных
Посмотрите здесь:

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

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

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

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

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

Обновление Базы данных - Программирование Android
Есть база данных которую просматриваю в Активити1, сделал все работает. При нажатии на кнопку перехожу в Ативити2 где вижу последнюю...

Чтение данных из базы - Программирование Android
Доброго времени суток ув. форумчане! Возникла проблема при попытке прочитать данные из БД, которая сохранена в external storage. Помогите...

Базы данных в андроиде - Программирование 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
Есть главная активити + 3 фрагмента. Из фрагментов вызываются AsyncTask и результаты пишутся в DB. Постоянно вижу в логах ошибки на...

SQLite обновление базы данных - Программирование Android
Всем привет. Использую базу данных в приложении. При обновлении программы нужно обновить базу данных в том числе, база данных хранится...

Обновление базы данных вручную - Программирование Android
Бьюсь я над проблемой изменения значений в БД ( http://www.cyberforum.ru/android-dev/thread1805861.html ). Решил посмотреть что именно...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
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);
        }
banga_ivan
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 10
01.07.2015, 07:47  [ТС]     Создание базы данных #3
Спасибо большое! Все заработало.
Ответ Создать тему
Опции темы

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