2011-12-14 7 views
2

내 응용 프로그램에 내장 데이터베이스가 있습니다. 자산 폴더에 있습니다. 사용자는 버튼 클릭시 데이터베이스에 새 행을 추가 할 수 있어야합니다. 나는 다음과 그것을위한 코드가 내 SQliteOpenHelper 클래스에버튼 클릭시 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(); 
      } 
      }); 

및 관련 방법은 다음과 같습니다

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를 사용했기 때문에

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 주소를 표시했다. 원본 임베디드 데이터베이스는이 열을 텍스트로 선언 했으므로 Sqliteman에서 Text = CharSequence를 의미합니다. 내 예상 mac 주소는 사용자가 마지막으로 입력 한 mac 주소입니다. editmac보기의이 mac 주소는 String으로 변환됩니다. 따라서 CharSequence가 아닌 String으로 검색해야합니다. Guillaume의 도움에 다시 한번 감사의 말씀을 전합니다.

+0

KEY_column2의 데이터 유형과 KEY_column2의 데이터 유형을 비교하십시오. –

+0

값을 확인할 수 있습니다 -> 비어 있거나 없으면 Log.i ("debug", editmacs); – Dezigo

+0

@ Sunil, Sqliteman을 사용하여 포함 된 데이터베이스를 만들었으며 모든 열의 데이터 형식은 Text입니다. –

답변

0

코드에 아무 문제가 없으므로 전달 된 값을 열에 삽입해야합니다.

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

을 그리고 당신은 당신이 기대하는 가치를 얻을 경우 알려 주시기 :

시도는 토스트처럼, 디버그 경고의 어떤 종류를 추가하여이 값이 있는지 확인합니다. 내 생각에 아무 것도 없다면, 아마 그 텍스트 값을 잘못된 TextView에서 읽었을 것입니다.

editmac이 올바른보기에서 올바르게 초기화 되었습니까?

+0

감사합니다. 나는 토스트를 사용했으며, editmac에서 입력 한 값을 보여줍니다. editmac에 대한 초기화는 다음과 같습니다 :'TextView editmac;'및'editmac = (TextView) this.findViewById (R.id.addmac);' –

+0

흠 정말 이상합니다. 기본 값 (텍스트, "foo"와 같은 특수 문자가 없습니까?)을 사용해 보았습니까? – Guillaume

+0

방금 ​​다른 점을 생각했습니다. 아마도 데이터베이스의 MAC이 좋을 수도 있으며, 오류가있는 값을 읽는 것이 쿼리입니까? – Guillaume