Урок 36. SQLite. Подробнее про метод query. Условие, сортировка, группировка
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Вопрос не совсем по уроку. Что значит final перед объявлением переменных?
Например final String LOG_TAG = "myLogs";
И что значит public в объявлении функции.
Например final String LOG_TAG = "myLogs";
И что значит public в объявлении функции.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
очень советую все-таки почитать про это как-то системно про ООП, т.к. по таким вопросам видно, что вы программируете, но мало что понимаете что происходит.kan_08 писал(а):Вопрос не совсем по уроку. Что значит final перед объявлением переменных?
Например final String LOG_TAG = "myLogs";
И что значит public в объявлении функции.
public - публичные, доступные вне класса ( к ним можно обращаться отовсюду)
final - те, которые не будут перегружаться в классах-наследниках.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Подскажите, пожалуйста, как эмулировать нажатие кнопки?
Урок работает, кроме одной строчки:
onCick(btnAll);
Эклипс предлагает добавить следующий метод:
private void onCick(Button btnAll2) {
// TODO Auto-generated method stub
}
В случае замены на
onCick((View)btnAll);
предлагает добавить метод:
private void onCick(View btnAll2) {
// TODO Auto-generated method stub
}
На существующий в классе метод public void onClick(View v) внимания не обращает.
В чём может быть проблема?
Урок работает, кроме одной строчки:
onCick(btnAll);
Эклипс предлагает добавить следующий метод:
private void onCick(Button btnAll2) {
// TODO Auto-generated method stub
}
В случае замены на
onCick((View)btnAll);
предлагает добавить метод:
private void onCick(View btnAll2) {
// TODO Auto-generated method stub
}
На существующий в классе метод public void onClick(View v) внимания не обращает.
В чём может быть проблема?
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
код покажиSerge писал(а):Подскажите, пожалуйста, как эмулировать нажатие кнопки?
Урок работает, кроме одной строчки:
onCick(btnAll);
Эклипс предлагает добавить следующий метод:
private void onCick(Button btnAll2) {
// TODO Auto-generated method stub
}
В случае замены на
onCick((View)btnAll);
предлагает добавить метод:
private void onCick(View btnAll2) {
// TODO Auto-generated method stub
}
На существующий в классе метод public void onClick(View v) внимания не обращает.
В чём может быть проблема?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
да код вроде как в урокеanber писал(а): код покажи
Код: Выделить всё
package ru.startandroid.develop.p0361sqlitequery;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
public class MainActivity extends Activity implements OnClickListener {
final String LOG_TAG = "MyLogs";
String name[] = { "Китай", "США", "Бразилия", "Россия",
"Япония", "Германия", "Египет", "Италия", "Франция", "Канада"};
int people[] = {1400,311,195,142,128,82,80,60,66,35};
String region[] = {"Азия","Америка","Америка","Европа","Азия",
"Европа","Африка","Европа","Европа","Америка"};
Button btnAll, btnFunc, btnPeople, btnSort, btnGroup, btnHaving;
EditText etFunc, etPeople, etRegionPeople;
RadioGroup rgSort;
DBHelper dbHelper;
SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnAll = (Button)findViewById(R.id.btnAll);
btnAll.setOnClickListener(this);
btnFunc = (Button)findViewById(R.id.btnFunc);
btnFunc.setOnClickListener(this);
btnPeople = (Button)findViewById(R.id.btnPeople);
btnPeople.setOnClickListener(this);
btnSort = (Button)findViewById(R.id.btnSort);
btnSort.setOnClickListener(this);
btnGroup = (Button)findViewById(R.id.btnGroup);
btnGroup.setOnClickListener(this);
btnHaving = (Button)findViewById(R.id.btnHaving);
btnHaving.setOnClickListener(this);
etFunc = (EditText)findViewById(R.id.etFunc);
etPeople = (EditText)findViewById(R.id.etPeople);
etRegionPeople=(EditText)findViewById(R.id.etRegionPeople);
rgSort = (RadioGroup)findViewById(R.id.rgSort);
dbHelper = new DBHelper(this);
//Подключаемся к базе
db = dbHelper.getWritableDatabase();
//проверка существования записей
Cursor c = db.query("mytable", null,null,null,null,null,null);
if (c.getCount() == 0){
ContentValues cv = new ContentValues();
//заполним таблицу
for (int i=0; i<10; i++){
cv.put("name", name[i]);
cv.put("people", people[i]);
cv.put("region", region[i]);
Log.d(LOG_TAG, "id = "+ db.insert("mytable", null, cv));
}
}
dbHelper.close();
//эмулируем нажатие кнопки btnAll
//onCick((View)btnAll);
onCick(btnAll);
}
public void onClick(View v) {
//подключаемся к базе
db = dbHelper.getWritableDatabase();
//данные с экрана
String sFunc = etFunc.getText().toString();
String sPeople = etPeople.getText().toString();
String sRegionPeople = etRegionPeople.getText().toString();
//переменные для query
String[] columns = null;
String selection = null;
String[] selectionArgs = null;
String groupBy = null;
String having = null;
String orderBy = null;
//курсор
Cursor c = null;
//определяем нажатую кнопку
switch (v.getId()){
//все записи
case R.id.btnAll:
Log.d(LOG_TAG, "--- Все записи ---");
c = db.query("mytable", null,null,null,null,null,null);
break;
//Функция
case R.id.btnFunc:
Log.d(LOG_TAG, "--- Функция " + sFunc+ " ---" );
columns = new String[] {sFunc};
c = db.query("mytable", columns, null, null, null, null, null);
break;
//Население больше чем
case R.id.btnPeople:
Log.d(LOG_TAG, "--- Население больше " + sPeople+" ---");
selection = "people > ?";
selectionArgs = new String[] {sPeople};
c = db.query("mytable", null, selection, selectionArgs, null, null, null);
break;
//Население по региону
case R.id.btnGroup:
Log.d(LOG_TAG, "--- Население по региону ---");
columns = new String[] {"region", "sum(people) as people"};
groupBy = "region";
c = db.query("mytable", columns, null,null, groupBy, null, null);
break;
//Население по региону больше чем
case R.id.btnHaving:
Log.d(LOG_TAG, "--- Регионы с населением больше " + sRegionPeople + " ---");
columns = new String[] {"region", "sum(people) as people"};
groupBy = "region";
having = "sum(people) > " + sRegionPeople;
c = db.query("mytable", columns, null,null, groupBy, having, null);
break;
//Сортировка
case R.id.btnSort:
//сортировка по
switch (rgSort.getCheckedRadioButtonId()){
case R.id.rName:
Log.d(LOG_TAG, "--- Сортировка по наименованию ---");
orderBy = "name";
break;
case R.id.rPeople:
Log.d(LOG_TAG,"--- Сортировка по населению ---");
orderBy = "people";
break;
case R.id.rRegion:
Log.d(LOG_TAG, "--- Сортировка по региону ---");
orderBy = "region";
break;
}
c = db.query("mytable", null, null, null, null, null, orderBy);
break;
}
if (c != null){
if (c.moveToFirst()){
String str;
do {
str = "";
for (String cn : c.getColumnNames()){
str = str.concat(cn+" = "+ c.getString(c.getColumnIndex(cn)) +"; ");
}
Log.d(LOG_TAG, str);
}while (c.moveToNext());
}else
Log.d(LOG_TAG, "Cursor is null");
dbHelper.close();
}
}
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context){
//конструктор суперкласса
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- On create Database ---");
// создаём таблицу с полями
db.execSQL("create table mytable( " +
"id integer primary key autoincrement," +
"name text," +
"people integer," +
"region text);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
}
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Вроде все верно.
>>>Урок работает, кроме одной строчки: onCick(btnAll);
Ошибку какую пишет?
ЗЫ, попробуй нажать на проекте правой кнопкой мыши в выбрать Refresh а также в главном меню Project - Clean...
>>>Урок работает, кроме одной строчки: onCick(btnAll);
Ошибку какую пишет?
ЗЫ, попробуй нажать на проекте правой кнопкой мыши в выбрать Refresh а также в главном меню Project - Clean...
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
После рефреша то же самое.anber писал(а):Вроде все верно.
>>>Урок работает, кроме одной строчки: onCick(btnAll);
Ошибку какую пишет?
ЗЫ, попробуй нажать на проекте правой кнопкой мыши в выбрать Refresh а также в главном меню Project - Clean...
Да не видит он функцию OnClick которая паблик и предлагает создать протектед.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
найди 10 отличийonCick()
onClick()
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Поддерживаю один из вопросов, заданных выше. Объясните пжл, что означает sum(people) as people, либо ткните меня носом в конкретный раздел каких нибудь русских уроков по SQLite где можно понять суть набора этих (символов) as символов?
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
это означает, что суммируются все значения пипл, а само поле результата будет названо пипл. Если не назвать никак, наименование может быть непредсказуемым в данном случае. Эз - это по английски - "как". (английскую клаву уже не видно, сорри).
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
всё же в млн, а не а тыс. поправтеих население (в тысячах)
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Спасибо, пофиксил!Isaev писал(а):всё же в млн, а не а тыс. поправтеих население (в тысячах)
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добрый день, уважаемые гуру
Я начал изучать программирование на Android около 2-х недель назад. Обучение происходит туго и со скрипом, но все же продвигается.
У меня возник вопрос, с которым бьюсь и не могу продвигаться вперед. Может кто-нибудь сможет помочь мне.
Допустим у меня есть БД и при нажатии кнопки на экране, в TextView мне необходимо выводить значение из таблицы БД. При повторном нажатии на кнопку должно выводиться новое значение на экран в TextView.
Интересует механизм, как это можно сделать, допустим по порядку выводить и в случайном порядке. Пока получается только выводить, например, или первое значение через moveToFirst или последнее moveToLast.
А как сделать, чтобы при каждом нажатии выводилось новое значение.
Заранее благодарен за любые ответы.
Я начал изучать программирование на Android около 2-х недель назад. Обучение происходит туго и со скрипом, но все же продвигается.
У меня возник вопрос, с которым бьюсь и не могу продвигаться вперед. Может кто-нибудь сможет помочь мне.
Допустим у меня есть БД и при нажатии кнопки на экране, в TextView мне необходимо выводить значение из таблицы БД. При повторном нажатии на кнопку должно выводиться новое значение на экран в TextView.
Интересует механизм, как это можно сделать, допустим по порядку выводить и в случайном порядке. Пока получается только выводить, например, или первое значение через moveToFirst или последнее moveToLast.
А как сделать, чтобы при каждом нажатии выводилось новое значение.
Заранее благодарен за любые ответы.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Первое что пришло в голову -
Пройтись по рез-ту выборки из Бд и сохранить в какой-нибудь массив
а далее ты при нажатии на кнопку будешь брать не из Бд, а из массива - а там уже можно по индексу выбирать случайные значение ( например через Random )
Пройтись по рез-ту выборки из Бд и сохранить в какой-нибудь массив
а далее ты при нажатии на кнопку будешь брать не из Бд, а из массива - а там уже можно по индексу выбирать случайные значение ( например через Random )
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Спасибо за ответ, а не могли бы Вы подсказать, в каком уроке можно изучить данный вопрос?WizikTLT писал(а): Пройтись по рез-ту выборки из Бд и сохранить в какой-нибудь массив
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Такого урока нет, на этом сайте.-Alex- писал(а):Спасибо за ответ, а не могли бы Вы подсказать, в каком уроке можно изучить данный вопрос?WizikTLT писал(а): Пройтись по рез-ту выборки из Бд и сохранить в какой-нибудь массив
Берёте Random и массив - и выбираете.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
Свои сообщения можно редактировать - кнопка edit.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Например в 34 есть,
В качестве массива можно взять например Map
Map result = new HashMap< Int,String>();
дальше в цикле обходишь курсор свой.
do {
закидываешь в map значения
result.put(cursor.getInt('Номер колонки ID'), cursor.getString('Номер колонки с данными для вывода в TextView'));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (cursor.moveToNext());
далее значения можешь получать -
String s = result.get('тут айдишник рандомной записи ');
В качестве массива можно взять например Map
Map result = new HashMap< Int,String>();
дальше в цикле обходишь курсор свой.
do {
закидываешь в map значения
result.put(cursor.getInt('Номер колонки ID'), cursor.getString('Номер колонки с данными для вывода в TextView'));
// переход на следующую строку
// а если следующей нет (текущая - последняя), то false - выходим из цикла
} while (cursor.moveToNext());
далее значения можешь получать -
String s = result.get('тут айдишник рандомной записи ');
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Спасибо огромное. Теперь понятно в каком направлении копать.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Лучше конечно завести новый класс, в котором будут все нужные тебе поля из курсора и потом в качестве массива использовать ArrayList<Твой класс> al = new ArrayList<Твой класс>();
В цикле будешь создавать новый экземпляр твоего класса и через al.add(экземпляр класса); добавлять в список
потом когда надо будет достать что-то используй
al.get(айдишник записи)- он вернет тебе сохраненный экземпляр твоего класса, а потом можешь достать значение любого поля из него.
В цикле будешь создавать новый экземпляр твоего класса и через al.add(экземпляр класса); добавлять в список
потом когда надо будет достать что-то используй
al.get(айдишник записи)- он вернет тебе сохраненный экземпляр твоего класса, а потом можешь достать значение любого поля из него.
Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор
Добрый день.
Всё продолжаю биться над старой проблемой.
Теперь уже получается заполнить массив из БД.
А вот прочитать данные из массива при нажатии кнопки не получается.
Привожу ниже код. Почему-то s выдает значение null, хотя Log.d(LOG_TAG, "result = " + result) показывает, что данные существуют.
Если у кого есть возможность, посмотрите, пожалуйста, в чем может быть моя ошибка.
Заранее спасибо
Всё продолжаю биться над старой проблемой.
Теперь уже получается заполнить массив из БД.
А вот прочитать данные из массива при нажатии кнопки не получается.
Привожу ниже код. Почему-то s выдает значение null, хотя Log.d(LOG_TAG, "result = " + result) показывает, что данные существуют.
Если у кого есть возможность, посмотрите, пожалуйста, в чем может быть моя ошибка.
Заранее спасибо
Код: Выделить всё
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor c = db.query("mytable", null, null, null, null, null, null);
switch (v.getId()) {
case R.id.btnMainFwd:
Log.d(LOG_TAG, "=== Читаем одну запись ===");
int idColIndex = c.getColumnIndex("id");
int engColIndex = c.getColumnIndex("engWord");
int rusColIndex = c.getColumnIndex("rusWord");
Map result = new HashMap<String, String>();
if (c.moveToFirst()) {
do {
result.put(c.getString(engColIndex), c.getString(rusColIndex));
Log.d(LOG_TAG, "result = " + result);
} while (c.moveToNext());
Random rand = new Random();
for (int i = 0; i < 1; i++) {
String s = (String) result.get(rand.nextInt(engColIndex));
Log.d(LOG_TAG, "s = " + s);
}
} else
Log.d(LOG_TAG, "0 rows");
c.close();
break;