Android Select语句工作不正常

Android Select语句工作不正常,android,sqlite,Android,Sqlite,我有一个由两个按钮和一个文本视图组成的应用程序 btnisert:当用户单击此按钮时,将执行insert语句 btnShow:将执行select语句,结果显示在文本视图中 问题如下。我正在使用AsyncTask执行写/读操作。我创建了两个独立的异步任务,一个用于阅读,一个用于写作。insert(Write Async)工作正常,我确信这些值正在被插入,因为如果我运行同一insert语句两次,就会出现主键冲突错误: 07-19 11:46:48.080: E/AndroidRuntime(21

我有一个由两个按钮和一个文本视图组成的应用程序

  • btnisert
    :当用户单击此按钮时,将执行insert语句

  • btnShow
    :将执行select语句,结果显示在文本视图中

问题如下。我正在使用AsyncTask执行写/读操作。我创建了两个独立的异步任务,一个用于阅读,一个用于写作。insert(Write Async)工作正常,我确信这些值正在被插入,因为如果我运行同一insert语句两次,就会出现主键冲突错误:

07-19 11:46:48.080: E/AndroidRuntime(21486): FATAL EXCEPTION: main
07-19 11:46:48.080: E/AndroidRuntime(21486): android.database.sqlite.SQLiteConstraintException: PRIMARY KEY must be unique (code 19)
这就是问题所在。显然,当我运行Select语句(通过单击按钮)时,所有操作都正常执行,但是得到的不是值,而是
com.example.testdb.MainActivity$Select@4203e900

有人知道问题是什么吗?这很烦人,我不知道我做错了什么。请看一下我的代码:

public class MainActivity extends Activity 
{
static DatabaseImplementation db;
static SQLiteDatabase dbWrite;
static SQLiteDatabase dbRead;

static String insert = "INSERT INTO tbl_Test VALUES(7, 'Test');";
static String select = "SELECT test FROM tbl_Test WHERE _id = 1;";

Button btnInsert;
Button btnShow;
static TextView txtView;

//static String name = "";


@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    db = new DatabaseImplementation(this);
    dbWrite = db.getWritableDatabase();
    dbRead = db.getReadableDatabase();

    txtView = (TextView)findViewById(R.id.txtView);

    btnInsert = (Button)findViewById(R.id.btnInsert);
    btnInsert.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v)
        {
            new Insert().execute();
        }
    });

    btnShow = (Button)findViewById(R.id.btnShow);
    btnShow.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) 
        {
             AsyncTask<String, Void, String> n = new Select().execute();
             txtView.setText(n.toString());
        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

//INSERT ASYNC
private class Insert extends AsyncTask<String, Void, String>
{       
    @Override
    protected String doInBackground(String... params)
    {

        //Connect to Database First.
        try
        {       
            //String insert = executeInsert();
            //onPostExecute(insert);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) 
    {

        //Connect to Database First.
        dbWrite.execSQL(insert);
    }


}

//SELECT ASYNC
private class Select extends AsyncTask<String, Void, String>
{
    @Override
    protected String doInBackground(String... params)
    {
        try
        {
            dbWrite = db.getWritableDatabase();
            Cursor c = dbWrite.rawQuery(select, null);

            String name = "";
            c.moveToFirst();
            name = c.getString(0);

            return name;

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) 
    {

    }   
}
公共类MainActivity扩展活动
{
静态数据库实现数据库;
静态sqlitedbwrite数据库;
静态sqlitedbread数据库;
静态字符串insert=“插入tbl_测试值(7,'测试');”;
静态字符串select=“从tbl_测试中选择测试,其中_id=1;”;
按钮BTN插入;
按钮显示;
静态文本视图txtView;
//静态字符串名称=”;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db=新数据库实现(本);
dbWrite=db.getWritableDatabase();
dbRead=db.getReadableDatabase();
txtView=(TextView)findViewById(R.id.txtView);
btnisert=(按钮)findViewById(R.id.btnisert);
btnInsert.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
新的Insert().execute();
}
});
btnShow=(按钮)findViewById(R.id.btnShow);
btnShow.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
AsyncTask n=new Select().execute();
setText(n.toString());
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单)
{
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
//插入异步
私有类插入扩展异步任务
{       
@凌驾
受保护的字符串doInBackground(字符串…参数)
{
//首先连接到数据库。
尝试
{       
//String insert=executeInsert();
//onPostExecute(插入);
}
捕获(例外e)
{
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
//首先连接到数据库。
dbWrite.execSQL(insert);
}
}
//选择异步
私有类选择扩展异步任务
{
@凌驾
受保护的字符串doInBackground(字符串…参数)
{
尝试
{
dbWrite=db.getWritableDatabase();
游标c=dbWrite.rawQuery(select,null);
字符串名称=”;
c、 moveToFirst();
name=c.getString(0);
返回名称;
}
捕获(例外e)
{
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{
}   
}
}


如果有人能帮助我,我将不胜感激。

这与数据库无关,只是这两行:

AsyncTask<String, Void, String> n = new Select().execute();
txtView.setText(n.toString());

并从onClick处理程序中删除行
txtView.setText(n.toString());

您考虑过使用ORM吗?这种数据库访问对我来说非常不稳定。我应该找个时间试试,谢谢您的建议!效果很好!非常感谢!
@Override
protected void onPostExecute(String result) 
{
    txtView.setText(result);
}