1

我的execSQL()命令出错了。Eclipse 说我需要在我的DBHelper类中定义它。我该怎么做呢?我是使用 SQL 数据库的新手,它是命令。

这是我的课程代码;

package com.example.gymbuddy;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;

public class Benchmark extends Activity {

DBHelper db = new DBHelper(this);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_benchmark);

}

public void onStart() {
    super.onStart();

    findViewById(R.id.button5).setOnClickListener(new handleButton5());

}

class handleButton5 implements OnClickListener {
    public void onClick(View v) {

        EditText editText1 = (EditText)findViewById(R.id.editText1);
        String sWeight = editText1.getText().toString();
        final double dWeight = Double.parseDouble(sWeight);

        EditText editText2 = (EditText)findViewById(R.id.editText2);
        String sPush = editText2.getText().toString();
        final double dPush = Double.parseDouble(sPush);

        EditText editText3 = (EditText)findViewById(R.id.editText3);
        String sSit = editText3.getText().toString();
        final double dSit = Double.parseDouble(sSit);

        EditText editText4 = (EditText)findViewById(R.id.editText4);
        String sPull = editText4.getText().toString();
        final double dPull = Double.parseDouble(sPull);

        double dBench = (((Math.floor(dWeight*.0664))*10)-10)+dPush;
        double dFlies = (Math.floor(((Math.floor(dBench*.6)/10)*10)));
        double dLats = ((Math.floor(dWeight*.05))*10)+dPull;
        double dCurls = ((Math.ceil(((dWeight*dPull)*.025)/10))*10);
        if(dCurls<20){
            dCurls = 20;
        }
        double dClose = ((Math.floor(dBench*.065))*10);
        double dRaise = 15;
        double dDcurls = Math.floor(dCurls*.4);
        double dDraise = 10;
        double dLegExt = dWeight*.5;
        double dPress = dWeight-20;
        double dSquat = (Math.floor((Math.floor(dWeight/10))*.6))*10;
        double dTricepExt = dDcurls+10;
        double dTricepKick = dDcurls;
        double dCalf = (Math.floor(dWeight*.035))*10;
        double dDead = (Math.floor(dWeight*.13))*10;

        int iBench = (int)dBench;
        int iFlies = (int)dFlies;
        int iLats = (int)dLats;
        int iCurls = (int)dCurls;
        int iClose = (int)dClose;
        int iRaise = (int)dRaise;
        int iDcurls = (int)dDcurls;
        int iDraise = (int)dDraise;
        int iLegExt = (int)dLegExt;
        int iPress = (int)dPress;
        int iSquat = (int)dSquat;
        int iTricepExt = (int)dTricepExt;
        int iTricepKick = (int)dTricepKick;
        int iCalf = (int)dCalf;
        int iDead = (int)dDead;
        int iSit = (int)dSit;

        db.execSQL("INSERT INTO BenchmarkData (COL_VAL)" +
                "VALUES (iBench)");

        TextView TextView1 = (TextView)findViewById(R.id.textView1);
        TextView1.setText(String.valueOf("Bench Press "+ iBench +" lbs"));

        TextView TextView2 = (TextView)findViewById(R.id.textView2);
        TextView2.setText(String.valueOf("Bar Curls "+ iCurls +" lbs"));

        TextView TextView3 = (TextView)findViewById(R.id.textView3);
        TextView3.setText(String.valueOf("Close Grip "+ iClose +" lbs"));

        TextView TextView4 = (TextView)findViewById(R.id.textView4);
        TextView4.setText(String.valueOf("Deltoid Raise "+ iRaise +" lbs"));

        TextView TextView5 = (TextView)findViewById(R.id.textView5);
        TextView5.setText(String.valueOf("Dumbbell Curls "+ iDcurls +" lbs"));

        TextView TextView6 = (TextView)findViewById(R.id.textView6);
        TextView6.setText(String.valueOf("Dumbbell Raise "+ iDraise +" lbs"));

        TextView TextView7 = (TextView)findViewById(R.id.textView7);
        TextView7.setText(String.valueOf("Lat Pull Down "+ iLats +" lbs"));

        TextView TextView8 = (TextView)findViewById(R.id.textView8);
        TextView8.setText(String.valueOf("Leg Extension "+ iLegExt +" lbs"));

        TextView TextView9 = (TextView)findViewById(R.id.textView9);
        TextView9.setText(String.valueOf("Leg Press "+ iPress +" lbs"));

        TextView TextView10 = (TextView)findViewById(R.id.textView10);
        TextView10.setText(String.valueOf("Pec Flies "+ iFlies +" lbs"));

        TextView TextView11 = (TextView)findViewById(R.id.textView11);
        TextView11.setText(String.valueOf("Squats "+ iSquat +" lbs"));

        TextView TextView12 = (TextView)findViewById(R.id.textView12);
        TextView12.setText(String.valueOf("Tricep Extension "+ iTricepExt +" lbs"));

        TextView TextView13 = (TextView)findViewById(R.id.textView13);
        TextView13.setText(String.valueOf("Tricep Kickbacks "+ iTricepKick +" lbs"));

        TextView TextView14 = (TextView)findViewById(R.id.textView14);
        TextView14.setText(String.valueOf("Calf Raises "+ iCalf +" lbs"));

        TextView TextView15 = (TextView)findViewById(R.id.textView15);
        TextView15.setText(String.valueOf("Dead Lift "+ iDead +" lbs"));

        TextView TextView16 = (TextView)findViewById(R.id.textView16);
        TextView16.setText(String.valueOf("Sit Ups "+ iSit));

        }
    }

}

这是我的 DBHelper 课程;

package com.example.gymbuddy;

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

public class DBHelper extends SQLiteOpenHelper{

//Declaring Database and Table
protected final static String MY_DATABASE_NAME = "GymBuddy.db";
protected static final int iVersion = 1;

//Defining Table
protected static final String BenchmarkData = "dataBenchmark";
protected static final String KEY_ID = "id";
protected static final String COL_VAL = "value";

//To refer to the Database
public SQLiteDatabase db;

public DBHelper(Context context) {
    super(context, MY_DATABASE_NAME, null, iVersion);
    this.db = this.getWritableDatabase();   
}

public void onCreate(SQLiteDatabase db) {
    String CREATE_QUERY = "CREATE TABLE " + BenchmarkData + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + COL_VAL + " TEXT NOT NULL, " + ");";
    db.execSQL(CREATE_QUERY);
}

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

}

}
4

1 回答 1

0

您的第一个困惑点是您的BenchMark Activity...

DBHelper db = new DBHelper(this);

用作实例db的名称DBHelper不是一个好主意 - 通常db应该直接用于数据库对象而不是数据库助手。给它一个更具代表性的名称,这样您就不会将助手与数据库混淆。

您的问题的实际原因是这一行(在Activity)...

db.execSQL("INSERT INTO BenchmarkData (COL_VAL)" +
        "VALUES (iBench)");

因为dbDBHelper(which extends SQLiteOpenHelper) 的一个实例并且execSQL(...)SQLiteDatabase.

编辑:一个可行的快速修复方法是重命名DBHelper,然后获取数据库实例,然后调用execSQL(...). 例子...

// Rename db to dbh (for example) to avoid confusion
DBHelper dbh = new DBHelper(this);
...
dbh.getWritableDatabase().execSQL(...);
于 2012-09-22T20:28:11.777 回答