当前位置: 首页 > 知识库问答 >
问题:

在SQLite数据库中搜索和显示条目

薄腾
2023-03-14

因此,我最近开始学习Android编程,并一直在学习本教程,学习如何在SQLite数据库中插入、更新、删除和查看数据。现在,我还想在这个SQLite数据库中添加一个搜索功能,在这个数据库中,我可以搜索一个名称(我使用的列是name、contact和DOB),如果搜索到的名称与数据库中现有的名称匹配,则在应用程序中显示数据库中的一行/条目。我想这可以以类似于查看/更新数据库的方式来完成,所以我试着用这些作为参考来提出一个解决方案,然而,在尝试了大量对我来说似乎合理的方式之后,我仍然没有得到它的工作,所以我非常感谢任何与此相关的帮助!我觉得我的一些尝试很接近,但是逻辑上的一些东西没有完全点击。

mainactivity.java:

package com.example.sqliteapplication;

import ...

public class MainActivity extends AppCompatActivity {



EditText name, contact, dob;
Button insert, update, delete, view, search;
DBHelper DB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

 
    name = findViewById(R.id.name);
    contact = findViewById(R.id.contact);
    dob = findViewById(R.id.dob);
    insert = findViewById(R.id.btnInsert);
    update = findViewById(R.id.btnUpdate);
    delete = findViewById(R.id.btnDelete);
    view = findViewById(R.id.btnView);
    search = findViewById(R.id.btnSearch);
    DB = new DBHelper(this);

   
    insert.setOnClickListener(new View.OnClickListener() {

       
        @Override
        public void onClick(View view) {
            String nameTXT = name.getText().toString();
            String contactTXT = contact.getText().toString();
            String dobTXT = dob.getText().toString();

            Boolean checkinsertdata = DB.insertuserdata(nameTXT, contactTXT, dobTXT);
            
            if(checkinsertdata==true)
                Toast.makeText(MainActivity.this, "New Entry Inserted", Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(MainActivity.this, "New Entry Not Inserted", Toast.LENGTH_SHORT).show();
        }        });
    

    update.setOnClickListener(new View.OnClickListener() {

       
        @Override
        public void onClick(View view) {
            String nameTXT = name.getText().toString();
            String contactTXT = contact.getText().toString();
            String dobTXT = dob.getText().toString();

            Boolean checkupdatedata = DB.updateuserdata(nameTXT, contactTXT, dobTXT);
          
            if(checkupdatedata==true)
                Toast.makeText(MainActivity.this, "Entry Updated", Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(MainActivity.this, "New Entry Not Updated", Toast.LENGTH_SHORT).show();
        }        });

    
    delete.setOnClickListener(new View.OnClickListener() {

       
        @Override
        public void onClick(View view) {
            String nameTXT = name.getText().toString();
            Boolean checkudeletedata = DB.deletedata(nameTXT);
           
            if(checkudeletedata==true)
                Toast.makeText(MainActivity.this, "Entry Deleted", Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(MainActivity.this, "Entry Not Deleted", Toast.LENGTH_SHORT).show();
        }        });

    
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Cursor res = DB.getdata();
            if(res.getCount()==0){
                Toast.makeText(MainActivity.this, "No Entry Exists", Toast.LENGTH_SHORT).show();
                return;
            }

          
            StringBuffer buffer = new StringBuffer();
            while(res.moveToNext()){
                buffer.append("Name :"+res.getString(0)+"\n");
                buffer.append("Contact :"+res.getString(1)+"\n");
                buffer.append("Date of Birth :"+res.getString(2)+"\n\n");
            }
            
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setCancelable(true);
            builder.setTitle("User Entries");
            builder.setMessage(buffer.toString());
            builder.show();
        }        });


  }

}

dbhelper.java:

package com.example.sqliteapplication;

import ...

public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {

    super(context, "Userdata.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase DB) {
    
    DB.execSQL("create Table Userdetails(name TEXT primary key," +
            "contact TEXT, dob TEXT)");
}

@Override
public void onUpgrade(SQLiteDatabase DB, int oldVersion, int newVersion) {
    DB.execSQL("drop Table if exists Userdetails");
}


public Boolean insertuserdata(String name, String contact, String dob) {
    
    SQLiteDatabase DB = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put("name", name);
    contentValues.put("contact", contact);
    contentValues.put("dob", dob);


    long result = DB.insert("Userdetails",
            null, contentValues);
    
    if (result == -1) {
        return false;
    } else {
        return true;
    }
}

public Boolean updateuserdata(String name, String contact, String dob) {
    
    SQLiteDatabase DB = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put("contact", contact);
    contentValues.put("dob", dob);
    
    Cursor cursor = DB.rawQuery(
            "Select * from Userdetails where name = ?", new String[]{name});

    
    if (cursor.getCount() > 0) {
   

        long result = DB.update("Userdetails",
                contentValues, "name=?",
                new String[]{name});
        
        if (result == -1) {
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }

}

public Boolean deletedata(String name) {
    
    SQLiteDatabase DB = this.getWritableDatabase();

    
    Cursor cursor = DB.rawQuery(
            "Select * from Userdetails where name = ?", new String[]{name});

   
    if (cursor.getCount() > 0) {
       

        long result = DB.delete("Userdetails", "name=?",
                new String[]{name});
      
        if (result == -1) {
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    }
}


public Cursor getdata () {
    
    SQLiteDatabase DB = this.getWritableDatabase();

    
    Cursor cursor = DB.rawQuery(
            "Select * from Userdetails ", null);
    return cursor;

}

}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context=".MainActivity">

<TextView
    android:id="@+id/texttitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Please enter details below"
    android:textSize="24dp"
    android:layout_marginTop="20dp"
    />

<EditText
    android:id="@+id/name"
    android:hint="Name"
    android:textSize="24dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/texttitle"
    android:inputType="textPersonName"
    />

<EditText
    android:id="@+id/contact"
    android:hint="Contact"
    android:textSize="24dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/name"
    android:inputType="number"
    />

<EditText
    android:id="@+id/dob"
    android:hint="Date of Birth"
    android:textSize="24dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/contact"
    android:inputType="number"
    />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnInsert"
    android:textSize="24dp"
    android:text="Insert New Data"
    android:layout_marginTop="30dp"
    android:layout_below="@+id/dob"
    />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnUpdate"
    android:textSize="24dp"
    android:text="Update Data"
    android:layout_below="@+id/btnInsert"
    />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnDelete"
    android:textSize="24dp"
    android:text="Delete Data"
    android:layout_below="@+id/btnUpdate"
    />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnView"
    android:textSize="24dp"
    android:text="View Data"
    android:layout_below="@+id/btnDelete"
    />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/btnSearch"
    android:textSize="24dp"
    android:text="Search Data"
    android:layout_below="@+id/btnView"
    />


</RelativeLayout>

对于一些不好的解释/一些没有意义的东西,我只是几个星期的时间,有很多东西要学,这是肯定的!谢谢

共有1个答案

湛骏祥
2023-03-14

在dbhelper.java中添加:

public Cursor getDataByName(String name){
    SQLiteDatabase db = this.getWritableDatabase();
    return db.rawQuery("SELECT * FROM Userdetails WHERE name LIKE '%"+name+"'%", null);
}

在mainactivity.java中:

添加新的全局EditText:

EditText name, contact, dob, **search**;

onCreate()添加:

search.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        searchInDatabase();
    }
}

