Java 如何在SQL中不使用位置进行搜索?

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

我的代码有问题,因为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 = 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();
    }
});