FoodAdditivesAppActivity.java向AccuratelySearch.java传值
输入框中输入的数值与获取的数值是正确的,
但是在数据库中搜索模糊搜查中文时,无法搜到。
查询数字和英文可以。
SQL语句:
sql = "Select name,norm From additive Where name Like '%" + value+ "%' ";
value为输入框中输入的数值,经log.e("value",value)检验传入值正确
数据库为SQLITE

解决方案 »

  1.   

    有这种可能,android上层应用中文是utf编码,而数据库中则是GBK,两种编码英文与数字都是ASCII过来的,编码一样,可以查到,汉字编码就不一样了
      

  2.   

    temp = new String (value.getBytes(),"UTF-8");可是我经过转码之后在数据库里面搜查一样搜查不到,
    各种编码都试过了
      

  3.   


    package com.Food.app;import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    import android.app.Activity;import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;public class AccuratelySearch extends Activity {
    private SQLiteDatabase db;
    private String sql, value,temp; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
    setContentView(R.layout.classfyresult); db = SQLiteDatabase.openOrCreateDatabase(DBManager.DB_PATH + "/"
    + DBManager.DB_NAME, null);
    value = (String) getIntent().getSerializableExtra("value");

    try {
    temp = new String (value.getBytes(),"UTF-8");
    } catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }

    sql = "Select name,norm From additive Where name Like '%" +temp+ "%' ";



    //检测传入的值
    Log.e("sql", sql);
    Cursor c = db.rawQuery(sql, null);
    c.moveToFirst();
    ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
    Map<String, Object> item;
    for (int i = 0; i < c.getCount(); i++) {
    item = new HashMap<String, Object>();
    try {
    item.put("name", new String(c.getBlob(0), "GBK"));
    item.put("norm", new String(c.getBlob(1), "GBK"));
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    data.add(item);
    c.moveToNext();
    }
    c.close();
    db.close();
    ListView mListView01 = new ListView(this);
    SimpleAdapter adapter = new SimpleAdapter(this, data,
    R.layout.classfyresult, new String[] { "name", "norm" },
    new int[] { R.id.TextView01, R.id.TextView02 });
    mListView01.setAdapter(adapter);
    setContentView(mListView01); }
    }
      

  4.   

    按理说是没问題
    不过我上网查了一下
    lz可以看一下
    http://bbs.9ria.com/thread-16890-1-1.html
    上面说sqlite汉字存储虽然是utf,但却是1个字6个字节,如果取的时候按6个字节取则会出乱码.
    希望对lz有帮助
      

  5.   

    我也是碰到这个问题了。
        在adb shell中 用这个语句可以查出,但是在代码执行中查不到数据,我很蛋疼。然后网上搜了一下,有人这样说
    ------>查询语句改为"SELECT * FROM table WHERE column LIKE N'%内容%'",中文模糊查询成功!我试了一下,貌似不行。adb shell中不行,加N出错。代码中也是不行。
      

  6.   

    不要用'%" + value+ "%' "的方式。试试使用'%" + ? + "%' " 的方式。