Php 如何从SQL数据库中选择所有记录并将其放入Listview Android中
我试图学习如何为android应用程序存储和获取数据库中的记录,我可以进行更新、插入、删除等操作。但我在获取多个记录时遇到问题,我想问一下如何从localhost phpmyadmin中的表中获取所有记录,并使用共享首选项将结果导出到android应用程序中的listview中,以下是我的php函数代码:Php 如何从SQL数据库中选择所有记录并将其放入Listview Android中,php,android,mysql,database,listview,Php,Android,Mysql,Database,Listview,我试图学习如何为android应用程序存储和获取数据库中的记录,我可以进行更新、插入、删除等操作。但我在获取多个记录时遇到问题,我想问一下如何从localhost phpmyadmin中的表中获取所有记录,并使用共享首选项将结果导出到android应用程序中的listview中,以下是我的php函数代码: public function getLessons($teacher) { $sql = 'SELECT * FROM lessons WHERE teacher = :teacher'
public function getLessons($teacher) {
$sql = 'SELECT * FROM lessons WHERE teacher = :teacher';
$query = $this -> conn -> prepare($sql);
$query -> execute(array(':teacher' => $teacher));
$data = $query -> fetchObject();
$lesson["title"] = $data -> title; // im not sure if this is true
$lesson["maxstudent"] = $data -> maxstudent; // im not sure if this is true
$lesson["about"] = $data -> about; // im not sure if this is true
return $lesson;// the result of sql query will be more than one record
}
上面的代码将检索查询结果,但我不确定代码,如果结果是多条记录,那么第一课的结果是什么?这是一个字符串数组吗?下面是我的java方法,以获取数据库代码中的所有课程:
private void getLessonProcess(String teacher){
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
Lesson lesson = new Lesson();// its Java Class containing title,maxstudent and about
lesson.setTeacher(teacher);// we set the teacher, so only specific teacher's lesson will be given as a result
ServerRequest request = new ServerRequest();// server request is a class to connect to localhost
request.setOperation(Constants.LESSONS);// constants.LESSONS is 'getlessons' the key that i use to trigger the SQL Query above
request.setLesson(lesson);
Call<ServerResponse> response = requestInterface.operation(request);
response.enqueue(new Callback<ServerResponse>() {
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
Snackbar.make(getView(), resp.getMessage(), Snackbar.LENGTH_LONG).show();
if(resp.getResult().equals(Constants.SUCCESS)){
SharedPreferences.Editor editor = pref.edit();
editor.putString(Constants.LESSONS,resp.getLesson().getLessontitle());
editor.putString(???,resp.getLesson().getMaxstudent());
editor.putString(???,resp.getLesson().getAbout());
?????????? // What should i write here?
//in code above it will only put one record of the database and put it in shared preference
editor.apply();
}
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
Log.d(Constants.TAG,"failed");
Snackbar.make(getView(), t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();
}
});
}
private void getLessonProcess(字符串教师){
改装改装=新改装.Builder()
.baseUrl(常量.BASE\u URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface RequestInterface=reformation.create(RequestInterface.class);
lessource=new lessource();//它的Java类包含title、maxstudent和about
lesson.settacher(teacher);//我们设置了教师,因此只会给出特定教师的课程
ServerRequest=new ServerRequest();//server request是要连接到本地主机的类
request.setOperation(Constants.LESSONS);//Constants.LESSONS是我用来触发上面SQL查询的“getlessons”键
请求。设置课程(课程);
调用响应=请求接口.操作(请求);
response.enqueue(新回调(){
@凌驾
公共void onResponse(呼叫,改装2.响应){
ServerResponse resp=response.body();
Snackbar.make(getView(),resp.getMessage(),Snackbar.LENGTH\u LONG.show();
if(resp.getResult().equals(Constants.SUCCESS)){
SharedReferences.Editor=pref.edit();
putString(Constants.LESSONS,resp.getLesson().getLessontitle());
编辑器.putString(???,分别为GetLessource().getMaxstudent());
编辑器.putString(???,分别为getLesson().getAbout());
//我应该在这里写什么?
//在上面的代码中,它只会将数据库的一条记录放在共享首选项中
editor.apply();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.d(Constants.TAG,“failed”);
make(getView(),t.getLocalizedMessage(),Snackbar.LENGTH_LONG).show();
}
});
}
是否可以遍历所有数据并将其放入arraylist中,以便使用适配器在ListView中显示结果?多谢各位
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + TABLE_NAME
+ "(ID INTEGER PRIMARY KEY AUTOINCREMENT, " + key_msg + " STRING, " + key_isread + " STRING)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
//*************************-------插入GCM消息---------**************************//
public void insert_GCM_receive_data(String msg) {
String value;
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(key_msg, msg);
cv.put(key_isread, "N");
value = cv.toString();
db.insert(TABLE_NAME, null, cv);
System.out.println("/n******this is temp table name " + TABLE_NAME + "\nthis is temp msg " + cv + "\nmsg" + msg + "\nval" + value);
db.close();
}
//-----------------------------------------------------------------------------------//
//**********************----------获取警报数据------------**************************//
公共阵列列表获取警报消息(){
ArrayList name=new ArrayList();
试一试{
SQLiteDatabase db=getWritableDatabase();
光标c=null;
c=db.rawQuery(“选择*自”+表名称,空);
系统输出打印ln(c);
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
String str_id=c.getString(0);
String str_msg=c.getString(1);
String str_read=c.getString(2);
Log.e(“值”,str_id+str_msg+str_read);
HashMap hm=新的HashMap();
hm.put(“味精”,str_味精);
hm.put(“isread”,str_read);
名称。添加(str_msg);
}
c、 close();
db.close();
}捕获(例外e){
Log.e(“这不起作用,”+e);
}
返回名称;
}`
//调用类方法
dbHelper=接收到的数据的新数据库(this.getActivity());
name=newarraylist(dbHelper.get_alert_msg())
使用类似“从表名称中选择*”的查询。。。。然后在数据库类中扩展SQLiteopenhelper
它来自于使用数据存储、获取和操作目的 如果您的数据存储在数据库服务器(Mysql、oracle等)中,则必须首先用Php编写web服务。该特定服务将从数据库中提取所有数据。然后,您必须编写一个web逻辑,将提取的数据转换为xml或json,因为只有这些格式的数据才能在网络中传输。如果您有多个数据,那么还可以从该数据生成json数组。 当android客户端通过改造调用您的web服务时,它将在相同的响应中自动获取json。json可以解析为java的ArrayList类。现在,您可以按照将列表数据填充到ListView的基本步骤,在ListView中显示所有数据
ArrayList<String> name = new ArrayList<String>();
try {
SQLiteDatabase db = getWritableDatabase();
Cursor c = null;
c = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
System.out.println(c);
for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
String str_id = c.getString(0);
String str_msg = c.getString(1);
String str_read = c.getString(2);
Log.e("value", str_id + str_msg + str_read);
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("msg", str_msg);
hm.put("isread", str_read);
name.add(str_msg);
}
c.close();
db.close();
} catch (Exception e) {
Log.e("this not work", "" + e);
}
return name;
}`