android sqlite问题

时间:2011-06-19 19:02:55

标签: android sqlite

嘿,我最近开始进行android开发,在从数据库保存/加载数据时遇到了问题。我从here获取了数据库类,稍作修改。

我的问题是我有一些带有一些edittexts的活动。在onCreate中,应将数据库中的字符串写入edittexts,按下该按钮时,应更新数据库中的数据并关闭活动。对于数据库为空的情况,我添加了一个带有cursor.getCount!= 0的if子句来读取数据库,但这种情况永远不会成真。

这是我的代码

package com.gabrielisonline.timetable;

public class DurationActivity extends Activity {

DbAdapter dba;

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

    Button saveButton = (Button) findViewById(R.id.duration_button1);
    saveButton.setOnClickListener(new SaveButtonListener());

    dba = new DbAdapter(this);
    dba.open(); 
    Cursor c = dba.fetchAllDurations();

    if (c.getCount() != 0)  {
        int i = c.getColumnIndex(DbAdapter.KEY_TIME);

        ((EditText) findViewById(R.id.duration_length)).setText(dba.fetchDuration(0).getString(i));
        ((EditText) findViewById(R.id.duration_lesson1)).setText(dba.fetchDuration(1).getString(i));
        ((EditText) findViewById(R.id.duration_lesson2)).setText(dba.fetchDuration(2).getString(i));
        ((EditText) findViewById(R.id.duration_lesson3)).setText(dba.fetchDuration(3).getString(i));
        ((EditText) findViewById(R.id.duration_lesson4)).setText(dba.fetchDuration(4).getString(i));
        ((EditText) findViewById(R.id.duration_lesson5)).setText(dba.fetchDuration(5).getString(i));
        ((EditText) findViewById(R.id.duration_lesson6)).setText(dba.fetchDuration(6).getString(i));
        ((EditText) findViewById(R.id.duration_lesson7)).setText(dba.fetchDuration(7).getString(i));
        ((EditText) findViewById(R.id.duration_lesson8)).setText(dba.fetchDuration(8).getString(i));
        ((EditText) findViewById(R.id.duration_lesson9)).setText(dba.fetchDuration(9).getString(i));
        ((EditText) findViewById(R.id.duration_lesson10)).setText(dba.fetchDuration(10).getString(i));
    }


}

public class SaveButtonListener implements OnClickListener {
    @Override
    public void onClick(View v) {

        String l = ((EditText) findViewById(R.id.duration_length)).getText().toString();
        String l1 = ((EditText) findViewById(R.id.duration_lesson1)).getText().toString();
        String l2 = ((EditText) findViewById(R.id.duration_lesson2)).getText().toString();
        String l3 = ((EditText) findViewById(R.id.duration_lesson3)).getText().toString();
        String l4 = ((EditText) findViewById(R.id.duration_lesson4)).getText().toString();
        String l5 = ((EditText) findViewById(R.id.duration_lesson5)).getText().toString();
        String l6 = ((EditText) findViewById(R.id.duration_lesson6)).getText().toString();
        String l7 = ((EditText) findViewById(R.id.duration_lesson7)).getText().toString();
        String l8 = ((EditText) findViewById(R.id.duration_lesson8)).getText().toString();
        String l9 = ((EditText) findViewById(R.id.duration_lesson9)).getText().toString();
        String l10 = ((EditText) findViewById(R.id.duration_lesson10)).getText().toString(); 

        dba.updateDuration(0,l);
        dba.updateDuration(1,l1);
        dba.updateDuration(2,l2);
        dba.updateDuration(3,l3);
        dba.updateDuration(4,l4);
        dba.updateDuration(5,l5);
        dba.updateDuration(6,l6);
        dba.updateDuration(7,l7);
        dba.updateDuration(8,l8);
        dba.updateDuration(9,l9);
        dba.updateDuration(10,l10);             

        dba.close();

        finish();
    }
}
}

感谢您的帮助!

编辑:

感谢您的回答。问题确实是我没有真正写入数据库的东西。我没有使用updateDuration,而是将onClick方法中的代码更改为:

if (c.getCount() != 0)  {           
dba.updateDuration(1,l);
dba.updateDuration(2,l1);
dba.updateDuration(3,l2);
dba.updateDuration(4,l3);
dba.updateDuration(5,l4);
dba.updateDuration(6,l5);
dba.updateDuration(7,l6);
dba.updateDuration(8,l7);
dba.updateDuration(9,l8);
dba.updateDuration(10,l9);
dba.updateDuration(11,l10); 
} else {
dba.createDuration(l);
dba.createDuration(l1);
dba.createDuration(l2);
dba.createDuration(l3);
dba.createDuration(l4);
dba.createDuration(l5);
dba.createDuration(l6);
dba.createDuration(l7);
dba.createDuration(l8);
dba.createDuration(l9);
dba.createDuration(l10);
}

现在一切正常。我认为更新方法对于第一次写入db也是足够的(createDuration在DbAdapter中调用数据库上的create方法并且updateDuration调用update)。

2 个答案:

答案 0 :(得分:0)

你有没有写过任何东西给DB?你知道DB肯定有数据吗?如果没有尝试安装SQLLite浏览器,例如http://sqlitebrowser.sourceforge.net/,请查看表格。

这应该可以帮助您确定问题是写入表格还是从中读取。如果您提供DBAdapter类

,可能会进一步提供帮助

答案 1 :(得分:0)

如果光标没有获取任何值,则可能意味着数据库没有任何值。我在代码中注意到的一个错误是,在将数据库值放入游标后,您必须调用

c.moveToFirst();

将光标指针移动到第一条记录。如果不移动指针,则默认情况下指向位置-1。只有在那之后才能调用c.getString(1)来获取值。