2011-12-14 68 views
2

我有一个嵌入式数据库与我的应用程序。它位于资产文件夹中。用户应该可以在点击按钮时将新行添加到数据库中。我有下面的代码: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期间,我没有得到任何异常。任何人都可以告诉为什么编辑文本的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

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(); 

,它显示了从原始数据库最后插入的MAC地址。原始嵌入式数据库将此列声明为Text(所以这意味着Text = Sqliteman中的CharSequence)。我预期的MAC地址是用户最后输入的MAC地址。这个来自editmac视图的mac地址被转换为String。所以,必须将其作为字符串检索,而不是CharSequence。再次感谢Guillaume的帮助,指导我解决问题。

+0

检查KEY_column1的数据类型与KEY_column2的数据类型是否相同 – 2011-12-14 11:20:18

+0

您可以检查值 - >如果为空或不是Log.i(“debug”,editmacs); – Dezigo 2011-12-14 11:24:24

回答

0

你的代码没有问题,它应该在列中插入传入的值。

尽量确保你有一个值,通过添加某种调试警报,像吐司:

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

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

您确定editmac已从正确的视图正确初始化?