Выборка из БД

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Выборка из БД

Сообщение antonbright » 02 авг 2013, 22:34

Хочу сделать выборку из дб по заданному атрибуту. вылезает нулпоинт на строке.
селекшн активити

Код: Выделить всё


public class SelectionsActivity extends Activity {
	final String LOG_TAG = "myLogs";
	RegistrationAdapter adapter_ob;
	RegistrationOpenHelper helper_ob;
	SQLiteDatabase db_ob;
    EditText etPeople;
    Button btn66;
    ListView lv1;
    Cursor cursor = null;
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.selection);
		etPeople = (EditText) findViewById(R.id.etPeople);
		
		lv1 = (ListView) findViewById (R.id.lv1);
		
		String[] from = { helper_ob.FNAME, helper_ob.LNAME, helper_ob.DATE, helper_ob.CATEGORY };
		int[] to = { R.id.tv_fname, R.id.tv_lname, R.id.tv_date, R.id.tv33 };
		cursor = adapter_ob.SelectTest(); // здесь ошибка
		SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this,
				R.layout.row, cursor, from, to);
		lv1.setAdapter(cursorAdapter);
	}

}
мейн

Код: Выделить всё

public class MainActivity extends Activity {
	RegistrationAdapter adapter_ob;
	RegistrationOpenHelper helper_ob;
	SQLiteDatabase db_ob;
	ListView nameList;
	Button registerBtn, testBtn, btnSel;
	Cursor cursor;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		nameList = (ListView) findViewById(R.id.lv_name);
		registerBtn = (Button) findViewById(R.id.btn_register);
		testBtn = (Button) findViewById(R.id.testBtn);
		adapter_ob = new RegistrationAdapter(this);
		btnSel = (Button) findViewById(R.id.btnSel);
		//	String track = helper_ob.TEST;
		//  final Calendar c = Calendar.getInstance();
		//	int today = c.get(Calendar.MONTH);
		
		//if(track==today){
		//	Toast.makeText(getApplicationContext(), "Добавлено",
		//			500).show();
		//	}
		//else {}
		
		String[] from = {helper_ob.FNAME, helper_ob.LNAME, helper_ob.DATE, helper_ob.CATEGORY};
		int[] to = {R.id.tv_fname, R.id.tv_lname, R.id.tv_date, R.id.tv33};
		
		
		cursor = adapter_ob.queryName();
		SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this,
				R.layout.row, cursor, from, to);
		nameList.setAdapter(cursorAdapter);
		nameList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				Bundle passdata = new Bundle();
				Cursor listCursor = (Cursor) arg0.getItemAtPosition(arg2);
				int nameId = listCursor.getInt(listCursor
						.getColumnIndex(helper_ob.KEY_ID));
				// Toast.makeText(getApplicationContext(),
				// Integer.toString(nameId), 500).show();
				passdata.putInt("keyid", nameId);
				Intent passIntent = new Intent(MainActivity.this,
						EditActivity.class);
				passIntent.putExtras(passdata);
				startActivity(passIntent);
			}
		});
		registerBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent registerIntent = new Intent(MainActivity.this,
						RegistrationActivity.class);
				startActivity(registerIntent);
			}
		});

		testBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg1) {
				// TODO Auto-generated method stub
				Intent testIntent = new Intent(MainActivity.this,
						testActivity.class);
				startActivity(testIntent);
			}
		});
		btnSel.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg2) {
				// TODO Auto-generated method stub
				Intent testIntent = new Intent(MainActivity.this,
						SelectionsActivity.class);
				startActivity(testIntent);
			}
		});

		
	}

	@Override
	public void onResume() {
		super.onResume();
		cursor.requery();

	}

}
и адаптер

Код: Выделить всё

