2016-09-06 19 views
2

這是我的問題,我不知道我怎麼能把我的插入查詢使用SQLiteStatement在一個類而不影響綁定和迭代器?這是我迄今取得的進展。數據庫位於MainActivity中,但我希望所有查詢都放在類中。如何把數據庫查詢在一個類

 btnSave = (Button) findViewById(R.id.btnSaveAlbum); 
      btnSave.setOnClickListener(new View.OnClickListener() { 
       @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
       @Override 
       public void onClick(View v) { 
        txtTitle = (EditText) findViewById(R.id.txtAlbumTitle); 
        String title = txtTitle.getText().toString(); 

        if (requestCode == 200 && resultCode == Activity.RESULT_OK) { 
         String[] apath = data.getStringArrayExtra("all_path"); 
         ArrayList<String> strings = new ArrayList<String>(); 
         Iterator iterate = strings.iterator(); 
         for (String string : apath) { 
          strings.add(string); 
         } 


         String query = "INSERT INTO " + TBNAME + " VALUES (?,?);"; 
         SQLiteStatement statement = timedb.compileStatement(query); 
         timedb.beginTransaction(); 

         while (iterate.hasNext()) { 
          statement.clearBindings(); 
          statement.bindString(1, title); 
          statement.bindString(2, iterate.next().toString()); 
          statement.execute(); 
         } 

         timedb.setTransactionSuccessful(); 
         timedb.endTransaction(); 
         timedb.close(); 
Toast.makeText(MainActivity.this, "Successful", Toast.LENGTH_LONG).show(); 

        } 
       } 
      }); 
+1

最好的辦法是建立在那裏你把所有的疑問一個Singleton類 –

+0

@DrilonBlakqori我怎麼能把它放在單例類中而不影響迭代器和綁定?儘管如此,我還沒有任何線索 –

+1

,您可以簡單地將'apath','title'對象傳遞給您在單例類中創建的函數,然後編寫由該函數中的迭代器和綁定組成的代碼的其餘部分 –

回答

1

做一個DATABSE輔助類。事情是這樣的:

import android.content.Context; 
import android.content.Intent; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteStatement; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.Iterator; 

public class DatabaseHelper { 

    private static DatabaseHelper instance; 
    private static final String TBNAME = "your first table name"; 
    private static final String OTHER_TB_NAME = "your other table name"; 

    private Context context; 
    private SQLiteDatabase timedb; 

    public static DatabaseHelper getInstance(Context context) { 
     if (instance == null) { 
      instance = new DatabaseHelper(context); 
     } 
     return instance; 
    } 

    private DatabaseHelper(Context context) { 
     this.context = context; 
     timedb = //your initialization 
    } 

    public void queryA(Intent data, String title) { 
     String[] apath = data.getStringArrayExtra("all_path"); 
     ArrayList<String> strings = new ArrayList<String>(); 
     Iterator iterate = strings.iterator(); 
     for (String string : apath) { 
      strings.add(string); 
     } 


     String query = "INSERT INTO " + TBNAME + " VALUES (?,?);"; 
     SQLiteStatement statement = timedb.compileStatement(query); 
     timedb.beginTransaction(); 

     while (iterate.hasNext()) { 
      statement.clearBindings(); 
      statement.bindString(1, title); 
      statement.bindString(2, iterate.next().toString()); 
      statement.execute(); 
     } 

     timedb.setTransactionSuccessful(); 
     timedb.endTransaction(); 
     timedb.close(); 
     Toast.makeText(context, "Successful", Toast.LENGTH_LONG).show(); 
    } 
} 

對於每一個查詢你可以做一個新的method.To獲得輔助函數實例:DatabaseHelper.getInstance()

3

做這樣

import java.text.ParseException; 
import java.util.ArrayList; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DbHelper extends SQLiteOpenHelper 
{ 
    private final String TAG = "Database"; 

    public static final int DATABASE_VERSION = 13; 
    public static final String DATABASE_NAME = "assessment.db"; 



    public static final String FEED_AUDIO_TABLE = "audiTable"; 
    public static final String FEED_AUDIO_COLUMN_ID = "audioId"; 
    public static final String FEED_AUDIO_AUDIO = "audio"; 
    public static final String FEED_AUDIO_ISDOWNLODED = "audioIsdownloaded"; 


    Context context;  

    public DbHelper(Context context) 
    { 
     super(context, DATABASE_NAME , null, DATABASE_VERSION); 

     this.context = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
    //table 
     db.execSQL("create table "+FEED_AUDIO_TABLE+ 
       "("+FEED_AUDIO_COLUMN_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+FEED_AUDIO_AUDIO+" text NOT NULL UNIQUE, "+FEED_AUDIO_ISDOWNLODED+" text);"); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 

     db.execSQL("DROP TABLE IF EXISTS "+FEED_AUDIO_TABLE); 
     onCreate(db); 
    } 




    //insert method 
    public boolean insertAudioForDownload(String audioUrl, String isDownloaded) 
    { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 

     contentValues.put(FEED_AUDIO_AUDIO, audioUrl); 
     contentValues.put(FEED_AUDIO_ISDOWNLODED, isDownloaded); 

     long i = db.insertWithOnConflict(FEED_AUDIO_TABLE, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE); 

     Log.i(TAG, "insertForBackground Value inserted: "+i +" for audioUrl :"+ audioUrl+ " isDownloaded is : "+ isDownloaded); 


     return true; 
    } 

    //Read method 

    public ArrayList<String> getAudioForDownload(String isDownloaded) 
    { 
     ArrayList<String> arrayList = new ArrayList<String>(); 
     String gridSelected = ""; 
     SQLiteDatabase db = getReadableDatabase(); 

     String where = FEED_AUDIO_ISDOWNLODED+"=?"; 
     String[] whereArgs = {isDownloaded}; 

     Cursor cursor = db.query(FEED_AUDIO_TABLE, null, where, whereArgs, null, null, null); 
     if(cursor != null && cursor.getCount() > 0) 
     { 
      Log.d(TAG, "getAudioForDownload cursor count is: "+cursor.getCount()); 

      while(cursor.moveToNext()) 
      { 
       gridSelected = cursor.getString(cursor.getColumnIndex(FEED_AUDIO_AUDIO)); 

       arrayList.add(gridSelected); 
      } 
     } 

     db.close(); 

     Log.d(TAG, "getAudioForDownload arrayList size is: "+arrayList.size()); 

     return arrayList; 
    } 
}