Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
banga_ivan
0 / 0 / 0
Регистрация: 19.10.2014
Сообщений: 10
1

Создание базы данных

30.06.2015, 22:51. Просмотров 1014. Ответов 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
Помогите пожалуйста! Я только-только начинаю изучать программирование на...

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

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

Вывод данных из базы данных SQLite
Здравствуйте уважаемые форумчане! Делаю программу для работы с базой данных...

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

2
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 670
01.07.2015, 01:59 2
Лучший ответ Сообщение было отмечено banga_ivan как решение

Решение

Пропустил запятую
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

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

Создание базы, ввод и вывод информации
Здравствуйте программирую недавно, дали задание в университете. Срочно нужна...

Базы данных в андроиде
Структура данных примерно такова public class Stat { int id, key_id;...


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

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

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