public class RegistrationAdapter {
	SQLiteDatabase database_ob;
	RegistrationOpenHelper openHelper_ob;
	Context context;
	String  sPeople = "10";
	String[] cols = null;
    String selection = null;
    String[] selectionArgs = null;
    String groupBy = null;
    String having = null;
    String orderBy = null;
    final String LOG_TAG ="myLogs";
	public RegistrationAdapter(Context c) {
		context = c;
	}

	public RegistrationAdapter opnToRead() {
		openHelper_ob = new RegistrationOpenHelper(context,
				openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
		database_ob = openHelper_ob.getReadableDatabase();
		return this;

	}

	public RegistrationAdapter opnToWrite() {
		openHelper_ob = new RegistrationOpenHelper(context,
				openHelper_ob.DATABASE_NAME, null, openHelper_ob.VERSION);
		database_ob = openHelper_ob.getWritableDatabase();
		return this;

	}

	
	
	public Cursor SelectTest(){	
String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
		openHelper_ob.LNAME, openHelper_ob.DATE, openHelper_ob.CATEGORY, openHelper_ob.TEST };
Log.d(LOG_TAG, "--- Население больше " + sPeople + " ---");
selection = "testValue > ?";
String[] selectionArgs = {"2"};
Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, selection, selectionArgs, null, null,
null);
return c;
	}
	
	
	public void Close() {
		database_ob.close();
	}

	
	public long insertDetails(String fname, String lname, String date, String category, int test) {
		ContentValues contentValues = new ContentValues();
		contentValues.put(openHelper_ob.FNAME, fname);
		contentValues.put(openHelper_ob.LNAME, lname);
		contentValues.put(openHelper_ob.DATE, date);
		contentValues.put(openHelper_ob.CATEGORY, category);
		contentValues.put(openHelper_ob.TEST, test);
		
		opnToWrite();
		long val = database_ob.insert(openHelper_ob.TABLE_NAME, null,
				contentValues);
		Close();
		return val;

	}

	public Cursor queryName() {
		String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
				openHelper_ob.LNAME, openHelper_ob.DATE, openHelper_ob.CATEGORY, openHelper_ob.TEST };
		opnToWrite();
		Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, null,
				null, null, null, null);
		return c; 
	
	}
	
	public Cursor  Selection() {
	String test = openHelper_ob.TEST;
	selection = "testValue > ?";
	String[] selectionArgs = {"2"};
    Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, null, selection, selectionArgs, null, null,
        null);
    return c;
	}
	
	public Cursor queryAll(int nameId) {
		String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
				openHelper_ob.LNAME, openHelper_ob.DATE, openHelper_ob.CATEGORY, openHelper_ob.TEST };
		opnToWrite();
		Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols,
				openHelper_ob.KEY_ID + "=" + nameId, null, null, null, null);
		return c;
	}

	public long updateldetail(int rowId, String fname, String lname, String date, String category, int test ) {
		ContentValues contentValues = new ContentValues();
		contentValues.put(openHelper_ob.FNAME, fname);
		contentValues.put(openHelper_ob.LNAME, lname);
		contentValues.put(openHelper_ob.DATE, date);
		contentValues.put(openHelper_ob.CATEGORY, category);
		contentValues.put(openHelper_ob.TEST, test);
		opnToWrite();
		long val = database_ob.update(openHelper_ob.TABLE_NAME, contentValues,
				openHelper_ob.KEY_ID + "=" + rowId, null);
		Close();
		return val;
	}

	public int deletOneRecord(int rowId) {
		// TODO Auto-generated method stub
		opnToWrite();
		int val = database_ob.delete(openHelper_ob.TABLE_NAME,
				openHelper_ob.KEY_ID + "=" + rowId, null);
		Close();
		return val;
	}

}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 02 авг 2013, 22:53

на какой?
а, вижу. :roll:
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 02 авг 2013, 22:57

у тебя адаптер и не создается нигде в первом файле, поэтому NPE
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 03 авг 2013, 00:17

можете помочь?)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 03 авг 2013, 00:56

