免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11291 | 回复: 12
打印 上一主题 下一主题

[Android] Android如何访问数据库 [复制链接]

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-21 22:00 |只看该作者 |倒序浏览
Android不能直接访问MySQL数据库,我百度了一下,网上的例子是用一个PHP页面作为中介来访问,我不会PHP,因此只好用JSP来完成,作了一个类似的页面,可是Android程序运行起来之后系统还是提示无法访问网络。我用Android上的浏览器访问 http://10.0.2.2:8080/Information_Release_System_Manager/上的页面没有问题,可是用我自己的程序访问的时候,系统地日志里面的数据显示是无法访问网络。


PHP页面范例
  1.     <?php  
  2.         mysql_connect("localhost","yourName","yourPassword");  
  3.         mysql_select_db("yourDB");  
  4.         $q=mysql_query("SELECT * FROM user_info WHERE uName ='".$_REQUEST['name']."'");  
  5.         while($e=mysql_fetch_assoc($q))  
  6.                 $output[]=$e;  
  7.             print(json_encode($output));  
  8.         mysql_close();  
  9.     ?>  
复制代码
我修改之后的JSP页面

  1. public class LoginServlet extends HttpServlet {
  2.         private static final long serialVersionUID = 1L;

  3.         /**
  4.          * @see HttpServlet#HttpServlet()
  5.          */
  6.         public LoginServlet() {
  7.                 super();
  8.                 // TODO Auto-generated constructor stub
  9.         }

  10.         /**
  11.          * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  12.          *      response)
  13.          */
  14.         protected void doGet(HttpServletRequest request,
  15.                         HttpServletResponse response) throws ServletException, IOException {
  16.                 int flag = 0;
  17.                 PrintWriter out;
  18.                 String name = request.getParameter("username");
  19.                 String password = request.getParameter("password");
  20.                 if (this.getUserName(name)) {
  21.                         if (this.getPassword(name, password)) {
  22.                                 flag = 1;
  23.                         } else {
  24.                                 flag = 0;
  25.                         }
  26.                 } else {
  27.                         flag = -1;
  28.                 }

  29.                 response.setContentType("text/html; charset=UTF-8");

  30.                 out = response.getWriter();
  31.                 out.println("flag=" + flag);
  32.                 out.flush();
  33.                 out.close();
  34.         }

  35.         /**
  36.          * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  37.          *      response)
  38.          */
  39.         protected void doPost(HttpServletRequest request,
  40.                         HttpServletResponse response) throws ServletException, IOException {
  41.                 int flag = 0;
  42.                 PrintWriter out;
  43.                 String name = request.getParameter("username");
  44.                 String password = request.getParameter("password");
  45.                 if (this.getUserName(name)) {
  46.                         if (this.getPassword(name, password)) {
  47.                                 flag = 1;
  48.                         } else {
  49.                                 flag = 0;
  50.                         }
  51.                 } else {
  52.                         flag = -1;
  53.                 }

  54.                 response.setContentType("text/html; charset=UTF-8");

  55.                 out = response.getWriter();
  56.                 out.println("flag=" + flag);
  57.                 out.flush();
  58.                 out.close();
  59.         }

  60.         private boolean getUserName(String name) {
  61.                 boolean status = false;
  62.                 Database db = new Database();
  63.                 ResultSet rs = db
  64.                                 .Read("select count(*) from biz_owner where loginName='" + name
  65.                                                 + "';");
  66.                 try {
  67.                         if (rs.next()) {
  68.                                 status = true;
  69.                         } else {
  70.                                 status = false;
  71.                         }
  72.                         rs.close();
  73.                         db.Close();
  74.                 } catch (SQLException e) {
  75.                         e.printStackTrace();
  76.                 }
  77.                 return status;
  78.         }

  79.         private boolean getPassword(String name, String password) {
  80.                 boolean status = false;
  81.                 Database db = new Database();
  82.                 ResultSet rs = db
  83.                                 .Read("select loginName from biz_owner where loginName='"
  84.                                                 + name + "';");
  85.                 try {
  86.                         rs.next();
  87.                         if (rs.getString(1).equals(password)) {
  88.                                 status = true;
  89.                         } else {
  90.                                 status = false;
  91.                         }
  92.                         rs.close();
  93.                         db.Close();
  94.                 } catch (SQLException e) {
  95.                         e.printStackTrace();
  96.                 }
  97.                 return status;
  98.         }
  99. }
复制代码
下面就是Android端的程序代码了,基本也是从网上拷贝的
  1. private static final String ip = "http://10.0.2.2:8080/Information_Release_System_Manager/";
