Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
MrScrat
19 / 5 / 2
Регистрация: 28.09.2014
Сообщений: 79
#1

Ошибка при создании SQLite

09.03.2015, 14:14. Просмотров 940. Ответов 1
Метки нет (Все метки)

При запуске приложения вылетает ошибка:
Кликните здесь для просмотра всего текста

03-09 11:04:42.436 1556-1556/ru.scratty.myrec E/SQLiteLog﹕ (1) table "records" has more than one primary key
03-09 11:04:42.436 1556-1556/ru.scratty.myrec D/AndroidRuntime﹕ Shutting down VM
03-09 11:04:42.448 1556-1556/ru.scratty.myrec W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa4d82b20)
03-09 11:04:42.452 1556-1556/ru.scratty.myrec E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: ru.scratty.myrec, PID: 1556
java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.scratty.myrec/ru.scratty.myrec.BrowsingActivity}: android.database.sqlite.SQLiteException: table "records" has more than one primary key (code 1): , while compiling: CREATE TABLE records(id INTEGER PRIMARY KEY, head TEXT, description TEXT, like INTEGER PRIMARY KEY)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: table "records" has more than one primary key (code 1): , while compiling: CREATE TABLE records(id INTEGER PRIMARY KEY, head TEXT, description TEXT, like INTEGER PRIMARY KEY)
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:1672)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
at ru.scratty.myrec.DBManager.onCreate(DBManager.java:33)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at ru.scratty.myrec.DBManager.addItem(DBManager.java:44)
at ru.scratty.myrec.BrowsingActivity.onCreate(BrowsingActivity.java:26)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
************at android.app.ActivityThread.access$800(ActivityThread.java:135)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
************at android.os.Handler.dispatchMessage(Handler.java:102)
************at android.os.Looper.loop(Looper.java:136)
************at android.app.ActivityThread.main(ActivityThread.java:5001)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:515)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
************at dalvik.system.NativeStart.main(Native Method)



Ошибок в коде вроде бы нету, но приложение работать отказывается. прошу помочь разобраться в проблеме. Вот классы, задействованные в процессе:

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
public class Item {
 
    private int id;
    private String head;
    private String description;
    private int like;
 
    public Item(String head, String description, int like) {
        this.head = head;
        this.description = description;
        this.like = like;
    }
 
    public Item() {}
 
    public String getHead() {
        return head;
    }
 
    public String getDescription() {
        return description;
    }
 
    public int getLike() {
        return like;
    }
 
    public int getID() {
        return id;
    }
 
    public void setHead(String val) {
        head = val;
    }
 
    public void setDescription(String val) {
        description = val;
    }
 
    public void setLike(int val) {
        like = val;
    }
 
    public void setID(int val) {
        id = val;
    }
}
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
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
 
import java.util.ArrayList;
 
public class DBManager extends SQLiteOpenHelper{
 
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "my_records";
    private static final String TABLE_NAME = "records";
 
    private static final String KEY_ID = "id";
    private static final String KEY_HEAD = "head";
    private static final String KEY_DESCRIPTION = "description";
    private static final String KEY_LIKE = "like";
 
    public DBManager(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME +
                "(" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_HEAD + " TEXT, " +
                KEY_DESCRIPTION + " TEXT, " + KEY_LIKE + " INTEGER PRIMARY KEY" + ")";
 
        db.execSQL(CREATE_TABLE);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
 
        onCreate(db);
    }
 
    public void addItem(Item item) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
 
        values.put(KEY_HEAD, item.getHead());
        values.put(KEY_DESCRIPTION, item.getDescription());
        values.put(KEY_LIKE, item.getLike());
 
        db.insert(TABLE_NAME, null, values);
        db.close();
    }
 
    public Item getItem(int id) {
        SQLiteDatabase db = this.getReadableDatabase();
 
        Cursor cursor = db.query(TABLE_NAME, new String[] {KEY_ID, KEY_HEAD, KEY_DESCRIPTION, KEY_LIKE}, KEY_ID + "=?", new String[] {String.valueOf(id)}, null, null, null, null );
        if(cursor != null)
            cursor.moveToFirst();
 
        Item item = new Item();
        item.setID(Integer.parseInt(cursor.getString(0)));
        item.setHead(cursor.getString(1));
        item.setDescription(cursor.getString(2));
        item.setLike(Integer.parseInt(cursor.getString(3)));
 
        return item;
    }
 
    public ArrayList<Item> getAllItems() {
        ArrayList<Item> items = new ArrayList<Item>();
 
        String selectQuery = "SELECT  * FROM " + TABLE_NAME;
 
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
 
        if(cursor.moveToFirst())
            do {
                Item item = new Item();
                item.setID(Integer.parseInt(cursor.getString(0)));
                item.setHead(cursor.getString(1));
                item.setDescription(cursor.getString(2));
                item.setLike(Integer.parseInt(cursor.getString(3)));
                items.add(item);
            } while(cursor.moveToNext());
 
        return items;
     }
 
    public int setLikeItem(Item item) {
        SQLiteDatabase db = this.getWritableDatabase();
 
        ContentValues values = new ContentValues();
        values.put(KEY_HEAD, item.getHead());
        values.put(KEY_DESCRIPTION, item.getDescription());
        values.put(KEY_LIKE, item.getLike());
 
        return db.update(TABLE_NAME, values, KEY_ID + " = ?", new String[] { String.valueOf(item.getID()) });
    }
 
    public int getItemCount() {
        String countQuery = "SELECT  * FROM " + TABLE_NAME;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();
 
        return cursor.getCount();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class BrowsingActivity extends ActionBarActivity {
 
    private ListView listView;
    private CreateList listAdapter;
 
    private ArrayList<Item> list;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_browsing);
 
        DBManager db = new DBManager(this);
        db.addItem(new Item("Заголовок1", "Текст1", 0));
        db.addItem(new Item("Заголовок2", "Текст2", 0));
        db.addItem(new Item("Заголовок3", "Текст3", 0));
 
        list = db.getAllItems();
 
        listView = (ListView) findViewById(R.id.list);
        listAdapter = new CreateList(this, list);
 
    }
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2015, 14:14
Ответы с готовыми решениями:

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

Ошибка при создании класса
Помогите пожалуйста найти решение проблемы. При создании SQLOpenHelper класса...

Ошибка при создании виджета
Доброго времени суток! При создании виджета всегда вылетает одна и та же...

Ошибка при создании проекта
Запускаю Eclipse, создаю Android-проект (параметы: Build SDK: Android 4.1,...

Ошибка при создании RadioButton
В OnCreate Update(&quot;studentsapp1pn.txt&quot;,(RadioGroup)...

1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
09.03.2015, 18:05 #2
Лучший ответ Сообщение было отмечено MrScrat как решение

Решение

INTEGER PRIMARY KEY только один должен быть. KEY_LIKE ставь просто INTEGER.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2015, 18:05

Ошибка при создании обработчика
Извините за глупый вопрос... btnAdd.setOnClicklisteer(this) AndroidStudio...

Ошибка при создании приложения
Решил научиться работать в Android Studio. Установил её, запустил, решил...

Ошибка при создании файла
witeObjectToFile(user, ctx.getApplicationContext().getFilesDir() +...


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

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

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