так создай его, ты ж в одной активити создал, а в другой нет.
код для меня слишком странный, поэтому особо нету времени разбираться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 03 авг 2013, 01:17

Код: Выделить всё

String[] from = { helper_ob.FNAME, helper_ob.LNAME, helper_ob.DATE, helper_ob.CATEGORY }; 
        int[] to = { R.id.tv_fname, R.id.tv_lname, R.id.tv_date, R.id.tv33 };
cursor = adapter_ob.SelectTest(); // здесь ошибка 
        SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, 
                R.layout.row, cursor, from, to); 
        lv1.setAdapter(cursorAdapter); 
это в 1 активити

а это во 2

Код: Выделить всё

String[] from = {helper_ob.FNAME, helper_ob.LNAME, helper_ob.DATE, helper_ob.CATEGORY}; 
        int[] to = {R.id.tv_fname, R.id.tv_lname, R.id.tv_date, R.id.tv33}; 
        cursor = adapter_ob.queryName(); 
        SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, 
                R.layout.row, cursor, from, to); 
        nameList.setAdapter(cursorAdapter); 
вроде в обоих создаю же

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 03 авг 2013, 01:42

создать, это значит
adapter_ob = new...
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 03 авг 2013, 09:41

Спасибо :oops:
но теперь вылетает другой НПЕ а где не могу понять т.к строку не показывает эклипс

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 03 авг 2013, 19:19

не может этого быть.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 03 авг 2013, 23:01

08-03 20:00:44.705: D/myLogs(420): --- Население больше 10 ---
08-03 20:00:44.715: D/AndroidRuntime(420): Shutting down VM
08-03 20:00:44.715: W/dalvikvm(420): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-03 20:00:44.745: E/AndroidRuntime(420): FATAL EXCEPTION: main
08-03 20:00:44.745: E/AndroidRuntime(420): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arun.registrationform/com.arun.registrationform.SelectionsActivity}: java.lang.NullPointerException
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.os.Handler.dispatchMessage(Handler.java:99)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.os.Looper.loop(Looper.java:123)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-03 20:00:44.745: E/AndroidRuntime(420): at java.lang.reflect.Method.invokeNative(Native Method)
08-03 20:00:44.745: E/AndroidRuntime(420): at java.lang.reflect.Method.invoke(Method.java:507)
08-03 20:00:44.745: E/AndroidRuntime(420): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-03 20:00:44.745: E/AndroidRuntime(420): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-03 20:00:44.745: E/AndroidRuntime(420): at dalvik.system.NativeStart.main(Native Method)
08-03 20:00:44.745: E/AndroidRuntime(420): Caused by: java.lang.NullPointerException
08-03 20:00:44.745: E/AndroidRuntime(420): at com.arun.registrationform.RegistrationAdapter.SelectTest(RegistrationAdapter.java:49)
08-03 20:00:44.745: E/AndroidRuntime(420): at com.arun.registrationform.SelectionsActivity.onCreate(SelectionsActivity.java:38)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-03 20:00:44.745: E/AndroidRuntime(420): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 04 авг 2013, 00:06

ну вот же, сюда два раза щелкай
08-03 20:00:44.745: E/AndroidRuntime(420): at com.arun.registrationform.RegistrationAdapter.SelectTest(RegistrationAdapter.java:49)
это же твой код?
а вызывается он с этой строчки
at com.arun.registrationform.SelectionsActivity.onCreate(SelectionsActivity.java:38)
ну это типа вложения.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 05 авг 2013, 22:59

Код: Выделить всё

	public Cursor SelectTest(){	
		opnToWrite();
String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
		openHelper_ob.LNAME, openHelper_ob.DATE, openHelper_ob.CATEGORY, openHelper_ob.TEST };
Log.d(LOG_TAG, "--- Население больше " + sPeople + " ---");
selection = "openHelper_ob.LNAME > ?";
String[] selectionArgs = {"2"};
Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, selection, selectionArgs, null, null,
null);
return c;
	}
