单击按钮时插入sqlite

时间:2011-12-14 11:12:56

标签: android sqlite

我的应用程序有一个嵌入式数据库。它在资产文件夹中。用户应该能够在按钮单击时向数据库添加新行。我有以下代码:

insertrow.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                db.open();
                try
                {
                    String editmacs=editmac.getText().toString();
                    db.insertrow(editmacs); 
                //  Context context = getApplicationContext();

                }
                catch (Exception ex)
                {
                  Toast.makeText(getApplicationContext(), "cannot update", Toast.LENGTH_LONG).show();
                  }
                db.close();
            }
          });

我的SQliteOpenHelper类中的相关方法是:

public static SQLiteDatabase myDb;
public static String DATABASE_TABLE="access_points";
public static final String KEY_column1 = "col1";
public static final String KEY_column2 = "col2";
public static final String KEY_column3= "col3";
public static final String KEY_column4 = "col4";

public long insertrow(String editmacs) 
        {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_column1, editmacs);
            initialValues.put(KEY_column2, "uf");
            initialValues.put(KEY_column3, "ub");
            initialValues.put(KEY_column4, "uz");
            return myDb.insert(DATABASE_TABLE, null, initialValues);
        }

问题是按钮单击editmacs(KEY_column1)未插入数据库。但是插入了其他值(例如“uz”)(我用sql查询测试了插入的值)。在使用buttonpress插入期间,我没有任何异常。谁能说出为什么没有插入来自edittext的editmacs值?提前致谢。

好的,我从Guillaume的评论中得到了解决方案(见下文)。与插入相关的查询都可以。问题出在其他地方。请查看以下代码:

buttonuserentry.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                db.open();
                try
                {
                    String mac = "";
                    mac = db.getuserentry();
                    Context context = getApplicationContext();
                    String text = mac;
                    int duration = Toast.LENGTH_LONG;

                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
                catch (Exception ex)
                {
                    Context context = getApplicationContext();
                    CharSequence text = ex.toString();
                    int duration = Toast.LENGTH_LONG;

                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
                db.close();

            }
        });

之前,我正在使用它:

CharSequence mac = "";    
mac = db.getuserentry();
Context context = getApplicationContext();
String text = mac;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();

因为我使用的是CharSequence,它显示了原始数据库中最后插入的mac地址。原始嵌入式数据库将此列声明为Text(因此在Sqliteman中表示Text = CharSequence)。我期望的mac地址是用户最后输入的mac地址。来自editmac视图的此mac地址将转换为String。因此,必须将其检索为String,而不是CharSequence。再次感谢Guillaume的帮助,指导我解决方案。

1 个答案:

答案 0 :(得分:0)

您的代码没有任何问题,它应该在列中插入传递的值。

尝试通过添加某种调试警报来确保您拥有值,例如Toast:

String editmacs=editmac.getText().toString();
Toast.makeTest(getApplicationContext(), "Value to insert = " + editmacs, Toast.LENGTH_SHORT).show();
db.insertrow(editmacs); 

如果你得到了你期望的价值,请告诉我。如果不是(这是我的猜测),那可能是因为你从错误的TextView中读取了文本值。

您确定从右侧视图中正确初始化了editmac吗?