2017-04-26 67 views
-2

我想保存一些數據在SQLITE Database.But此代碼似乎不起作用。SQLITE檢索數據錯誤

這裏是我的數據庫助手代碼:

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

import java.util.ArrayList; 

/** 
* Created by ProgrammingKnowledge on 4/3/2015. 
*/ 
public class saveClients extends SQLiteOpenHelper { 
    public static final String DATABASE_NAME = "client.db"; 
    public static final String TABLE_NAME = "Client_Info"; 
    public static final int ver=1; 
    public static int i=0; 
    public static final String COL_1 = "ID"; 
    public static final String COL_2 = "NAME"; 
    public static final String COL_3 = "Email"; 
    public static final String COL_4 = "Balance"; 

    public saveClients(Context context) { 
     super(context, DATABASE_NAME, null, ver); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("create table " + TABLE_NAME +" (ID INTEGER,NAME TEXT,Email TEXT,Balance TEXT)"); 
    } 

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

    public boolean insertData(String ID,String Fname,String Email,String Balance) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     ContentValues contentValues = new ContentValues(); 
     contentValues.put(COL_1,ID); 
     contentValues.put(COL_2,Fname); 
     contentValues.put(COL_3,Email); 
     contentValues.put(COL_4,Balance); 
     long result = db.insert(TABLE_NAME,null ,contentValues); 
     if(result == -1) 
      return false; 
     else 
      return true; 
    } 


    public boolean checkForTables(){ 
     SQLiteDatabase db = this.getWritableDatabase(); 
     boolean hasTables = false; 
     db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery("SELECT * FROM " +TABLE_NAME, null); 

     if(cursor != null && cursor.getCount() > 0){ 
      hasTables=true; 
      cursor.close(); 
     } 

     return hasTables; 
    } 


    public void deleteData() { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.execSQL("delete * from"+ TABLE_NAME); 
    } 

    public ArrayList<String> getAllData() { 
     ArrayList<String> list=new ArrayList<>(); 
     String QUERY = "SELECT * FROM " + TABLE_NAME; 

     SQLiteDatabase db = this.getWritableDatabase(); 

     Cursor cursor = db.rawQuery(QUERY, null); 
     if(cursor!=null) { 
      while (cursor.moveToNext()) { 
       list.add(cursor.getString(i)); 
       i++; 

      } 
     }else{ 
      list.add("X"); 
     } 
     return list; 
    } 


} 

這裏是我的客戶活動代碼:下圖:

import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import com.sdsmdg.tastytoast.TastyToast; 

    import java.util.ArrayList; 

    public class clientView extends AppCompatActivity { 
     TextView Fname, Email, ID, Balance; 
     final saveClients obj = new saveClients(this); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_client_view); 
      if (obj.checkForTables() == false) { 
       String getingid = getIntent().getStringExtra("ID"); 
       String getingname = (getIntent().getStringExtra("Fname")); 
       String getinmail = (getIntent().getStringExtra("Email")); 
       String getingBalan = (getIntent().getStringExtra("Balance")); 
       obj.insertData(getingid, getingname, getinmail, getingBalan); 
       TastyToast.makeText(clientView.this, "Logged In", TastyToast.SUCCESS, TastyToast.LENGTH_LONG).show(); 
      } 


      ArrayList<String> data = new ArrayList<>(obj.getAllData()); 
      // --------------------------------------------------------------------------------------------- 
      // --------------------------------------------------------------------------------------------- 
      if(data.get(0).equals("X")){ 
       Toast.makeText(this, "Database Error", Toast.LENGTH_SHORT).show(); 
      } 
      Fname = (TextView) findViewById(R.id.Fname); 
      Email = (TextView) findViewById(R.id.Email); 
      ID = (TextView) findViewById(R.id.ID); 
      Balance = (TextView) findViewById(R.id.Balance); 
      Button button = (Button) findViewById(R.id.lgout); 
      ID.setText(data.get(0)); 
      Fname.setText(data.get(1)); 
      ID.setText(data.get(2)); 
      Balance.setText(data.get(3)); 

      button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Fname.setText(""); 
        Email.setText(""); 
        ID.setText(""); 
        Balance.setText(""); 
        obj.deleteData(); 
        Intent pushback = new Intent(clientView.this, MainActivity.class); 
        startActivity(pushback); 
       } 
      }); 

      // --------------------------------------------------------------------------------------------- 
      // --------------------------------------------------------------------------------------------- 

     } 
    } 

我想getAlldata()方法以檢索所有數據但它一直在崩潰。另外一個問題是可以使用SQL查詢從SQLITE數據庫中檢索任何數據。然後請分享我該怎麼做。

+0

你能分享你的錯誤日誌嗎? –

+0

錯誤日誌是空的,但它的應用程序保持停止。 –

+0

檢查android監視器或終端或運行問題 –

回答

0

你可以用這個

public ArrayList<String> getAllData() 
{ 
     ArrayList<String> resultList=new ArrayList<>(); 
     String QUERY = "SELECT * FROM " + TABLE_NAME; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(QUERY, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) 
     { 
      do { 
       resultList.add((cursor.getInt(0))); // Fetch ID 
       resultList.add((cursor.getString(1))); // Fetch FName 

      } while (cursor.moveToNext()); 

      cursor.close(); 
      db.close(); 
     } 

     // return list 
     return resultList; 
    } 

然後卸載舊的應用程序運行&嘗試。