Android开发用MyEclipse作为服务器端访问MySQL数据库,并把某张表解析成xml格式输出到浏览器,客户端解析获取xml数据
来源:互联网 发布:五笔拼音输入法mac版 编辑:程序博客网 时间:2024/06/05 13:25
这阵子一直在了解服这里务器端与客户端的交互,对这方面真的不熟悉,在这里记录一下。
服务器端:
类截图:
1、MyEclipse连接数据库
先建立一个gongjDBUtil.java类用于连接数据库,在这里要导入连接MySQL一个外包:mysql-connector-java-5.1.38-bin-jar。
public class DBUtil { public void closeConn(Connection conn){ try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} } public Connection openConnection(){ String driver=null; String url=null; String username=null; String password=null; try {driver="com.mysql.jdbc.Driver";url="jdbc:mysql://localhost:3306/javademo";username = "root"; password = "root"; Class.forName(driver); return DriverManager.getConnection(url, username, password);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} return null; }}
数据库的username和password要跟你电脑自己数据库一样,Javademo是我的数据库的名字,写的时候换成自己的数据库名字就行。
2、接下来要将数据库的一张表解析成xml格式,要先建一个实体类,这里以Menu.java为例。
public class Menu {private int id;private int price; private int typeId; private String name; private String pic; private String remark;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getTypeId() {return typeId;}public void setTypeId(int typeId) {this.typeId = typeId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPic() {return pic;}public void setPic(String pic) {this.pic = pic;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;} }
3、新建Update.java用于执行同步,即更新Android SQLite数据库中的数据
import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;public class Update { public List<Menu> getMenuList(){ String sql =" select id,typeId,price,name,pic,remark from Menu "; DBUtil util=new DBUtil(); Connection conn=util.openConnection(); try { //获得预定义语句Statement pstmt=conn.createStatement();//查询SQL语句ResultSet rs=pstmt.executeQuery(sql); List<Menu> list = new ArrayList<Menu>(); while(rs.next()){ int id=rs.getInt(1); int typeId = rs.getInt(2); int price = rs.getInt(3); String name = rs.getString(4); String pic = rs.getString(5); String remark = rs.getString(6); Menu m=new Menu(); m.setId(id); m.setName(name); m.setPic(pic); m.setPrice(price); m.setRemark(remark); m.setTypeId(typeId); list.add(m); } return list;} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{util.closeConn(conn);}return null; }}
4、新建一个servlet文件 UpdateMenuServlet.java
public class UpdateMenuServlet extends HttpServlet { private static final long serialVersionUID = 1L; public UpdateMenuServlet() { super(); } public void destroy(){ super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/xml");PrintWriter out = response.getWriter();Update dao=new Update();List<Menu> list=dao.getMenuList();out.println("<?xml version='1.0' encoding='UTF-8'?>");out.println("<menulist>");for(int i=0;i<list.size();i++){ Menu m=list.get(i); out.println("<menu>"); // 菜谱编号 out.print("<id>"); out.print(m.getId()); out.println("</id>"); // 分类 out.print("<typeId>"); out.print(m.getTypeId()); out.println("</typeId>"); // 名称 out.print("<name>"); out.print(m.getName()); out.println("</name>"); // 图片路径 out.print("<pic>"); out.print(m.getPic()); out.println("</pic>"); // 价格 out.print("<price>"); out.print(m.getPrice()); out.println("</price>"); // 备注 out.print("<remark>"); out.print(m.getRemark()); out.println("</remark>"); out.println("</menu>"); }out.println("</menulist>");out.flush();out.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request,response);}public void init() throws ServletException { }}5、最后部署tomcat,在浏览器中输入URL,就可得到xml数据啦。
部署tomcat:
点击旁边绿色的三角形start tomcat,再点击旁边那个地球形状的图标,输入URL
蹬蹬蹬,成功,里面的数据是我数据库Menu表的数据。
6、有个包我们还没用到小伙伴有没有注意到。Filter包下有个EncodingFilter.java类。这个类是防止中文乱码的,师兄教我的,说像万金油一样,哪里都可以使用。
public class EncodingFilter implements Filter{private String charEncoding = null;public void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stubcharEncoding = filterConfig.getInitParameter("encoding");if(charEncoding == null){new ServletException("EncodingFilter中charEncoding的设置为空");}}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stubif(!charEncoding.equals(request.getCharacterEncoding())){request.setCharacterEncoding(charEncoding);}response.setCharacterEncoding(charEncoding);chain.doFilter(request, response);}public void destroy() {// TODO Auto-generated method stub}}得在WebRoot/WEB-INF/web.xml文件下声明:
服务器端的写完了,细节也兼顾到了。接下来就是客户端了。我已经把数据库的数据以xml格式发布到浏览器了,就等着客户端来用了。
客户端:
1、先建立一个工具类HttpUtil.java,用于执行网络请求和解析xml文件
import android.util.Log;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpConnectionParams;import org.apache.http.util.EntityUtils;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import java.io.IOException;import java.io.StringReader;/** * Created by Administrator on 2016/5/18. */public class HttpUtil { /** * 网络请求 * @param url * @return */ public static String httpGet(String url){ HttpGet httpGet=new HttpGet(url); String strResult=null; BasicHttpParams httpParams=new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams,10000); HttpConnectionParams.setSoTimeout(httpParams,10000); HttpClient httpClient; try { httpClient=new DefaultHttpClient(); HttpResponse response=httpClient.execute(httpGet); if (response.getStatusLine().getStatusCode()==200){ HttpEntity entity=response.getEntity(); strResult= EntityUtils.toString(entity,"UTF-8"); } } catch (IOException e) { e.printStackTrace(); } return strResult; } /** * 解析xml文件 * @param xmlData */ public static void parseXmlWithPull(String xmlData){ try { XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); XmlPullParser xmlPullParser=factory.newPullParser(); xmlPullParser.setInput(new StringReader(xmlData)); int eventType=xmlPullParser.getEventType(); String id=""; String typeId=""; String price=""; String remark=""; String pic=""; String name=""; while (eventType!=XmlPullParser.END_DOCUMENT){ String nodeName=xmlPullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if ("id".equals(nodeName)) { id = xmlPullParser.nextText(); } else if ("typeId".equals(nodeName)) { typeId = xmlPullParser.nextText(); }else if ("price".equals(nodeName)){ price=xmlPullParser.nextText(); }else if ("pic".equals(nodeName)){ pic=xmlPullParser.nextText(); }else if ("remark".equals(nodeName)){ remark=xmlPullParser.nextText(); }else if ("name".equals(nodeName)){ name=xmlPullParser.nextText(); } break; case XmlPullParser.END_TAG: if ("menu".equals(nodeName)){ Log.d("ParseXmlActivity","id is "+id); Log.d("ParseXmlActivity","typeId is "+typeId); Log.d("ParseXmlActivity","price is "+price); Log.d("ParseXmlActivity","name is "+name); Log.d("ParseXmlActivity","remark is "+remark); Log.d("ParseXmlActivity","pic is "+pic); } break; default: break; } eventType=xmlPullParser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
解析xml格式数据有pull解析和SAX解析等,我这里用的是pull解析方式,可以用SAX解析方式试一下。得到数据可以有很多用途,这里我只是简单的把数据打印在logcat上。
2、在activity中调用
public class ParseXmlActivity extends Activity { TextView tv_data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.parsexml); tv_data= (TextView) findViewById(R.id.data); final String url="http://192.168.56.1:8080/gxq/UpdateMenuServlet"; new Thread(new Runnable() { @Override public void run() { String xmlData= HttpUtil.httpGet(url); Log.d("xmldata",xmlData); HttpUtil.parseXmlWithPull(xmlData); } }).start(); }}
parse.xml文件只有个TextView就不贴代码了。
这里要注意的是URL:
url="http://192.168.56.1:8080/gxq/UpdateMenuServlet"
url="http://localhost(或127.0.0.1或ip地址):8080(端口号)/projectName/servletName",因为我的服务端和客户端都是同一台电脑,所以不能用localhost或者127.0.0.1,192.168.56.1是我电脑的IP地址。这里简单的开启一个线程来显示数据(主线程不能有耗时操作,不要忘了在Manifes文件里添加网络权限)。完成
运行,观察logcat:
数据出来了,感动啊呜呜。一般实际应用是把数据装在listview里吧。整个过程就这样,有任何错误欢迎批评指教。
0 0
- Android开发用MyEclipse作为服务器端访问MySQL数据库,并把某张表解析成xml格式输出到浏览器,客户端解析获取xml数据
- 通过web服务器访问MySQL数据库,并把数据库中的某张表解析成xml格式输出到浏览器
- 解析XML文档,并把数据存到数据库中
- Android获取服务器端数据(解析XML)
- 用jsp将xml文件解析到网页显示,并把数据提交保存到数据库
- 解析xml文件,并把解析结果存储到android的SQLite数据库
- Android网络编程-----从服务器端获取xml数据并解析
- java解析xml并把节点值存储到数据库中
- 用数据库获取XML格式的数据
- android解析xml格式数据
- Android 解析XML格式数据
- Android解析服务器端发来的xml数据
- Android解析服务器端发来的xml数据
- 客户端以XML格式向服务器端发送数据
- MyEclipse作为服务器连接数据库输出json格式的数据
- Android 开发实践 解析XML和JSON格式的数据
- Android解析数据—XML格式数据
- iOS开发之解析XML格式数据
- 一些常用快捷键
- 欢迎使用CSDN-markdown编辑器
- Android病毒查杀原理
- poj 1179 Polygon(化环为直+区间dp)
- 【Unity3d】如何绘制椭圆
- Android开发用MyEclipse作为服务器端访问MySQL数据库,并把某张表解析成xml格式输出到浏览器,客户端解析获取xml数据
- 联想小新air13触摸屏失灵
- python列表详解
- AcceptEx WSAAccept accept
- QT 学习记录:渐变-QLinearGradient,QRadialGradient,QConicalGradient)
- C语言程序可以没有main函数
- Oracle 的安装与配置
- 第十六周项目1-(1)-小玩文件
- 程序状态字PSW