Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Запись данных в 2 таблицы SQLite

Как заполнять данные в базу данных при двух таблицах?

Получается лишь в одну таблицу занести данные. А как их заносить в другую?. Есть таблица Компании и фирмы. При нажатии на компании открывается лист вью который содержит все фирмы данной компаниию. Это все работает. Только я не могу понять как програмно добавлять записи в таблицы. Так что бы они соответствовали выбраному элементу. У меня получается лишь добавить данные лишь в таблицу "Компании".

вот код таблиц

Код Java(TM) 2 Platform Standard Edition 5.0
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
public class DBHelper extends SQLiteOpenHelper {
 
    public static final String TAG = "DBHelper";
 
    // columns of the companies table
    public static final String TABLE_COMPANIES = "companies";
    public static final String COLUMN_COMPANY_ID = "_id";
    public static final String COLUMN_COMPANY_NAME = "company_name";
    public static final String COLUMN_COMPANY_ADDRESS = "address";
    public static final String COLUMN_COMPANY_WEBSITE = "website";
    public static final String COLUMN_COMPANY_PHONE_NUMBER = "phone_number";
 
    // columns of the employees table
    public static final String TABLE_EMPLOYEES = "employees";
    public static final String COLUMN_EMPLOYE_ID = COLUMN_COMPANY_ID;
    public static final String COLUMN_EMPLOYE_FIRST_NAME = "first_name";
    public static final String COLUMN_EMPLOYE_LAST_NAME = "last_name";
    public static final String COLUMN_EMPLOYE_ADDRESS = COLUMN_COMPANY_ADDRESS;
    public static final String COLUMN_EMPLOYE_EMAIL = "email";
    public static final String COLUMN_EMPLOYE_PHONE_NUMBER = COLUMN_COMPANY_PHONE_NUMBER;
    public static final String COLUMN_EMPLOYE_SALARY = "salary";
    public static final String COLUMN_EMPLOYE_COMPANY_ID = "company_id";
 
    private static final String DATABASE_NAME = "companies.db";
    private static final int DATABASE_VERSION = 1;
 
    // SQL statement of the employees table creation
    private static final String SQL_CREATE_TABLE_EMPLOYEES = "CREATE TABLE " + TABLE_EMPLOYEES + "("
            + COLUMN_EMPLOYE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + COLUMN_EMPLOYE_FIRST_NAME + " TEXT NOT NULL, "
            + COLUMN_EMPLOYE_LAST_NAME + " TEXT NOT NULL, "
            + COLUMN_EMPLOYE_ADDRESS + " TEXT NOT NULL, "
            + COLUMN_EMPLOYE_EMAIL + " TEXT NOT NULL, "
            + COLUMN_EMPLOYE_PHONE_NUMBER + " TEXT NOT NULL, "
            + COLUMN_EMPLOYE_SALARY + " REAL NOT NULL, "
            + COLUMN_EMPLOYE_COMPANY_ID + " INTEGER NOT NULL "
            +");";
 
    // SQL statement of the companies table creation
    private static final String SQL_CREATE_TABLE_COMPANIES = "CREATE TABLE " + TABLE_COMPANIES + "("
            + COLUMN_COMPANY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + COLUMN_COMPANY_NAME + " TEXT NOT NULL, "
            + COLUMN_COMPANY_ADDRESS + " TEXT NOT NULL, "
            + COLUMN_COMPANY_WEBSITE + " TEXT NOT NULL, "
            + COLUMN_COMPANY_PHONE_NUMBER + " TEXT NOT NULL "
            +");";
 
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(SQL_CREATE_TABLE_COMPANIES);
        database.execSQL(SQL_CREATE_TABLE_EMPLOYEES);
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG,
                "Upgrading the database from version " + oldVersion + " to "+ newVersion);
        // clear all data
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_EMPLOYEES);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_COMPANIES);
 
        // recreate the tables
        onCreate(db);
    }
 
    public DBHelper(Context context, String name, CursorFactory factory,int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }
}
а вот так я добавляю данные в таблицу "Компании"

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
    public void onCreate(SQLiteDatabase database) {
        database.execSQL(SQL_CREATE_TABLE_COMPANIES);
        ContentValues cv = new ContentValues();
        cv.put(COLUMN_COMPANY_NAME, "Cooperator");
        cv.put(COLUMN_COMPANY_ADDRESS, "st. Pushkina");
        cv.put(COLUMN_COMPANY_WEBSITE, "blablablaa96");
        cv.put(COLUMN_COMPANY_PHONE_NUMBER, "4546545");
        database.insert(SQL_CREATE_TABLE_COMPANIES, null, cv);
        
        
        database.execSQL(SQL_CREATE_TABLE_EMPLOYEES);
    }