复制代码
  1.         public int login(String jsp, String user, String password) {
  2.                 int status = 0;
  3.                 NameValuePair param1 = new BasicNameValuePair("username", user);
  4.                 NameValuePair param2 = new BasicNameValuePair("password", password);
  5.                 List<NameValuePair> data = new ArrayList<NameValuePair>();
  6.                 data.add(param1);
  7.                 data.add(param2);
  8.                 HttpClient client = new DefaultHttpClient();
  9.                 HttpPost request = new HttpPost(ip + jsp);
  10.                 try {
  11.                         request.setEntity(new UrlEncodedFormEntity(data));
  12.                 } catch (UnsupportedEncodingException e) {
  13.                         e.printStackTrace();
  14.                 }
  15.                 try {
  16.                         HttpResponse response = client.execute(request);
  17.                         HttpEntity entity = response.getEntity();
  18.                         InputStream is = entity.getContent();
  19.                         BufferedReader reader = new BufferedReader(new InputStreamReader(
  20.                                         is, "iso-8859-1"));
  21.                         String line = null;
  22.                         if ((line = reader.readLine()) != null) {
  23.                                 Log.i("resurn String", line);
  24.                                 status = Integer
  25.                                                 .parseInt(line.substring(line.indexOf("=") + 1));
  26.                         }
  27.                 } catch (ClientProtocolException e) {
  28.                         e.printStackTrace();
  29.                 } catch (IOException e) {
  30.                         e.printStackTrace();
  31.                 }
  32.                 return status;
  33.         }
复制代码

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
2 [报告]
发表于 2013-06-21 23:52 |只看该作者
那个用于和Android程序通信的 LoginServlet经过PC端的jsp页面测试,完全没有问题,可以返回一个值,至于那个值需要怎么传递给客户端,我有些不太确定

论坛徽章:
0
3 [报告]
发表于 2013-07-01 11:03 |只看该作者
我在安卓上可以访问H2数据库,远程的没试过

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
4 [报告]
发表于 2013-07-02 00:49 |只看该作者
回复 3# Shaquile


    H2 ,没用过,SQLite只是一个本地文件,而MySQL涉及网络远程访问,貌似不支持

论坛徽章:
0
5 [报告]
发表于 2013-07-02 10:27 |只看该作者
H2是一个嵌入式的DB,很类似sqlite,它支持JDBC的接口,也是一个jar文件,速度很快,关键是不用实现什么DBHelper接口来操作DB。

android上使用MYSQL的问题在于,mysql的JDBC依赖有些类(如:javax.naming)android没有,需要添加依赖包,至今还未搞定

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
6 [报告]
发表于 2013-07-02 12:47 |只看该作者
Shaquile 发表于 2013-07-02 10:27
H2是一个嵌入式的DB,很类似sqlite,它支持JDBC的接口,也是一个jar文件,速度很快,关键是不用实现什么DBH ...


额,这样啊,谢谢你

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
7 [报告]
发表于 2013-07-02 12:47 |只看该作者
Shaquile 发表于 2013-07-02 10:27
H2是一个嵌入式的DB,很类似sqlite,它支持JDBC的接口,也是一个jar文件,速度很快,关键是不用实现什么DBH ...


我的目的是让安卓上的应用程序能够访问PC端服务器上的数据库,这个H2 恐怕不符合我的需求

论坛徽章:
0
8 [报告]
发表于 2013-07-08 11:11 |只看该作者
回复 7# 方兆国

经过一周的调测,终于实现了android下访问本机或远程MYSQL,sql server的正在调试中。。。虽说不建议在android中直接访问DB,不过作为学习,可以试试。

1。andorid主线程缺省不能访问网络(它希望在子线程中实现)。若非要在主线程,要加上一下的代码
  1.                         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads()  
  2.                             .detectDiskWrites().detectNetwork().penaltyLog().build());  
  3.                     StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects()  
  4.                             .detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());  
复制代码
2。在manifest.xml允许android访问网络
  1.     <uses-permission android:name="android.permission.INTERNET"/>
复制代码
3. 要是访问本地,用10。0。2。2,不用127。0。0。1






   

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
9 [报告]
发表于 2013-07-08 18:03 |只看该作者
Shaquile 发表于 2013-07-08 11:11
回复 7# 方兆国

经过一周的调测,终于实现了android下访问本机或远程MYSQL,sql server的正在调试中。。 ...


谢谢你

论坛徽章:
0
10 [报告]
发表于 2013-07-09 12:09 |只看该作者
一个不错的sqlite讲解的文章,希望对你有帮助Android 之 SQLite数据库的使用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP