Java 如何选择特定列sql的最后一行值
我是android的初学者,我不明白我错在哪里,我错在哪里 我正在尝试从用户处获取上次编辑的消息或上次保存的消息 当用户点击“发送”按钮时,它需要转到特定的whats应用程序编号和用户的当前位置 我的数据库名是mydb,表名是Mytable 我有两列,第一列是id auto increment,第二列是msg 但当我运行我的代码时,会得到如下输出 //我的输出是//Java 如何选择特定列sql的最后一行值,java,android,sqlite,android-sqlite,Java,Android,Sqlite,Android Sqlite,我是android的初学者,我不明白我错在哪里,我错在哪里 我正在尝试从用户处获取上次编辑的消息或上次保存的消息 当用户点击“发送”按钮时,它需要转到特定的whats应用程序编号和用户的当前位置 我的数据库名是mydb,表名是Mytable 我有两列,第一列是id auto increment,第二列是msg 但当我运行我的代码时,会得到如下输出 //我的输出是// EMERGENCY null http://maps.google.com/maps?saddr=12.88758733,74
EMERGENCY
null
http://maps.google.com/maps?saddr=12.88758733,74.83737172
我得到的是空值,而不是上次保存的消息。
请引导我,我在新的安卓系统
谢谢
//MY MAIN ACTIVITY//
package com.myproject.harjinder_singh_lohia_bobby.harjicateringapp;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.location.Location;
import android.net.Uri;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
SQLiteDatabase db;
String ms,msgg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db=openOrCreateDatabase("mydb",MODE_PRIVATE,null);
db.execSQL("CREATE TABLE IF NOT EXISTS Mytable(id INTEGER PRIMARY KEY AUTOINCREMENT,msg VARCHAR(100));");
}
public void onclicksavemsg(View view)
{
EditText tempmsg =(EditText) findViewById(R.id.etmsg);
String name=tempmsg.getText().toString();
db.execSQL("INSERT INTO Mytable(msg)VALUES('"+name+"');");
TextView tv=findViewById(R.id.tvv);
Cursor last_msg = db.rawQuery("SELECT * FROM Mytable WHERE id = '"+db.rawQuery("SELECT MAX(id) FROM mytable",null)+"'",null);
if(last_msg.moveToLast())
{
msgg=last_msg.getString(1);
}
tv.setText(msgg);
}
public void send(View view)
{
GPStracker g = new GPStracker(getApplicationContext());
Location l = g.getLocation();
if (l != null) {
double lat = l.getLatitude();
double lon = l.getLongitude();
String message = "\nhttp://maps.go"+"ogle.com/maps?saddr=" + lat + "," + lon;
//String selectQuery = "SELECT * FROM Mytable ORDER BY column DESC LIMIT 1";
Cursor last_msg = db.rawQuery("SELECT msg FROM Mytable WHERE id = '"+db.rawQuery("SELECT MAX(id) FROM mytable",null)+"'",null);
if(last_msg.moveToLast())
{
ms=last_msg.getString(0);
}
String num = "xxxxxxxxxx";
Intent sendIntent = new Intent("android.intent.action.MAIN");
sendIntent.setAction(Intent.ACTION_VIEW);
sendIntent.setPackage("com.whatsapp");
String url = "https://api.whatsapp.com/send?phone=" + num + "&text="+"\nEMERGENCY\n"+ms;
sendIntent.setData(Uri.parse(url+message));
if (sendIntent.resolveActivity(MainActivity.this.getPackageManager()) != null) {
startActivity(sendIntent);
}
}
}
}
//我希望我的输出像
EMERGENCY
SAVE ME I AM IN DANGER HELP ME
http://maps.google.com/maps?saddr=12.88758733,74.83737172
将查询更改为此原始查询
select max(id) as id from your_table_name
因为您从查询中只得到一个值,所以不需要调用
if(last_msg.moveToLast())
{ msgg=last_msg.getString(1);
}
tv.setText(msgg);
就用,
cursor.movetoposition(0);
msgg=cursor.getString(1);
tv.setText(msgg);
您在代码中犯了两次相同的错误:
Cursor last_msg = db.rawQuery("SELECT * FROM Mytable WHERE id = '"+db.rawQuery("SELECT MAX(id) FROM mytable",null)+"'",null);
不能添加2个rawQuery方法的结果,这意味着添加2个游标对象。更改第一条语句,如下所示:
Cursor last_msg = db.rawQuery("SELECT * FROM Mytable WHERE id = (SELECT MAX(id) FROM mytable)", null);
第二条至:
Cursor last_msg = db.rawQuery("SELECT msg FROM Mytable WHERE id = (SELECT MAX(id) FROM mytable)", null);
这给了我索引外的错误,兄弟可以如何克服错误?把它放在游标的if循环中。getCount>0,带有日志和调试。它根本不工作,我的意思是没有反应,当我单击“无响应”时,我的错误是什么?这是你为PAS所做的巨大帮助。。。我挣扎了这么多天。。。最后我试着做一个新的问题,我今天刚刚看到了yrs,这对你们来说是很大的帮助。。。非常感谢你的兄弟爱你的兄弟