文章目录

  • 一、配置环境
  • 二、服务器搭建
  • 三、android客户端搭建
  • 三、获取json数据
  • 四、在界面中显示数据
  • 五、使用Gson解析json
  • 六、测试


一、配置环境

  1. 服务器:Apache Tomcat v9.0
  2. 编译环境:服务器端:Eclipse , android 客户端: Android Studio
  3. 调用jar包:
    okhttp3.5 //Http协议访问网络
    Gson-2.8.5 //封装,解析json数据
    mysql-connector-java-5.1.37-bin //用于连接Mysql数据库

二、服务器搭建

  1. 创建数据库db_user和数据表grade,其结构如下。向数据表grade中插入一些数据。
  2. android 数据库提交数据 android如何与数据库进行通信_apache

  3. Eclipse新建动态Web项目(Dynamic Web Project)AndroidToServet,项目结构如下图:

android 数据库提交数据 android如何与数据库进行通信_apache_02


其中Grade.java为Bean类,属性和数据库属性名一致。

public class Grade {
	private String id;
	private String name;
	private String sex;
	private float c;
	private float java;
	private float math;
//...省略各个属性的setter和getter方法

}
  1. 创建数据库工具类MyDataBase.java。在lib文件夹中添加Gson和jdbc依赖包。

工具类中只写了查询方法,其他的添加删除和修改方法暂时用不到,以后再添加。

package DBUtils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import Bean.Grade;

public class MyDataBase  {
	public static Connection connection;
	public static Statement statement;
	public static ResultSet resultSet;
	//建立数据库的连接
	public static void GetConnection() {
		if (connection==null) {
			try {			
				Class.forName("com.mysql.jdbc.Driver");//数据库驱动程序的加载
				//取得数据库连接
				connection=DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/db_user",
						"root", "1111");
			} catch (Exception e) {
				e.printStackTrace();
			}				
			System.out.println("数据库连接成功~~~~~~~~~~~~");
		}
	}
	public static String find_all() {//查询
		List<Grade> gradelist=new ArrayList<Grade>();
		try {
			String sql="select * from grade";
	statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_READ_ONLY);//是指针可以随机定位
			resultSet=statement.executeQuery(sql);
				while (resultSet.next()) {
						Grade grade=new Grade();
						grade.setId(resultSet.getString("id"));
						grade.setName(resultSet.getString("name"));
						grade.setSex(resultSet.getString("sex"));
						grade.setC(resultSet.getFloat("c"));
						grade.setJava(resultSet.getFloat("java"));
						grade.setMath(resultSet.getFloat("math"));
						gradelist.add(grade);
					}	
		} catch (Exception e) {
			e.printStackTrace();
		}
		Gson gson=new Gson();
		String str=gson.toJson(gradelist);
		return str;		
	}
	public static ResultSet findById(String id) {
		try {
			statement=connection.createStatement();
			String sql="select * from grade where id="+id;
			resultSet=statement.executeQuery(sql);		
		} catch (Exception e) {
			e.printStackTrace();
		}
		return resultSet;
	}	
	//关闭数据库资源
	public static void close_res() {
		try {
			connection.close();
			statement.close();
			resultSet.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}
  1. TestServlet.java
    用来实现功能的服务器文件,此为Servlet类,使用注解的方式@WebServlet("/mytestServlet")进行路径映射。类中会自动生成doGet和doPost两种方法,我们对doGet和doPost方法中的代码进行删改和添加
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import DBUtils.MyDataBase;

@WebServlet("/mytestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		MyDataBase.GetConnection();
		String str=MyDataBase.find_all();
		PrintWriter out=response.getWriter();
		out.println(str);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}
  1. 点击运行按钮测试程序,结果如图,已成功搭建。
    6. 导出项目war包,然后部署到Tomcat服务器中。
    7.关闭Eclipse。打开Tomcat服务器和MySQL服务,在浏览器地址栏中输入项目的servlet地址测试,成功运行如图所示。

三、android客户端搭建

1.修改布局。布局很简单,只有一个按钮和一个Listview,点击按钮时通过服务器的sevlet连接数据库查询并转换为json数据返回。如图所示。

android 数据库提交数据 android如何与数据库进行通信_java_03

2.创建列表适配器MyBaseAdapter

public class MyBaseAdapter extends BaseAdapter {
    private LayoutInflater layoutInflater;
    private List<GradeBean> gradeBeanList;
    public MyBaseAdapter(Context context, List<GradeBean> gradeBeanList) {
        this.layoutInflater = LayoutInflater.from(context);
        this.gradeBeanList = gradeBeanList;
    }
    @Override
    public int getCount() {
        return gradeBeanList.size() > 0 ? gradeBeanList.size() : 0;
    }
    @Override
    public Object getItem(int i) {
        return gradeBeanList.size() > 0 ? gradeBeanList.get(i) : 0;
    }

    @Override
    public long getItemId(int i) {
        return i;
    }
    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
         ViewHolder holder;
         if (convertView==null)
         {
             convertView=layoutInflater.inflate(R.layout.grade_item, null);
             holder=new ViewHolder(convertView);
             convertView.setTag(holder);
         }else {
             holder= (ViewHolder) convertView.getTag();
         }
         GradeBean grade= (GradeBean) getItem(i);
         holder.stuid.setText("学号:"+grade.getId());
         holder.name.setText(" || 姓名:"+grade.getName());
         holder.sex.setText(" || 性别:"+grade.getSex());
         holder.c.setText("C语言:"+String.valueOf(grade.getC()));
         holder.java.setText(" || Java:"+String.valueOf(grade.getJava()));
         holder.math.setText(" || 数学:"+String.valueOf(grade.getMath()));
        return convertView;
    }

    public static    class ViewHolder {
        public View rootView;
        public TextView stuid;
        public TextView name;
        public TextView sex;
        public TextView c;
        public TextView java;
        public TextView math;
        public ViewHolder(View rootView) {
            this.rootView = rootView;
            this.stuid = (TextView) rootView.findViewById(R.id.stuid);
            this.name = (TextView) rootView.findViewById(R.id.name);
            this.sex = (TextView) rootView.findViewById(R.id.sex);
            this.c = (TextView) rootView.findViewById(R.id.c);
            this.java = (TextView) rootView.findViewById(R.id.java);
            this.math = (TextView) rootView.findViewById(R.id.math);
        }
    }
}