Подскажите как связывать данные между собой по айди элемента
Ответ: loren96, ну смотрите, вот у вас в таблице employee есть столбец company_id. Чтобы его установить, вы для него передаете id связанной компании
Код Java(TM) 2 Platform Standard Edition 5.0
1
cv.put(COLUMN_EMPLOYE_COMPANY_ID, здесь_id_компании);
все остальные данные будут передаваться также
только остается получить id компании
Вопрос: Безопасно ли хранить данные в SQLite?

Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь?

Безопасно ли хранить данные в SQLite? Что нужно сделать злоумышленнику, чтобы вскрыть файл с данными на андроид смартфоне? В чем заключается безопасность этой базы данных? Подскажите пожалуйста!

Заранее большое спасибо!!
Ответ:
Сообщение от gigs
мешной вопрос. Это все равно что спросить "Что нужно сделать злоумышленнику, чтобы украсть деньги с кошелька владельца ?". Для начала нужно украсть сам кошелек.
Неправильный подход! ОПАСНЫЙ!

У меня есть программа, которая хранит список клиентов в базе... С телефонами, адресами, пожеланиями... Или ВНУТРЕННИЙ прайс товаров... (ценная штука для конкурентов)
База большая. А значит на внутренней флешке не вмещается. Приходится хранить на "сьемной"...

Почти ЛЮБАЯ программа на плее требует доступ к флешке и к интернету! От игр, до фото-редакторов! От звонилок до виджетов часиков со скинами... И ЛЮБАЯ программа может ДИСТАНЦИОННО прошерстить мою флешку, отправить список файлов автору, а потом по запросу переслать на его сервер и нужные ему файлы с флешки (базы). Защита НУЖНА! А решения человеческого для андроида пока нет... (нашел лишь шифрованный SQLite, но не уверен в его надежности, как хранилища, и знаю что потери в скорости от 10%)
Вопрос: Узнать размер всех данных в SQLite

Вот я сохранил некоторые данные в SQLite могу ли я узнать размер данных, которые хранятся в SQLite, то есть размер самой SQLite с моими данными? И есть ли ограничения на хранение данных в мобильной базе? Какой максимальный размер можно хранить?
Ответ: А как запустить этот SQL запрос программно(из Java кода), чтобы получить PRAGMA page_count(это же int)? У SQLiteDatabase есть только 2 метода с SQL запросами это execSQL() и rawQuery. Первая вообще ничего не возвращает, а только запускает SQL скрипт, а вторая возвращает Cursor, но мне же нужен int. Может из Cursora как то можно получить page_count если да то как?
Вопрос: Удаление записей из таблицы

Когда удалял последнюю запись из таблицы из БД все работало норм! А когда удалили запись к примеру под №1, после попытался вывести данные - ошибка! С чем это связано?
Код Java(TM) 2 Platform Standard Edition 5.0
1
db.delete("mytable", "id = " + id, null);
Ответ: powowstal, шота вы какие-то такие страсти расписываете, аж жуть.

Сообщение от powowstal
и конечно же считывание 3го элемента выдаст ошибку
Хотелось бы посмотреть, как вы производите считывание этого элемента.
Не запросом ли часом?
Так откуда там будет какая-то ошибка?
Вернётся вам пустой курсор и делов-то.

Сообщение от powowstal
(без проверки на ошибку существования).
Делать мне нечего проверять есть там оно такое или нет.
Пришёл пустой курсор - нету.
Непустой - чё-то есть.

Да и вообще непонятно, КАК на db.delete у автора смогла выпасть ошибка выхода за границы размерности КУРСОРА.
Где-то нас дурять
Вопрос: Чтение и запись данных в локальную БД 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
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
package com.tanatix.checkinternetresourceschanges;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * Created by TanaTiX on 13.08.2016.
 */
public class DatabaseHelper extends SQLiteOpenHelper implements BaseColumns{
 
    private SQLiteDatabase db;
   // private ContentValues values;
 
    private static final String DATABASE_NAME = "resources_database.db";
    private static final int DATABASE_VERSION = 4;
    public static final String DATABASE_TABLE = "resources";
 
    public static final String ROOT = "root";
    public static final String NAME = "name";
    public static final String LINK = "link";
    public static final String HTML = "html";
    public static final String HASH = "hash";
    public static final String DATE = "date";
    private static final String CREATE_DATABASE = "create table " + DATABASE_TABLE + " ("
            + BaseColumns._ID + " integer primary key autoincrement, "
            + ROOT + " text not null, "
            + NAME + " text not null, "
            + LINK + " text not null, "
            + HTML + " text, "
            + HASH + " text, "
            + DATE + " text);";
 
 
    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context, name, factory, version);
    }
 
    DatabaseHelper(Context context){
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_DATABASE);
        db.close();
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Запишем в журнал
        Log.w("SQLite", "Обновляемся с версии " + oldVersion + " на версию " + newVersion);
 
        // Удаляем старую таблицу и создаём новую
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        // Создаём новую таблицу
        onCreate(db);
    }
 
    public void addFirstData(String root, String name, String link, String html){
        ContentValues values = new ContentValues();
        db = this.getWritableDatabase();
        values.put(ROOT, root);
        values.put(NAME, name);
        values.put(LINK, link);
        values.put(HTML, html);
        long test = db.insert(DATABASE_TABLE, null, values);
        Log.d("add first data", "test");
        db.close();
    }
 
    public Resource getResource(int id){
        db = this.getReadableDatabase();
        String[]projection={
                _ID,
                ROOT,
                NAME,
                LINK,
                HTML,
                HASH,
                DATE
        };
        Cursor cursor = db.query(DATABASE_TABLE, projection, _ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
        if(cursor == null || cursor.getCount() ==0){
            Log.d("cursor", "cursor is null");
            return null;
        }
        cursor.moveToFirst();
 
        Resource resource = new Resource();
 
        Log.d("cursor", cursor.toString());
        System.out.print(cursor.getString(0));
 
        resource.set_id(Integer.parseInt(cursor.getString(0)));
        resource.set_root((cursor.getString(1)));
        resource.set_name((cursor.getString(2)));
        resource.set_link((cursor.getString(3)));
        resource.set_html((cursor.getString(4)));
        resource.set_hash((cursor.getString(5)));
        //resource.set_date((cursor.getString(6)));
        db.close();
        return resource;
    }
 
    public List<Resource> getAllResources(){
        List<Resource> list = new ArrayList<Resource>();
        String selectQuery = "SELECT * FROM " + DATABASE_TABLE;
        db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);
        if(cursor.moveToFirst()){
            do{
                Resource resource = new Resource();
                resource.set_id(Integer.parseInt(cursor.getString(0)));
                resource.set_root((cursor.getString(1)));
                resource.set_name((cursor.getString(2)));
                resource.set_link((cursor.getString(3)));
                resource.set_html((cursor.getString(4)));
                resource.set_hash((cursor.getString(5)));
                //resource.set_date((cursor.getString(6)));
 
            }while (cursor.moveToNext());
        }
        db.close();
        return list;
    }
}


Но если записать данные в таблицу (метод addFirstData) с последующим извлечением (getResource с аргументом 0), то получаю ошибку в связи с попыткой доступа к null-объекту. В чем ошибка, что делаю не так?
Ответ: CoolMind, в последней строчке

Java
1
2
3
db.addFirstData(rootValue, nameValue, linkValue, htmlValue);
Resource resource = db.getResource(0);
System.out.print(resource.get_name());
Добавлено через 11 часов 28 минут
Java
1
Cursor cursor = db.query(DATABASE_TABLE, projection, _ID + "=?", new String[]{String.valueOf(id)}, null, null, null, null);
Поставил в этой строке везде null после projection и заработало. Строка в таком виде была скопирована из какого-то урока.
Вопрос: SQLite and ListView. Ввод и вывод данных

Здравствуйте. Пишу программу(кто бы мог подумать). Есть подозрения, что данные в БД вбиваются не правильно или как раз выводятся неправильно. Этого ни как всё не пойму.Собственно код:
Вывод данных в лог с помощью кнопки из таблицы, что в БД.
Код Java(TM) 2 Platform Standard Edition 5.0
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
 btnEvent  = (Button) findViewById(R.id.log_log_log);
        btnEvent.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
 
                Log.d(TAG, "--- Rows in event: ---");
                // делаем запрос всех данных из таблицы , получаем Cursor
                //Cursor c = db.query("event", null, null, null, null, null, null);
                Cursor c = db.getAllData("event");
 
                if (c.moveToFirst()) {
                    int idColID = c.getColumnIndex(DB.EVENT_COLUMN_ID);
                    int idColMAN = c.getColumnIndex(DB.EVENT_COLUMN_MAN);
                    int idColMEETING = c.getColumnIndex(DB.EVENT_COLUMN_MEETING);
                    int idColET = c.getColumnIndex(DB.EVENT_COLUMN_EVENT_TYPE);
                    int idColVALUE = c.getColumnIndex(DB.EVENT_COLUMN_VALUE);
 
                    do {
                        // получаем значения по номерам столбцов и пишем все в лог
                        Log.d(TAG,
                                "ID = " + c.getInt(idColID) +
                                        ", MAN = " + c.getInt(idColMAN) +
                                        ", MEETING = " + c.getInt(idColMEETING) +
                                        ", EVENT TYPE = " + c.getInt(idColET) +
                                        ", VALUE = " + c.getInt(idColVALUE));
                        // переход на следующую строку
                        // а если следующей нет (текущая - последняя), то false - выходим из цикла
                    } while (c.moveToNext());
                } else {
                    Log.d(TAG, "0 rows");
                }
                    }
        });
Лог после вывода:
Код Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
D/EVENT__ACTIVITY﹕ --- Rows in event: ---
D/EVENT__ACTIVITY﹕ ID = 1, MAN = 1, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 2, MAN = 0, MEETING = 1, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 3, MAN = 0, MEETING = 0, EVENT TYPE = 1, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 4, MAN = 0, MEETING = 0, EVENT TYPE = 0, VALUE = 1
D/EVENT__ACTIVITY﹕ ID = 5, MAN = 1, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 6, MAN = 0, MEETING = 1, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 7, MAN = 0, MEETING = 0, EVENT TYPE = 1, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 8, MAN = 0, MEETING = 0, EVENT TYPE = 0, VALUE = 1
D/EVENT__ACTIVITY﹕ ID = 9, MAN = 1, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 10, MAN = 0, MEETING = 1, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 11, MAN = 0, MEETING = 0, EVENT TYPE = 1, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 12, MAN = 0, MEETING = 0, EVENT TYPE = 0, VALUE = 1
D/EVENT__ACTIVITY﹕ ID = 13, MAN = 2, MEETING = 0, EVENT TYPE = 0, VALUE = 0
D/EVENT__ACTIVITY﹕ ID = 14, MAN = 0, MEETING = 2, EVENT TYPE = 0, VALUE = 0
И так далее.

Фишка в том, что добавляются 4 интовых значения, а при выводе получается не одна строка, а четыре и некой лесенкой, можно увидеть:
11000
20100
30010
40001
Как-то так. Запихнул это на вывод в ListView, но там тоже ни чего хорошего вывод цифры происходит через каждые три строчки.