08-05 19:56:54.516: E/AndroidRuntime(335): FATAL EXCEPTION: main
08-05 19:56:54.516: E/AndroidRuntime(335): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arun.registrationform/com.arun.registrationform.SelectionsActivity}: android.database.sqlite.SQLiteException: no such column: openHelper_ob.LNAME: , while compiling: SELECT _id, F_NAME, L_NAME, D_ATE, C_ATEGORY, T_EST FROM REGISTRATION_TABLE WHERE openHelper_ob.LNAME > ?

Помогите плз. дб версию менял

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 06 авг 2013, 00:07

ну пишет, что нет у тебя такой колонки LNAME в таблице openHelper_ob
может и вправду нету? а как по мне так странное название таблиц у тебя..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 06 авг 2013, 08:32

получилось. foenix спасибо за помощь)

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 08 авг 2013, 00:53

Нужно организовать выборку из бд по дате. тоесть я сделал так что если дата строки в БД совпадает с сегодняшним днем то выводит в листвью.
Можно ли как то сделать что будет выбираться значение даты которое я укажу в дэйтпикер или чем то подобным, сравнивать со значением строки БД и если совпадает то выводить в листвью. или может быть можно организовать выборку по нескольким параметрам

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 08 авг 2013, 12:40

я спросонья плохо соображаю такие длинные предложения, если ты перефразируешь попроще, то помогу
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 08 авг 2013, 12:48

вообщем мне нужно из базы данных делать выборку по дате которую я буду указывать например через датапикер(если это возможно) или будет несколько полей ввода (день месяц год). БД проверяем если то что я указал совпадает с тем что в таблице то выводится через адаптер. я смог реализовать только так что у меня при создании новой записи в таблицу в одно из значений закидывается вот
это значение

Код: Выделить всё

SimpleDateFormat sdf = new SimpleDateFormat("dd  MMMMM");
			    String dateValue = sdf.format(new Date(System.currentTimeMillis()));
contentValues.put(openHelper_ob.DATE, date);

потом

Код: Выделить всё

public Cursor SelectTest(String test1){	
		opnToWrite();
String[] cols = { openHelper_ob.KEY_ID, openHelper_ob.FNAME,
		openHelper_ob.LNAME , openHelper_ob.DATE, openHelper_ob.CATEGORY};

String selection = "DATE = ?";
String[] selectionArgs = {test1};
Cursor c = database_ob.query(openHelper_ob.TABLE_NAME, cols, selection, selectionArgs, null, null, null);

return c;
}
а вот я в мейнактивити делаю выборку и если сегодняшняя дата совпадает с той что в таблице выводит.

Код: Выделить всё

SimpleDateFormat sdf = new SimpleDateFormat("dd  MMMMM");
	    String date2 = sdf.format(new Date(System.currentTimeMillis()));

		
		cursor = adapter_ob.SelectTest(date2);

похоже я опять плохо объяснил)

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 08 авг 2013, 13:23

угу, плохо :(
Давай я по-своему объясню.

1. Большое значение имеет, в каком виде ты хранишь в таблице дату.
Можно два варианта - либо в кол-ве секунд от даты начала времен :) (надеюсь ты знаешь что я имею ввиду)
либо в формате более читаемом (я так делаю, но тут щас прибегут возмущаться) "20130431", т.е. YYYYMMDD
2. Выборку делаем такую
select * from table where date BETWEEN date1 and date2
"x BETWEEN y AND z" эквивалетно "x>=y AND x<=z"
и соответствено использую rawquery.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

antonbright
Сообщения: 56
Зарегистрирован: 24 июн 2013, 18:50

Re: Выборка из БД

Сообщение antonbright » 08 авг 2013, 14:05

а как реализовать выбор даты тоесть я хочу чтобы пользователь каким то образом вводил период за который ему выводился отчет

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Выборка из БД

Сообщение Foenix » 08 авг 2013, 14:09

через диалог-фрагмент.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить