2016-11-30 108 views
0

你能告诉我这个代码有什么问题?选择并计算列 - SQLite

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; 
    } 

(比索/(阿尔图拉*阿尔图拉)是列和 “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的在SELECT方程的结果“txtresultado_imc ” ......

下表代码

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); 
    } 

韩国社交协会!

+2

欢迎的话,你的问题缺乏基本点即看这个怎么样代码应该做的,什么是目前发生这样添加这些细节加,如果有任何异常,那么请加入logcat的细节 –

+0

至少有一个问题是,第二个解释在你的['query()'](https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html)语句中的参数应该是你想要返回的列。 – PPartisan

+1

Pavneet辛格, 我需要选择采取列“比索”和“阿尔图拉”的值,并执行方程(比索/(阿尔图拉*阿尔图拉)),然后在TextView中显示...它不会被称为按钮,打开屏幕时,该值应该已经有.... –

回答

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()); 

通行证上述值插入方法,做同样的所有输入。

+0

我改变了,但它仍然无法正常工作 –

+0

@JuanNeres检查更新答案 – Rahul

+0

命令没有工作。 TextView的保持空白... :( –