Добавление в данных в таблицу
Код Java(TM) 2 Platform Standard Edition 5.0
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
 btnEvent  = (Button) findViewById(R.id.new_event_in_tab);
        btnEvent.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Do something in response to button click
 
 
                boolean checkMan= !true,
                        checkET = !true,
                        checkMeet = !true;
 
                Log.v(TAG, "ТЫК!" );
 
                //checkMan = !true; checkET = !true; checkMeet = !true;
 
                Log.v(TAG, "РАБОТАЕ СО СПИНЕРАМИ" );
                if (edtMan.getSelectedItem() != null)
                {
                    checkMan = true;
 
                    cur = db.GetCatalogValueByName("man", "_id", "name", edtMan.getSelectedItem().toString());
                    cManID = cur.getInt(cur.getColumnIndex("_id"));
                }
                if (edtET.getSelectedItem() != null)
                {
                    checkET = true;
                    cur = db.GetCatalogValueByName("event_type", "_id", "name", edtET.getSelectedItem().toString());
                    cETID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_EVENT_TYPE, cETID );
                }
                if (edtMeet.getSelectedItem() != null)
                {
                    checkMeet = true;
                    cur = db.GetCatalogValueByName("meeting", "_id", "name", edtMeet.getSelectedItem().toString());
                    cMeetID = cur.getInt(cur.getColumnIndex("_id"));
                    //db.addRec("event", DB.EVENT_COLUMN_MEETING, cMeetID );
                }
 
                Log.v(TAG, "ПРОВЕРЯЕМ ФЛАГИ НА 'TRUE'. ИМЕЮТСЯ ЛИ ДАННЫЕ В СПИНЕРАХ " );
 
                //Если все значения true, то записываем данные в таблицу "event"
                if(checkMan != false & checkET != false & checkMeet != false){
                    db.addRec("event", "ManId", cManID );
                    db.addRec("event", "MeetingId", cMeetID );
                    db.addRec("event", "EventTypeId", cETID );
                    Log.v(TAG, "ОК" );
 
                    Log.v(TAG, "ЗАПИСЬ В ТАБЛИЦУ ЧЕКБОКСИКА" );
                    if (checkboxEvent.isChecked() == true) {
                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 1 );
                        Log.v(TAG, "ОК---1" );
 
                    }else {
                        db.addRec("event", DB.EVENT_COLUMN_VALUE, 0 );
                        Log.v(TAG, "ОК---0" );
                    }
                }
            }
        });
В заранее спасибо за вашу помощь.
Ответ: Ну, обновил ты курсор и что дальше?
Откуда адаптер знает, что данные изменились?
Вопрос: Как записывать данные из SQLite в ListView

Здравствуйте, задался таким вопросом. Есть SQLite таблица, данные в которой берутся из EditText. Я хочу их записывать их в ListView, желательно кликабельны. вопрос, как это сделать? В примере вывожу данные в Log.

Код:
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
public class FormActivity extends Fragment implements View.OnClickListener{
 
    DBHelper dbHelper;
 
