Java 如何在SQL中不使用位置进行搜索?
我的代码有问题,因为ListView存储的项目如下:Java 如何在SQL中不使用位置进行搜索?,java,android,sql,Java,Android,Sql,我的代码有问题,因为ListView存储的项目如下: Item 1 - position 0 Item 2-position 1 ... Item 1 - position 0 ->search for data which have ID 1 Item 2 - deleted Item 3 - position 1 ->search for data which have ID 2 --> the problem is that it should look for ID
Item 1 - position 0
Item 2-position 1
...
Item 1 - position 0 ->search for data which have ID 1
Item 2 - deleted
Item 3 - position 1 ->search for data which have ID 2 --> the problem is that it should look for ID = 3, but the position is confusing.
问题是,当我删除一个项目时,我正在使用他的位置在数据库中搜索ID。例如:
Item 1 - position 0 ->search for data which have ID 1 (is position + 1)
Item 2 - position 1 ->search for data which have ID 2 (is position + 1)
and so on...
它第一次起作用。但在我删除一个项目后,它将如下所示:
Item 1 - position 0
Item 2-position 1
...
Item 1 - position 0 ->search for data which have ID 1
Item 2 - deleted
Item 3 - position 1 ->search for data which have ID 2 --> the problem is that it should look for ID = 3, but the position is confusing.
想法?当我按下该项时,我正在考虑从数据库中获取ID,但我不知道怎么做。
最终结果应如下所示:
Item 1 - ID 1 - search data with ID1
Item 2 - deleted
Item 3 - ID 3 - search for data with ID3
代码:
getSpecificData中的代码:
public Cursor getSpecificData(int id){
SQLiteDatabase db = this. getWritableDatabase();
Cursor data = db.rawQuery("SELECT * FROM "+ TableName + " WHERE ID ="+id, null);
return data;
}
主要活动-所有代码:
package com.example.schoolbox;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.app.ActivityOptions;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
TextView addColegButton, deleteAllColegiButton, helloTextView;
ListView colegiListView;
DatabaseHelper mDatabase = new DatabaseHelper(this);
ArrayList<coleg> ColegiList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String last_name, first_name, email, label;
int number;
helloTextView = findViewById(R.id.bunaTextView);
addColegButton = findViewById(R.id.textView3);
deleteAllColegiButton = findViewById(R.id.textViewMinus);
colegiListView=findViewById(R.id.ListView);
deleteAllColegiButton = findViewById(R.id.textViewMinus);
//Set the helloTextView value
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
if (hour >= 12 && hour <= 18) {
helloTextView.setText(R.string.bună);
helloTextView.setTextSize(43);
}
if (hour >= 18 && hour <= 24) {
helloTextView.setText(R.string.bunăSeara);
helloTextView.setTextSize(39);
}
if (hour >= 0 && hour <= 12) {
helloTextView.setText(R.string.bunăDimi);
helloTextView.setTextSize(36);
}
//fill the ColegiListView
Cursor data = mDatabase.getData();
while(data.moveToNext()){
coleg coleg = new coleg(data.getString(1),data.getString(2),data.getString(3),Integer.parseInt(data.getString(4)));
ColegiList.add(coleg);
}
//Declare ColegiList and set adapter
ColegListAdapter adapter = new ColegListAdapter(this, R.layout.list_item_layout, ColegiList);
colegiListView.setAdapter(adapter);
//Set the OnItemClick
colegiListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(MainActivity.this, ColegDataEditActivity.class);
intent.putExtra("Id", Integer.parseInt(Long.toString(id)));
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
}
});
//plusButton
addColegButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, ColegInfoActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this).toBundle());
}
});
//Declare DeleteAllButton
deleteAllColegiButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage(R.string.deleteClassmates);
builder.setPositiveButton(R.string.positiveDialogButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mDatabase.deleteData();
Intent intent = getIntent();
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
});
builder.setNegativeButton(R.string.negativeDialogButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create().show();
}
});
}
}
package com.example.schoolbox;
导入androidx.appcompat.app.appcompat活动;
导入android.app.Activity;
导入android.app.ActivityOptions;
导入android.app.AlertDialog;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ListView;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.Calendar;
公共类MainActivity扩展了AppCompatActivity{
TextView添加ColegButton、DeleteAllColegButton、helloTextView;
ListView-ColeglistView;
DatabaseHelper mDatabase=新的DatabaseHelper(此);
ArrayList coleglist=新ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串姓氏、名、电子邮件、标签;
整数;
helloTextView=findViewById(R.id.bunaTextView);
addColegButton=findViewById(R.id.textView3);
deleteAllColegiButton=findViewById(R.id.textViewMinus);
colegiListView=findviewbyd(R.id.ListView);
deleteAllColegiButton=findViewById(R.id.textViewMinus);
//设置helloTextView值
日历=Calendar.getInstance();
int hour=calendar.get(calendar.hour/OF\u DAY);
如果(小时>=12&&hour=18&&hour=0&&hour,您可以首先从数据库中获取要显示的项目列表,然后用项目数据填充ListView
(下面的示例代码可能不完全适合您的实现,但应该给出如何工作的想法。)
项目列表可能如下所示(您应该更改它以从数据库获取数据,如果不想显示其他数据,只需获取ID):
final List items=new ArrayList();
增加(新的第(1)项,“第1项”);
增加(新的第(3)项,“第3项”);
增加(新的第(4)项,“第4”项);
然后,您可以通过如下设置适配器来显示列表中的项目(您应该根据需要更改布局/文本视图):
ListAdapter ListAdapter=new ArrayAdapter(这个,R.layout.activity\u main,R.id.textView,items);
setAdapter(listAdapter);
当用户单击某个项目时,您可以从带有位置的列表中获取该项目。然后您可以读取该项目的id,并在获取该项目的特定数据时使用该id
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Item item = items.get(position);
int itemId = item.getId();
Toast.makeText(getApplicationContext(), "Clicked on id " + itemId, Toast.LENGTH_SHORT).show();
}
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Item=items.get(位置);
int itemId=item.getId();
Toast.makeText(getApplicationContext(),“单击id”+itemId,Toast.LENGTH\u SHORT).show();
}
});
当项目添加到另一个活动中时,您可以为结果启动“添加项目”活动。然后,当用户从添加项目的活动返回时,您可以在主活动中执行代码
当用户从additem活动返回时,可以通过再次执行SELECT查询并用新数据更新ListView来重新加载项目列表
有关启动活动以获取结果的更多信息,请参见此处:
您可以先从数据库中获取要显示的项目列表,然后用项目数据填充ListView
(下面的示例代码可能不完全适合您的实现,但应该给出如何工作的想法。)
项目列表可能如下所示(您应该更改它以从数据库获取数据,如果不想显示其他数据,只需获取ID):
final List items=new ArrayList();
增加(新的第(1)项,“第1项”);
增加(新的第(3)项,“第3项”);
增加(新的第(4)项,“第4”项);
然后,您可以通过如下设置适配器来显示列表中的项目(您应该根据需要更改布局/文本视图):
ListAdapter ListAdapter=new ArrayAdapter(这个,R.layout.activity\u main,R.id.textView,items);
setAdapter(listAdapter);
当用户单击某个项目时,您可以从带有位置的列表中获取该项目。然后您可以读取该项目的id,并在获取该项目的特定数据时使用该id
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Item item = items.get(position);
int itemId = item.getId();
Toast.makeText(getApplicationContext(), "Clicked on id " + itemId, Toast.LENGTH_SHORT).show();
}
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Item=items.get(位置);
int itemId=item.getId();
Toast.makeText(getApplicationContext(),“单击id”+itemId,Toast.LENGTH\u SHORT).show();
}
});
当项目添加到另一个活动中时,您可以为结果启动“添加项目”活动。然后,当用户从添加项目的活动返回时,您可以在主活动中执行代码
当用户从additem活动返回时,可以通过再次执行SELECT查询并用新数据更新ListView来重新加载项目列表
有关启动活动以获取结果的更多信息,请参见此处:
我知道您想做什么,但问题出在您编写的第一段代码中。项目已创建
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Item item = items.get(position);
int itemId = item.getId();
Toast.makeText(getApplicationContext(), "Clicked on id " + itemId, Toast.LENGTH_SHORT).show();
}
});