Getting a unique row in SQLite

丶灬走出姿态 提交于 2019-12-11 18:58:26

问题


I am trying to search an item in sqlite by using String, & trying to return description contained in that row. items are stored in the table named Articles with column name A_name, Description column name is AS_name

This is my code, the cursor is not null, but the while loop is not getting executed once

public String searchData(String text)
{
    Cursor cursor = sdb.query("Articles", new String[] {"A_name","AS_name"}, " A_name=?",new String[]{text}, null, null, null);

     Log.e("running", "cursor run");


     String temp = null,temp2 = null;
     if(cursor!=null)
     {

         Log.e("running", "curosr is not null");
     while(cursor.moveToFirst())
     {

         Log.e("running", "curosr while loop enter");

          temp =  (cursor.getString(cursor.getColumnIndex("A_name")));
          //temp2 =(cursor.getString(cursor.getColumnIndex("AS_name")));
        Log.e("running", "id  email" +temp+ " name"+temp2);

    }
 }
     return temp;
}

I want to return the corresponding element of AS_name, also I am confused what should I wrote in while loop ?

Can anyone please identify my mistake, Thanks in advance...

UPDATE DBAdapter.java

public class DBAdapter extends SQLiteOpenHelper
{
//CustomAdapter adapter;
static String name = "law6.sqlite";
static String path = "";
static ArrayList<GS> gs;
static SQLiteDatabase sdb;

@Override
public void onCreate(SQLiteDatabase db)
{
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    // TODO Auto-generated method stub
} 

private DBAdapter(Context v) 
{
    super(v, name, null, 1);
    path = "/data/data/" + v.getApplicationContext().getPackageName() + "/databases";
}

public boolean checkDatabase()
{
    SQLiteDatabase db = null;
    try 
    {
        db = SQLiteDatabase.openDatabase(path + "/" + name, null, SQLiteDatabase.OPEN_READONLY);
    } catch (Exception e) 
    {
        e.printStackTrace();
    }
    if (db == null) 
    {
        return false;
    } 
    else
    {
        db.close();
        return true;
    }
}

public static synchronized DBAdapter getDBAdapter(Context v)
{
    return (new DBAdapter(v));
}

public void createDatabase(Context v) 
{
    this.getReadableDatabase();
    try
    {
        InputStream myInput = v.getAssets().open(name);
        // Path to the just created empty db
    String outFileName = path +"/"+ name;
        // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);
        // transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) 
    {
        myOutput.write(buffer, 0, length);
    }
        // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();

    /*  



        InputStream is = v.getAssets().open("quiz.sqlite");
        // System.out.println(is.available());
        System.out.println(new File(path + "/" + name).getAbsolutePath());
        FileOutputStream fos = new FileOutputStream(path + "/" + name);
        int num = 0;
        while ((num = is.read()) > 0) {
            fos.write((byte) num);
        }
        fos.close();
        is.close();*/
    } catch (IOException e) 
    {
        System.out.println(e);
    }
}

public void openDatabase() 
{
    try 
    {
        sdb = SQLiteDatabase.openDatabase(path + "/" + name, null,
                SQLiteDatabase.OPEN_READWRITE);
    } catch (Exception e) 
    {
        System.out.println(e);
    }
}

public ArrayList<GS> getData() 
{
    try{
    Cursor c1 = sdb.rawQuery("SELECT DISTINCT * FROM Articles", null);
    gs = new ArrayList<GS>();
    while (c1.moveToNext())
    {
        GS q1 = new GS();
        q1.setId(c1.getString(0));
        q1.setA_id(c1.getString(1));
        q1.setA_name(c1.getString(2));
        q1.setAS_name(c1.getString(3));
        q1.setDesc_art(c1.getString(4));
    //  q1.setAct(c1.getString(5));
        q1.setExtra(c1.getString(6));
        q1.setPart(c1.getString(7));
        q1.setItalic(c1.getString(8));
        Log.v("AS_name",q1.AS_name);
        gs.add(q1);
    }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return gs;
}

public String searchData(String text)
{
    Cursor cursor = sdb.query("Articles", new String[] {"A_name","AS_name"}, " A_name=?",new String[]{text}, null, null, null);

     Log.e("running", "cursor run");


     String temp = null,temp2 = null;
     if(cursor!=null)
     {

         Log.e("running", "curosr is not null");
        Log.v("", ""+cursor.getCount());
     while(cursor.moveToNext())
     {

         Log.e("running", "curosr while loop enter");

          temp =  (cursor.getString(cursor.getColumnIndex("AS_name")));
         // temp2 =(cursor.getString(cursor.getColumnIndex(name)));
        Log.e("running", "desc" +temp);

    }
 }
     return temp;
}
}

UPDATE after implementing rajaji answer, I got this error :


回答1:


try this it will help you

create the raw query for getting the data

public String searchData(String text)
{
String strvalue=null;
SQliteDatabase db=this.getwritabledatabase();
Cursor cur=null;
String strquery="select * from youurtablename where A_name="+text;
cur=db.rawQuery(strquery,null); 
if(cur!=null&&cur.moveToFirst())
{
do
            {
                strvalue=cur.getString(0);
            }
            while(cur.moveToNext());
}  
}

let me inform once you complete




回答2:


Is your Uri correct??

create Uri depends on your package name and table name, like the code below :

    private static final String AUTHORITY           = "com.sample.test_db_provider";
    private static final String BASE_PATH           = "Tables";
    private static final Uri    Sample_URI  = Uri.parse("content://" + AUTHORITY
                                                        + "/" + BASE_PATH
                                                        + "/SampleTable");

Then in your get Method, query the db like the below code with Uri

cur = m_Resolver.query(Sample_URI, new String[] {"A_name","AS_name"},
                    "SampleTable.A_name = " + text, null, null);
            if(cur != null && cur.moveToFirst())
            {
                do
                {
                    ...
                }
                while(cur.moveToNext());
            }
            cur.close();

I use the inline where clause but you can do it your way with a parameter. Is this what you are looking for?



来源:https://stackoverflow.com/questions/24584122/getting-a-unique-row-in-sqlite

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!