ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:19.12KB ,
资源ID:10348847      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10348847.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(关于android通过servlet访问MySql数据库的问题.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

关于android通过servlet访问MySql数据库的问题.docx

1、关于android通过servlet访问MySql数据库的问题 关于android通过servlet访问MySql数据库的问题(附带简单的JSON使用)准备工作 一。tomcat编译servlet要用到servlet.api.jar包,需要存放于C:ProgramFilesJavajdk1.6.0_07jrelibext中或者配置classpath。 二。操作MySql需要下载驱动mm.mysql,mysql-connector-java-3.1.14-bin.jar存放于项目的web-inf/lib目录及tomcat的lib目录下。 三。android程序访问网络需要在AndroidMani

2、fest.xml中声明权限 四。3.0以上系统需要在onCreat方法中写下以下语句,否则会出现android.os.NetworkOnMainThreadException异常。 html view plaincopyStrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build(); StrictMode.setVmPolicy(newStrictMode.VmPolicy.Bui

3、lder() .detectLeakedSqlLiteObjects().detectLeakedClosableObjects() .penaltyLog().penaltyDeath().build(); OK,可以开始了 一。接收端android简易程序html view plaincopypublic class Abc_clientActivity extendsActivity /*Called when the activity is first created. */ Button mButton; TextView mTextView; String content; Ove

4、rride public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); mButton= (Button) findViewById(R.id.button1); mTextView= (TextView) findViewById(R.id.textView1); a(); mButton.setOnClickListener(new Button.OnClickListener() Override public void

5、 onClick(View arg0) try content= Connecting(); /获取返回值 catch (IOException e) e.printStackTrace(); mTextView.setText(content); /在TextView中显示 ); private void a() StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads().detectDiskWrites().detectNetwork() .penaltyLog().build();

6、 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects().detectLeakedClosableObjects() .penaltyLog().penaltyDeath().build(); protected String Connecting() throws ParseException, IOException /这个路径最后会详细说明 String url1 =http:/10.81.36.187:8080/orderdishes/orderdishes_servl

7、et; String url2 = username= + a; String url = url1 + ? + url2; /即相当于http:/10.81.36.187:8080/orderdishes/orderdishes_servlet?username=a,其中的/username对应a,后面会用到 String result = ; System.out.println(1); HttpGet request = new HttpGet(url); /调用servlet的doget方法 System.out.println(2); /在这里执行请求,访问url,并获取响应 Htt

8、pResponse response = new DefaultHttpClient().execute(request); System.out.println(3); /获取返回码,等于200即表示连接成功,并获得响应 if(response.getStatusLine().getStatusCode() = 200) System.out.println(4); result= EntityUtils.toString(response.getEntity(); /获取响应中的数据 System.out.println(result+ result); else System.out.p

9、rintln(连接失败); return result; 二、servlet类(不是在一个工程中写的,所以没有包名,这里的文件名是orderdishes_servlet.java)html view plaincopyimport java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Sta

10、tement; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; public class orderdishes_servlet extends HttpServlet private static final long

11、serialVersionUID = 1L; /* * see HttpServlet#HttpServlet() */ protected void doGet(HttpServletRequest request, /只使用doGet方法 HttpServletResponse response) String name = null; try /获取请求url中携带的参数,及之前的username所对应的a name = newString(request.getParameter(username).getBytes( ISO-8859-1),UTF-8); /mm.mysql的cla

12、ss名为org.gjt.mm.mysql.Driver,登记时必须写成如下格式 Class.forName(org.gjt.mm.mysql.Driver).newInstance(); /其中db为MySql数据库的名字,root为数据库的账号,password为密码,同时使用/useUnicode,characterEncoding,能解决数据库输出时的中文问题 Connection C = DriverManager.getConnection(jdbc:mysql:/localhost/db?user=root&password=123&useUnicode=true&characte

13、rEncoding=8859_1); /代码中使用了absolute,ResultSet.TYPE_SCROOL_SENSITIVE等的目的是为了测试/mm.mysql是否符合jdbc 2.0的规范,虽然我也不懂具体用意 Statement state= C.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); /将查询的结果放在result中,test为表名 ResultSet result=state.executeQuery(select * from test wherename=

14、+name+); if(result!=null) response.setContentType(text/html;charset=UTF-8);/这句必须放在PrintWriter/out=response.getWriter();前面,不然输出中文依然为乱码。 PrintWriter out = response.getWriter(); while(result.next() out.print(用户名:+name+的账号密码为:+result.getString(name)+result.getString(password); else PrintWriter out = res

15、ponse.getWriter(); out.print(用户名不存在); /这个是响应之后返回的数据 catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessException e) e.printStackTrace(); catch (ClassNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace();

16、 三。tomcat中的配置1.在tomcat根目录下建立以下文件夹 E:Tomcat 7.0webappsorderdishes 2.在orderdishes中建立WEB-INF文件夹,里面建个classes文件夹 3.将之前的orderdishes_servlet.java通过javac命令编译成orderdishes_servlet.class放在classes文件夹中 4.然后我们需要定义web.xml文件,这个可以在E:Tomcat 7.0webappsROOTWEB-INF下copy一个,然后加入以下语句 orderdishes_servlet /servlet名称orderdish

17、es_servlet /servlet指向的类文件orderdishes_servlet/orderdishes_servlet /这个是定义web访问时servlet的相对路径 如此,我们之前定义的url格式就是http:/10.81.36.187:8080/orderdishes/orderdishes_servlet,orderdishes是指servlet所在的文件夹名字,/orderdishes_servlet 就是上面定义的相对路径。如果写成servlet/orderdishes_servlet 我们之前定义的url格式就要变成http:/10.81.36.187:8080/ord

18、erdishes/servlet/orderdishes_servlet了 四。在MySQL中新建数据库db,表名为test(MySQl的密码为123 - 就是启动MySQL时需要输入的密码,这个是安装时就需要设置的) name password a 123 b 234因为之前我们的查询语句是select * from test where name=+name+,name=a所以TextView中会显示 用户名:a 的账号密码为:a 123 -以上我们只获取了单条数据,下面是多条的方法-复习了昨天学习的内容,然后开始修改源程序,目前进度是修改获取分类列表数据 ,发现一个问题,就是昨天在例子中

19、返回的只是一条数据,可以正常显示,然后今天是返回多条数据,会出现以下情况:据测试, servlet中执行以下语句PrintWriter out = response.getWriter();out.print(“a ”);out.print(“b”);在返回的数据中通过String result = EntityUtils.toString(response.getEntity();获得的结果是 result=”a b” ,这个结果是一次性的,意思就是执行一次就获得了这个结果,说明数据不是一条 一条发送过来的 猜测的结果是: servlet中是执行完所有out.print(“”);将数据组装完

20、,放在response中然后在发送回去的。所以这样我们就不能实现返回所有分类列表数据,想到的一种可能是在客户端,通过String Accept = result.split(,);分割的方法获得数据,不过这样感觉不好。后来发现使用JSON可能是个不错的选择,然后就开始学习JSON的使用,经过试验,最后成功了. 我们的 方法就是在servlet类中,通过以下语句html view plaincopyStringBuilder responseResult=new StringBuilder(); ResultSet result=state.executeQuery(select * from

21、test); response.setContentType(text/html;charset=UTF-8); PrintWriter out = response.getWriter(); responseResult.append(); while(result.next() responseResult.append(+SortName:+result.getString(sortname)+,); /重点,下有解释 responseResult.deleteCharAt(responseResult.length()-1);/删除最后的”,”号 responseResult.appe

22、nd(); out.print(responseResult.toString(); 也就是说,通过以上语句,将查询出的结果,组装成JSONArray类型,然后以String字符串型返回。接着在客户端进行解析就可以(其中的result即是在数据请求时,通过以下语句获得的String字符串html view plaincopyresult= EntityUtils.toString(response.getEntity(); /获取响应中的数据), 字符串转换成JSON数组,然后通过解析,获取对应的每条数据。方法如下: html view plaincopyList mListDataForSo

23、rt=new ArrayList(); mJsonArray = new JSONArray(result); for(int i=0;imJsonArray.length();i+) JSONObject mJsonObject=(JSONObject)mJsonArray.opt(i); String sortname=mJsonObject.getString(SortName); DishInfo item=new DishInfo(); item.setDishSort(sortname); mListDataForSort.add(item); 当然这只是一种简单的JSON的使用,后续会加入图片的处理以及混合的JSONObject和JSONArray的数据解析。注意:responseResult.append(+SortName:+result.getString(sortname)+,); 如果要封装的数据是其他类型,比如byte和http:/. 类的,一定要这么写responseResult.append(+SortName:+byte+,); 没错,需要加转义字符,为数据两边 加上 双引号 ,这样就不会出现 解析的时候提示 非法字符的错误了。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2