    Button btnAdd, btnRead, btnClean, btnUpdate, btnDel;
    EditText edId, edName, edWeight, edFrom, edTo, edFIO, edEmail, edPhone;
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_form, container, false);
 
 
        btnAdd = (Button) rootView.findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(this);
        //btnAdd.setEnabled(true);
        btnRead = (Button) rootView.findViewById(R.id.btnRead);
        btnRead.setOnClickListener(this);
 
        btnClean = (Button) rootView.findViewById(R.id.btnClean);
        btnClean.setOnClickListener(this);
 
        btnUpdate = (Button) rootView.findViewById(R.id.btnUpdate);
        btnUpdate.setOnClickListener(this);
 
        btnDel = (Button) rootView.findViewById(R.id.btnDel);
        btnDel.setOnClickListener(this);
 
        edId = (EditText) rootView.findViewById(R.id.edId);
        edName = (EditText) rootView.findViewById(R.id.edName);
        edWeight = (EditText) rootView.findViewById(R.id.edWeight);
        edFrom = (EditText) rootView.findViewById(R.id.edFrom);
        edTo = (EditText) rootView.findViewById(R.id.edTo);
        edFIO = (EditText) rootView.findViewById(R.id.edFIO);
        edEmail = (EditText) rootView.findViewById(R.id.edEmail);
        edPhone = (EditText) rootView.findViewById(R.id.edPhone);
 
        getActivity();
        dbHelper = new DBHelper(getActivity());
 
        return rootView;
    }
 
 
    @Override
    public void onClick(View v) {
        String id = edId.getText().toString();
        String name = edName.getText().toString();
        String weight = edWeight.getText().toString();
        String from = edFrom.getText().toString();
        String to = edTo.getText().toString();
        String fio = edFIO.getText().toString();
        String email = edEmail.getText().toString();
        String phone = edPhone.getText().toString();
 
        SQLiteDatabase database = dbHelper.getWritableDatabase();
        //Add items
        ContentValues contentValues = new ContentValues();
 
        switch (v.getId()){
            case R.id.btnAdd:
                if(name.equalsIgnoreCase("") || weight.equalsIgnoreCase("") || from.equalsIgnoreCase("")
                        || to.equalsIgnoreCase("") || fio.equalsIgnoreCase("") || email.equalsIgnoreCase("")
                        || phone.equalsIgnoreCase("")){
                    Toast.makeText(getActivity(), "Incorrect ", Toast.LENGTH_SHORT).show();
                    break;
                }
                contentValues.put(DBHelper.KEY_NAME, name);
                contentValues.put(DBHelper.KEY_WEIGHT, weight);
                contentValues.put(DBHelper.KEY_FROM, from);
                contentValues.put(DBHelper.KEY_TO, to);
                contentValues.put(DBHelper.KEY_FIO, fio);
                contentValues.put(DBHelper.KEY_EMAIL, email);
                contentValues.put(DBHelper.KEY_PHONE, phone);
                database.insert(DBHelper.TABLE_ORDER, null, contentValues);
                break;
 
            case R.id.btnRead:
                Cursor cursor = database.query(DBHelper.TABLE_ORDER, null, null, null, null, null, null);
                if(cursor.moveToFirst()){
                    int idIndex = cursor.getColumnIndex(DBHelper.KEY_ID);
                    int nameIndex = cursor.getColumnIndex(DBHelper.KEY_NAME);
                    int weightIndex = cursor.getColumnIndex(DBHelper.KEY_WEIGHT);
                    int fromIndex = cursor.getColumnIndex(DBHelper.KEY_FROM);
                    int toIndex = cursor.getColumnIndex(DBHelper.KEY_TO);
                    int fioIndex = cursor.getColumnIndex(DBHelper.KEY_FIO);
                    int emailIndex = cursor.getColumnIndex(DBHelper.KEY_EMAIL);
                    int phoneIndex = cursor.getColumnIndex(DBHelper.KEY_PHONE);
                    do {
                        Log.d("mLog", "ID = " + cursor.getInt(idIndex)
                                + ", Description = " + cursor.getString(nameIndex)
                                + ", Weight = " + cursor.getString(weightIndex)
                                + ", From = " + cursor.getString(fromIndex)
                                + ", To = " + cursor.getString(toIndex)
                                + ", FIO = " + cursor.getString(fioIndex)
                                + ", Email = " + cursor.getString(emailIndex)
                                + ", Phone = " + cursor.getString(phoneIndex));
 
                    } while (cursor.moveToNext());
                } else Log.d("mLog", "0 rows");
                cursor.close();
                break;
 
            case R.id.btnClean:
                database.delete(DBHelper.TABLE_ORDER, null, null);
                break;
            case R.id.btnUpdate:
                if(id.equalsIgnoreCase("")){
                    Toast.makeText(getActivity(), "incorrect id", Toast.LENGTH_SHORT).show();
                    break;
                }
                contentValues.put(DBHelper.KEY_NAME, name);
                contentValues.put(DBHelper.KEY_WEIGHT, weight);
                contentValues.put(DBHelper.KEY_FROM, from);
                contentValues.put(DBHelper.KEY_TO, to);
                contentValues.put(DBHelper.KEY_FIO, fio);
                contentValues.put(DBHelper.KEY_EMAIL, email);
                contentValues.put(DBHelper.KEY_PHONE, phone);
                int updCount = database.update(DBHelper.TABLE_ORDER, contentValues, DBHelper.KEY_ID + "= ?", new String[] {id});
                Log.d("mLog", "Updates rows count = " + updCount);
                break;
            case R.id.btnDel:
                if (id.equalsIgnoreCase("")){
                    Toast.makeText(getActivity(), "incorrect id", Toast.LENGTH_SHORT).show();
                    break;
                }
                int delCount = database.delete(DBHelper.TABLE_ORDER, DBHelper.KEY_ID + "= ?", new String[] {id});
                Log.d("mLog", "Deleted rows count = " + delCount);
        }
 
    }
 
}



