选择并计算列 - SQLite

时间:2016-11-30 18:38:00

标签: android sql

你能告诉我这段代码有什么问题吗?

public Cursor IMC(){
        Cursor cursor;
        String[] campos =  {"SELECT (peso/(altura*altura)) FROM medidas "};
        db = banco.getReadableDatabase();

        cursor = db.query(CriaBanco.TABELA_MEDIDAS, campos, null, null, null, null, null, null);



        if(cursor!=null){
            cursor.moveToFirst();
        }
        db.close();
        return cursor;
    }

(peso /(altura * altura)是列和“medidas”表...

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

            BancoController crud = new BancoController(getBaseContext());
            Cursor cursor = crud.IMC();

            String[] nomeCampos = new String[] {"SELECT (peso/(altura*altura) FROM medidas "};
            int[] idViews = new int[] {R.id.txtresultado_imc};



        }

我试图在textview“txtresultado_imc”中显示SELECT方程的结果......

表格代码

public class CriaBanco extends SQLiteOpenHelper {

    private static final String NOME_BANCO = "banco.db";
    private static final int VERSAO = 1;


    static final String TABELA_MEDIDAS = "medidas";
    static final String CODIGO = "codigo";
    static final String ALTURA = "altura" ;
    static final String PESO = "peso" ;
    static final String CINTURA = "cintura" ;
    static final String PESCOCO = "pescoco" ;
    static final String QUADRIL = "quadril" ;
    static final String GRAU_ATIVIDADE = "grau_atividade" ;


    public CriaBanco(Context context) {
        super(context, NOME_BANCO, null, VERSAO);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {


        String medidas = "CREATE TABLE medidas (" 

                    + "codigo integer primary key autoincrement," 
                    + "altura integer,"
                    + "peso integer,"
                    + "cintura integer,"
                    + "pescoco integer,"
                    + "quadril integer,"
                    + "grau_atividade num)";

        db.execSQL(medidas);
    }

韩国社交协会!

1 个答案:

答案 0 :(得分:0)

在您的查询中,缺少结束括号。

使用此

"SELECT (peso/(altura*altura)) FROM medidas"

而不是

"SELECT (peso/(altura*altura) FROM medidas "

然后使用cursor的结果在TextView上设置数据。

TextView tv = (TextView) findViewById(R.id.txtresultado_imc);    
 // set result
tv.setText(cursor.getString(cursor.getColumnIndex(0));)

 // Remove these below lines, I don't know what you are trying to achieve with them. They are looking unused and unnecessary

String[] nomeCampos = new String[] {"SELECT (peso/(altura*altura) FROM medidas "};
int[] idViews = new int[] {R.id.txtresultado_imc};

为了使代码正常工作,还需要修改一个观察。您的方法是接受字符串,而您的列类型只允许插入整数值。

public String insereMedidas(String altura, String peso, String cintura, String pescoco, String quadril, String grau_atividade)

这应该是 -

public String insereMedidas(int altura, int peso, int cintura, int pescoco, int quadril, int grau_atividade)

所有列的交叉检查数据类型相同。虽然从EditText获取文本会将其转换为int,但请确保仅允许数值作为输入。

例如 -

int pesoValue = Integer.parseInt(Peso.getText().toString()); 

将上述值传递给insert方法,对所有输入执行相同操作。