在mainactivity.java的某个地方添加这个新方法。

private void searchInDatabaseByName(){
    Cursor res = DB.getDataByName(name);
    if(res.getCount()==0){
        Toast.makeText(MainActivity.this, "No Entry Exists", Toast.LENGTH_SHORT).show();
        return;
    }

    Cursor res = DB.getdata();
    if(res.getCount()==0){
        Toast.makeText(MainActivity.this, "No Entry Exists", Toast.LENGTH_SHORT).show();
        return;
    }

  
    StringBuffer buffer = new StringBuffer();
    while(res.moveToNext()){
        buffer.append("Name :"+res.getString(0)+"\n");
        buffer.append("Contact :"+res.getString(1)+"\n");
        buffer.append("Date of Birth :"+res.getString(2)+"\n\n");
    }
    
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    builder.setCancelable(true);
    builder.setTitle("User Entries");
    builder.setMessage(buffer.toString());
    builder.show();
}

现在的解释是:

在sqlite中,可以使用LIKE关键字查询数据。例如,为了查找可以查询的名称为“Bob”的所有行

SELECT * FROM Userdetails WHERE name LIKE '%Bob%'

然后,返回的游标将包含名称为Bob的所有行。

然后,我们添加了另一个EditText变量来搜索(您还需要将其添加到main_activity.xml中)。

现在,您可以使用它键入您想要搜索的名称,然后单击“search”按钮,它将调用“search InDatabaseByName”方法,该方法的操作与您的“View”按钮完全相同,但只是转到我们的新DBHelper方法“Get DatabyName”。

请注意,建议让DBHelper完成获取实际数据的所有工作(这意味着它将获取游标并解析它)

您可能希望为用户实体创建一个模型类。然后database方法将返回一个用户的arraylist,以后在对话框中(或者更好的是在ListView中)显示它会更容易

 类似资料:
  • 被一个问题缠住了。我是android开发的新手。我的问题是我有一个SQLite数据库,我正在其中保存映像和一些数据,但当我检索这些数据时,映像没有显示在ListView中。其他数据正在被推翻。 这是我的自定义列表布局 null 这是我的自定义适配器 } 这是activity 这是数据列表

  • 问题内容: 因此,我有一个名为“ users。”的表的数据库。在该表中有一列名为“ IP”的列,我想查找具有相同IP的用户并将其禁止。 问题答案: 您应该利用查询分组。我写的一个老博客是《理解群居法》 但基本上这应该工作: 这将返回计数> 1的所有IP地址

  • 我想在我的应用程序中显示来自sqlite数据库的图像。我的要求是显示文本视图及其相关图像。我将我的数据库文件保存在资产文件夹中。但实际上我的图像存储在服务器的“allimages”文件夹中。 我的数据库列(我保留的assets文件夹中的db)如下所示: S.无描述 1 div style=“文本对齐:对齐;” 2 div style="文本对齐:对齐;" 现在我的问题是在我的数据库中,图像路径存储

  • 问题内容: 我想使用jQuery / Java脚本搜索并突出显示文本。 示例HTML 1: 当我搜索字符串“ Good Morning”时,div1和div3中的内容都应突出显示。即。输出html应该是 我使用了插件https://raw.github.com/bartaz/sandbox.js/master/jquery.highlight.js将搜索到的内容包含在span中。但是只有div3高

  • 我怀疑原因可能是在ViewHolder中连接字符串,根据我所读到的(检查底部的引用),这应该使用带有占位符的资源字符串来完成,例如 应替换为 其中包括。 https://developer.android.com/guide/topics/resources/string-resource#formattingandstyling https://developer.android.com/ref

  • 问题内容: 大家好,我需要您的帮助。我在应用程序中创建SQLite数据库,然后将数据插入其中。现在我想从中检索数据,但我只想插入一个数据并检索它,然后将其显示在TextView中。 请帮助我,这是我第一次使用SQLite数据库。 问题答案: 这是我如何实现此目标的示例。 在这个例子中,我会,,和一个学生的名字和年龄。 首先创建一个类,我叫我的 DBManager.java 然后创建一个我叫我的 S