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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
| import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Locale;
import java.util.StringTokenizer;
public class MySQLite extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 4; // НОМЕР ВЕРСИИ БАЗЫ ДАННЫХ И ТАБЛИЦ !
static final String DATABASE_NAME = "phones"; // Имя базы данных
static final String TABLE_NAME = "emergency_service"; // Имя таблицы
static final String ID = "id"; // Поле с ID
static final String NAME = "name"; // Поле с наименованием организации
static final String PRICE = "price"; // // Поле с наименованием организации в нижнем регистре
static final String TYPE = "type"; // Поле с телефонным номером
static final String POWER = "power";
static final String WEIGHT = "weight";
static final String COUNTRY = "country";
static final String ASSETS_FILE_NAME = "vacuumcleaner.txt"; // Имя файла из ресурсов с данными для БД
static final String DATA_SEPARATOR = "|"; // Разделитель данных в файле ресурсов с телефонами
private Context context; // Контекст приложения
public MySQLite(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
// Метод создания базы данных и таблиц в ней
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ ID + " INTEGER PRIMARY KEY,"
+ NAME + " TEXT,"
+ PRICE + " TEXT,"
+ TYPE + " TEXT,"
+ POWER + " TEXT,"
+ WEIGHT + " TEXT,"
+ COUNTRY + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
System.out.println(CREATE_CONTACTS_TABLE);
loadDataFromAsset(context, ASSETS_FILE_NAME, db);
}
// Метод при обновлении структуры базы данных и/или таблиц в ней
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
System.out.println("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
// Добавление нового контакта в БД
public void addData(SQLiteDatabase db, String name, String price, String type, String power, String weight, String country) {
ContentValues values = new ContentValues();
values.put(NAME, name);
values.put(PRICE, price);
values.put(TYPE, type);
values.put(POWER, power);
values.put(WEIGHT, weight);
values.put(COUNTRY, country);
db.insert(TABLE_NAME, null, values);
}
// Добавление записей в базу данных из файла ресурсов
public void loadDataFromAsset(Context context, String fileName, SQLiteDatabase db) {
BufferedReader in = null;
try {
// Открываем поток для работы с файлом с исходными данными
InputStream is = context.getAssets().open(fileName);
// Открываем буфер обмена для потока работы с файлом с исходными данными
in = new BufferedReader(new InputStreamReader(is));
String str;
while ((str = in.readLine()) != null) { // Читаем строку из файла
String strTrim = str.trim(); // Убираем у строки пробелы с концов
if (!strTrim.equals("")) { // Если строка не пустая, то
StringTokenizer st = new StringTokenizer(strTrim, DATA_SEPARATOR); // Нарезаем ее на части
String name = st.nextToken().trim(); // Извлекаем из строки название организации без пробелов на концах
String price = st.nextToken().trim();
String type = st.nextToken().trim();
String power = st.nextToken().trim();
String weight = st.nextToken().trim();
String country = st.nextToken().trim();
addData(db, name, price, type, power, weight, country); // Добавляем название и телефон в базу данных
}
}
// Обработчики ошибок
} catch (IOException ignored) {
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ignored) {
}
}
}
}
// Получение значений данных из БД в виде строки с фильтром
public String getData(String filter) {
String selectQuery; // Переменная для SQL-запроса
if (filter.equals("")) {
selectQuery = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + NAME;
} else {
selectQuery = "SELECT * FROM " + TABLE_NAME + " WHERE (" + PRICE + " LIKE '%" +
filter.toLowerCase() + "%'" +
" OR " + TYPE + " LIKE '%" + filter + "%'" + " OR " + POWER + " LIKE '%" + filter + "%'"
+ " OR " + WEIGHT + " LIKE '%" + filter + "%'" + " OR " + COUNTRY +
" LIKE '%" + filter + "%'" + " OR " + NAME + " LIKE '%" + filter + "%'" +") ORDER BY " + NAME;
}
System.out.println(selectQuery);
SQLiteDatabase db = this.getReadableDatabase(); // Доступ к БД
Cursor cursor = db.rawQuery(selectQuery, null); // Выполнение SQL-запроса
StringBuilder data = new StringBuilder(); // Переменная для формирования данных из запроса
int num = 0;
if (cursor.moveToFirst()) { // Если есть хоть одна запись, то
do { // Цикл по всем записям результата запроса
int n = cursor.getColumnIndex(NAME);
int t = cursor.getColumnIndex(PRICE);
int k = cursor.getColumnIndex(TYPE);
int s = cursor.getColumnIndex(POWER);
int a = cursor.getColumnIndex(WEIGHT);
int d = cursor.getColumnIndex(COUNTRY);
String name = cursor.getString(n); // Чтение названия организации
String price = cursor.getString(t); // Чтение телефонного номера
String type = cursor.getString(k);
String power = cursor.getString(s);
String weight = cursor.getString(a);
String country = cursor.getString(d);
data.append(String.valueOf(++num) + ") " + name + ": " + price + ": "+ type + ": " + power + ": " + weight + ": " + country + ": " +"\n");
} while (cursor.moveToNext()); // Цикл пока есть следующая запись
}
return data.toString(); // Возвращение результата
}
} |