3.添加OkHttp和Gson依赖。

android 数据库提交数据 android如何与数据库进行通信_java_04

android 数据库提交数据 android如何与数据库进行通信_mysql_05

三、获取json数据

通过点击按钮获取服务器中的数据,用到了okhttp框架。其中,path为服务器Servlet的地址,如果本机的地址为:192.168.1.9,则private String path="http://192.168.1.9:8080/AndroidToServer/mytestServlet";

@Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_get:
                OkHttpClient okHttp=new OkHttpClient();
                Request request=new Request.Builder().url(path).build();
                Call call=okHttp.newCall(request);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {    }
                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        String str=response.body().string();
                        Message msg=new Message();
                        msg.what=0;
                        msg.obj=str;
                        mhandler.sendMessage(msg);
                    }
                });
                break;
        }
    }
四、在界面中显示数据

在主线程中,handler处理message,使用Gson解析成Bean列表,并显示在ListView控件中。

mhandler = new Handler() {
            @Override
            public void dispatchMessage(@NonNull Message msg) {
                super.dispatchMessage(msg);
                switch (msg.what) {
                    case 0:
                        if (msg.obj != null) {
                            //解析数组
                            parseJsonArray((String)msg.obj);
                            //创建适配器实例
                            MyBaseAdapter adapter=new MyBaseAdapter(MainActivity.this,gradeBeanList);
                            listview.setAdapter(adapter);
                        }
                        break;
                }
            }
        };
五、使用Gson解析json

添加Gson依赖,使用Gson解析数组,数组中的元素为对象。

private void parseJsonArray(String obj) {//解析数组
        Gson gson = new Gson();
        Type type=new TypeToken<List<GradeBean>>(){}.getType();
        gradeBeanList=gson.fromJson(obj,type);
    }
六、测试

点击按钮,成功获取服务器中MySQL数据库中的数据,结果如图

android 数据库提交数据 android如何与数据库进行通信_java_06