Код DBHelper:
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
public class DBHelper extends SQLiteOpenHelper {
 
    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "ArcDB";
    public static final String TABLE_ORDER = "arcboxes";
 
    public static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_WEIGHT = "weight";
    public static final String KEY_FROM = "fromm";
    public static final String KEY_TO = "too";
    public static final String KEY_FIO = "fio";
    public static final String KEY_EMAIL = "email";
    public static final String KEY_PHONE = "phone";
 
 
    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_ORDER + " (" + KEY_ID
                + " integer primary key autoincrement," + KEY_NAME + " text," + KEY_WEIGHT + " text," + KEY_FROM
                + " text," + KEY_TO + " text," + KEY_FIO + " text," + KEY_EMAIL + " text," + KEY_PHONE
                + " text" + ");");
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(TABLE_ORDER);
        onCreate(db);
    }
}
Ответ: Чтобы вывести лист виев на экран вам нужен уже сформированный стринг массив. В цикле вы его формирует потом закрываете курсор. По правилам приличия. Дальше лист виев. Я бы так делал.
Вопрос: Выбрать hasmap или sqlite

Народ, подскажите пожалуйста, что лучше выгрузить все данные из таблицы Sqlite в hasmap или делать постоянно новые запросы в БД? Как все выглядит будет список например из 20 вопросов в listview, при клике будет выдавать диалог в котором будут варианты ответов. Вот и сам вопрос откуда их лучше всего подгружать?
Ответ: В HashMap как и в enum хранить данные очень дорогое удовольствие, используйте класс модель в ArrayList
Вопрос: Динамическое создание таблиц SQLite

Пишу приложение, которому нужно нестатичное кол-во таблиц SQL. И возник вопрос, как это сделать, если возможно. Пожалуйста, знающие, помогите)
Ответ: Dejseresu, а где Вы это пишите?
Вопрос: Данные из SQlite в ListView, обработка события ListView

Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД.

Java(TM) 2 Platform Standard Edition 5.0
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
 mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                int num;
                userCursor = sqlHelper.database.rawQuery("select * from " + DatabaseHelper.TABLE + " where " +
                        DatabaseHelper.COLUMN_ID + "=?", new String[]{String.valueOf(id)});
 
                
userCursor.moveToPosition(position); 
num = userCursor.getInt(userCursor.getColumnIndex(DatabaseHelper.COLUMN_YEAR)); // В ЭТИХ СТРОКАХ БЕДА
 
 
                String baseUssd = Uri.encode("*") + "697" + Uri.encode("*") + num + Uri.encode("*") + "1"+ Uri.encode("#") ;
                StringBuilder builder = new StringBuilder();
                builder.append(baseUssd);
 
                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + builder.toString()));
                if (ActivityCompat.checkSelfPermission(UssdMain1Activity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    // TODO: Consider calling
                    return;
                }
                startActivity(intent);
 
             
            }
        });
При нажатии на первую строчку ListView запрос вроде бы прошел (на эмуляторе GenyMotion вылезла ошибка Connection problem or invalid MMI code, это кст вопрос №2 - Как проверить работоспособность USSD запросов???)

Но при нажатии на следующие строки вылетает ошибка android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1.
Вероятно косяк вот в этих строках:
Java(TM) 2 Platform Standard Edition 5.0
1
2
userCursor.moveToPosition(position); 
num = userCursor.getInt(userCursor.getColumnIndex(DatabaseHelper.COLUMN_YEAR)); 
Подскажите как по правильному реализовать?)
Ответ: Thanks очень полезная фишка