【问题标题】:Fetch data from SQLite only contains single data row从 SQLite 获取数据仅包含单个数据行
【发布时间】:2014-03-01 16:17:41
【问题描述】:

在我的应用程序中,我将数据存储到 SQLite,现在我正尝试将该数据从 SQLite 获取到活动

根据要求,我只需要一次存储单个数据,我的表将只包含一个数据行,不超过一行。

所以我想如果表有数据行然后获取数据并在 onCreate(..)LoginActivity.java 中显示 /p>

获取:

The method SelectData(String) in the type myDBClass is not applicable for the arguments ()

myDBClass.java:

// Select Data
    public String[] SelectData(String strOperatorID) {
        // TODO Auto-generated method stub

         try {
            String arrData[] = null;    

             SQLiteDatabase db;
             db = this.getReadableDatabase(); // Read Data

             Cursor cursor = db.query(TABLE_NAME, new String[] { "*" }, 
                        "OperatorID=?",
                        new String[] { String.valueOf(strOperatorID) }, null, null, null, null);

                if(cursor != null)
                {
                    if (cursor.moveToFirst()) {
                        arrData = new String[cursor.getColumnCount()];

                        arrData[0] = cursor.getString(0); // DeviceID
                        arrData[1] = cursor.getString(1); // EmailID
                        arrData[2] = cursor.getString(2); // Event
                        arrData[3] = cursor.getString(3); // Operator
                        arrData[4] = cursor.getString(4); // EventOperator
                    }
                }

                cursor.close();
                db.close();
                return arrData;

         } catch (Exception e) {
            return null;
         }
    }

LoginActivity.java:-

public class LoginActivity extends Activity  {
    .................


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.activity_login);

        btnLogout = (Button) findViewById(R.id.btnLogout);
        btnCamera = (Button) findViewById(R.id.btnCamera);
        btnGallery = (Button) findViewById(R.id.btnGallery);

            txtDeviceID = (TextView) findViewById(R.id.txtDeviceID);
            txtEmailID = (TextView) findViewById(R.id.txtEmailID);      
            txtEvent = (TextView) findViewById(R.id.txtEvent);  
            txtOperative = (TextView) findViewById(R.id.txtOperative);
            txtEventOperator = (TextView) findViewById(R.id.txtEventOperator);

             Intent intent = getIntent();
             deviceID = intent.getStringExtra("deviceID");
             emailID = intent.getStringExtra("emailID");
             event = intent.getStringExtra("name"); 
             operative = intent.getStringExtra("firstName");

             txtDeviceID.setText(deviceID);
             txtEmailID.setText(emailID);
             txtEvent.setText(event);
             txtOperative.setText(operative);
             txtEventOperator.setText(event + "  " + operative);

             strEvent = txtEvent.getText().toString();
             strOperative = txtOperative.getText().toString();

                // Dialog
                final AlertDialog.Builder adb = new AlertDialog.Builder(this);
                AlertDialog ad = adb.create();

                // new Class DB
                final myDBClass myDb = new myDBClass(this);

                // Save Data
                long saveStatus = myDb.InsertData(
                            txtDeviceID.getText().toString(),
                            txtEmailID.getText().toString(),
                            txtEvent.getText().toString(),
                            txtOperative.getText().toString(),
                            txtEventOperator.getText().toString()
                            );

                if(saveStatus <=  0)
                {
                  ad.setMessage("Error!! ");
                  ad.show();
                  return;
                }   

                // Show Data
                String arrData[] = myDb.SelectData();
                if(arrData != null)
                {
                    txtDeviceID.setText(arrData[1]);
                    txtEmailID.setText(arrData[2]);
                    txtEvent.setText(arrData[3]);
                    txtOperative.setText(arrData[4]);
                    txtEventOperator.setText(arrData[5]);
                }  

 if(txtEvent.getText().toString().equals("") && txtOperative.getText().toString().equals(""))
                {
                    Intent intentCall = new Intent(LoginActivity.this, LicenseListActivity.class);
                    startActivity(intentCall);
                }
              }

【问题讨论】:

  • 如果只存储一行,为什么还要使用数据库?它只是你能做的最不高效和最愚蠢的设计。
  • @kalyanpvs 无法运行我的程序,因为得到:myDBClass 类型中的方法 SelectData(String) 不适用于参数 ()
  • @Moon 你需要先学习java..它清楚地说调用方法带有字符串参数,但你什么也没传递..
  • @kalyanpvs 我只是想知道我的代码需要哪些更改才能从 sqlite 表行获取数据
  • @Moon 你知道你代码中的operatorId吗..如果然后将它传递给方法..

标签: android sqlite


【解决方案1】:

从操作要求.. 像这样改变你的方法..

public String[] SelectData() {
    // TODO Auto-generated method stub

    try {
        String arrData[] = new String[5];

        SQLiteDatabase db;
        db = this.getReadableDatabase(); // Read Data

        Cursor cursor = db.query(TABLE_NAME, null, null, null, null,
                null, null);

        if (cursor != null) {
            if (cursor.moveToFirst()) {

                arrData[0] = cursor.getString(0); // DeviceID
                arrData[1] = cursor.getString(1); // EmailID
                arrData[2] = cursor.getString(2); // Event
                arrData[3] = cursor.getString(3); // Operator
                arrData[4] = cursor.getString(4); // EventOperator
            }
        }

        cursor.close();
        db.close();
        return arrData;

    } catch (Exception e) {
        return null;
    }
}

【讨论】:

  • 我们为什么要使用 new String[5];代替 null ?
  • 好的..我还没有看到这一行 arrData = new String[cursor.getColumnCount()];我认为你正在执行空对象
  • @Moon 这也不是一个好主意,如果光标包含一行,它会抛出 ArraryIndexOutOf Bound 异常
  • 那我该怎么办?
  • 每当我从 TaskList 中删除我的应用程序并再次启动时没有得到值
【解决方案2】:

您的 SelectData 方法接受一个字符串参数 (strOperatorID),但您在没有参数的情况下调用它,因此显然找不到它。

顺便说一句,您应该尊重您的方法的 Java 命名约定(即不以大写字符开头)

【讨论】:

    【解决方案3】:
    public String[] SelectData() {
        // TODO Auto-generated method stub
    
        try {
            String arrData[] = new String[5];
    
            SQLiteDatabase db;
            db = this.getReadableDatabase(); // Read Data
    
            Cursor cursor = db.query(TABLE_NAME, null, null, null, null,
                    null, null);
    
            if (cursor != null) {
                if (cursor.moveToFirst()) {
    do{
    
                    arrData[0] = cursor.getString(0); // DeviceID
                    arrData[1] = cursor.getString(1); // EmailID
                    arrData[2] = cursor.getString(2); // Event
                    arrData[3] = cursor.getString(3); // Operator
                    arrData[4] = cursor.getString(4); // EventOperator
              } while (cur.moveToNext()); 
     }
            }
    
    
            return arrData;
    
        } catch (Exception e) {
    
            return null;
        }finally{
      cursor.close();
            db.close();
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 2015-07-19
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多