2012-05-09 2 views
1
public class SaveData extends Activity implements OnClickListener { 
    private DataManipulator dh;  
    static final int DIALOG_ID = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.addname); 

     View add = findViewById(R.id.Button01add); 
     add.setOnClickListener(this); 
     View home = findViewById(R.id.Button01home); 
     home.setOnClickListener(this);   
    } 

    public void onClick(View v){ 
     switch(v.getId()){ 

     case R.id.Button01home: 
      Intent i = new Intent(this, DatabaseSample.class); 
      startActivity(i); 
      break; 

     case R.id.Button01add: 
      View editText1 = (EditText) findViewById(R.id.name); 
      String myEditText1=((TextView) editText1).getText().toString(); 

      this.dh = new DataManipulator(this); 
      this.dh.insert(myEditText1); 

      showDialog(DIALOG_ID); 
      break; 

     } 
    } 
    protected final Dialog onCreateDialog(final int id) { 
     Dialog dialog = null; 
     switch(id) { 
     case DIALOG_ID: 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Information saved successfully ! Add Another Info?") 
      .setCancelable(false) 
      .setPositiveButton("No", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        SaveData.this.finish(); 

       } 
      }) 
      .setNegativeButton("Yes", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        dialog.cancel(); 
       } 
      }); 
      AlertDialog alert = builder.create(); 
      dialog = alert; 
      break; 

     default: 

     } 
     return dialog; 
    } 
} 

내가 그것을 말한다 에뮬레이터에 데이터 저장을 클릭하면 내가 데이터베이스에 데이터를 저장할 수 없습니다 java.lang.IllegalArgumentException가이 SQL에 대한 bindargs을 통과 할 수 없습니다 newtable (이름) 값으로 (?)저장하는 방법을 데이터

public class DataManipulator { 
    private static final String DATABASE_NAME = "mydatabase.db"; 
    private static final int DATABASE_VERSION = 1; 
    static final String TABLE_NAME = "newtable"; 
    private static Context context; 
    static SQLiteDatabase db; 

    private SQLiteStatement insertStmt; 

    private static final String INSERT = " into " + TABLE_NAME + " (name) values (?)"; 

    public DataManipulator(Context context) { 
     DataManipulator.context = context; 
     OpenHelper openHelper = new OpenHelper(DataManipulator.context); 
     DataManipulator.db = openHelper.getWritableDatabase(); 
     this.insertStmt = DataManipulator.db.compileStatement(INSERT); 

    } 
    public long insert(String name) { 
     this.insertStmt.bindString(1, name); 
     return this.insertStmt.executeInsert(); 
    } 

    public void deleteAll() { 
     db.delete(TABLE_NAME, null, null); 
    } 

    public List<String[]> selectAll() 
    { 

     List<String[]> list = new ArrayList<String[]>(); 
     Cursor cursor = db.query(TABLE_NAME, new String[] { "name"}, null, null, null, null, null); 

     int x=0; 
     if (cursor.moveToFirst()) { 
      do { 
       String[] b1=new String[]{cursor.getString(0)}; 

       list.add(b1); 

       x=x+1; 
      } while (cursor.moveToNext()); 
     } 
     if (cursor != null && !cursor.isClosed()) { 
      cursor.close(); 
     } 
     cursor.close(); 

     return list; 
    } 


    public void delete(int rowId) { 
     db.delete(TABLE_NAME, null, null); 
    } 


    private static class OpenHelper extends SQLiteOpenHelper { 

     OpenHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      db.execSQL("CREATE TABLE " + TABLE_NAME + " (name TEXT)"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
      onCreate(db); 
     } 
    } 
} 

사람이 나에게

+0

'+ + TABLE_NAME + "(name) 값 (?)에'private static final String INSERT ="가 삽입됩니다. – Selvin

답변

2

변경을 할 수 있습니다; 으로

public long insert(String name) { 
     this.insertStmt.bindString(1, name); 
     return this.insertStmt.executeInsert(); 
} 

:

public long insert(String name) { 
    ContentValues args = new ContentValues(); 
    args.put("name", name); 
    return db.insert(TABLE_NAME, null, args); 
} 
+0

내용에 대한 인스턴스 메서드를 만들어야하는 경우 내용 값은 무엇입니까? –

+0

** ContentValues는 ** insert ** 메서드를 사용할 때 SQL 쿼리에 매개 변수를 제공하는 데 사용되는 컨테이너입니다. 특별한 일을 할 필요가 없습니다. 그냥 그것을 사용하고 그것이 (나는 희망) 작동합니다 :) 사용 – waqaslam

0

귀하의 삽입 문은 읽을 필요가 :

private static final String INSERT = "INSERT into " + TABLE_NAME + " (name) values (?)"; 

편집 : Waqas 게시하는 방법은 안드로이드에 SQLite는 사용하는 더 나은 방법입니다 . 그가 한 말을 사용하십시오.

관련 문제