android HTTP 链接Mysql数据库实现登陆

1.java web本地服务器,链接数据库实现数据库增、查功能
2.android端通过http访问web服务器

一、web端
1.myeclipse新建java web项目
工程目录

2.web.xml如下配置

<?xml version="1.0" encoding="UTF-8"?>  HelloWeb      LogLet    com.servlet.LogLet        RegLet    com.servlet.RegLet        LogLet    /LogLet        RegLet    /RegLet                  index.html    index.htm    index.jsp    default.html    default.htm    default.jsp  

3.DBManager.java 链接数据库

package com.db; import java.sql.*; public class DBManager {     // 数据库连接常量    public static final String DRIVER = "com.mysql.jdbc.Driver";      public static final String USER = "root";     //用户名    public static final String PASS = "123456";     //密码    public static final String URL = "jdbc:mysql://localhost:3306/test";      //端口3306 数据库名test     // 静态成员,支持单态模式    private static DBManager per = null;    private Connection conn = null;    private Statement stmt = null;     // 单态模式-懒汉模式    private DBManager() {    }     public static DBManager createInstance() {        if (per == null) {            per = new DBManager();            per.initDB();        }        return per;    }     // 加载驱动    public void initDB() {        try {            Class.forName("com.mysql.jdbc.Driver");        } catch (Exception e) {            e.printStackTrace();        }    }     // 连接数据库,获取句柄+对象    public void connectDB() {        System.out.println("Connecting to database...");        try {            conn = DriverManager.getConnection(URL, USER, PASS);            stmt = conn.createStatement();        } catch (SQLException e) {            e.printStackTrace();        }        System.out.println("SqlManager:Connect to database successful.");    }     // 关闭数据库 关闭对象,释放句柄    public void closeDB() {        System.out.println("Close connection to database..");        try {            stmt.close();            conn.close();        } catch (SQLException e) {            e.printStackTrace();        }        System.out.println("Close connection successful");    }     // 查询    public ResultSet executeQuery(String sql) {        ResultSet rs = null;        try {            rs = stmt.executeQuery(sql);        } catch (SQLException e) {            e.printStackTrace();        }        return rs;    }     // 增添/删除/修改    public int executeUpdate(String sql) {        int ret = 0;        try {            ret = stmt.executeUpdate(sql);        } catch (SQLException e) {            e.printStackTrace();        }        return ret;    }}

4.Service.java访问数据库功能实现数据库的增、查功能

package com.service;import java.sql.ResultSet;import java.sql.SQLException;import com.db.DBManager;public class Service {    public Boolean login(String username, String password) {        // 获取Sql查询语句        String logSql = "select * from user where username ='" + username                + "' and password ='" + password + "'";        // 获取DB对象        DBManager sql = DBManager.createInstance();        sql.connectDB();        // 操作DB对象        try {            ResultSet rs = sql.executeQuery(logSql);            if (rs.next()) {                sql.closeDB();                return true;            }        } catch (SQLException e) {            e.printStackTrace();        }        sql.closeDB();        return false;    }    public Boolean register(String username, String password) {            // 获取Sql查询语句        String regSql = "insert into user values('"+ username+ "','"+ password+ "') ";        // 获取DB对象        DBManager sql = DBManager.createInstance();        sql.connectDB();        int ret = sql.executeUpdate(regSql);        if (ret != 0) {            sql.closeDB();            return true;        }        sql.closeDB();                return false;    }}

5.LogLet.java 实现登陆功能的servlet

package com.servlet; import java.io.IOException;import java.io.PrintWriter; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import com.service.Service; public class LogLet extends HttpServlet{ private static final long serialVersionUID = 9036889586892331384L; @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接受客户端信息String username = request.getParameter("username");username = new String(username.getBytes("ISO-8859-1"),"UTF-8");String password = request.getParameter("password");password = new String(password.getBytes("ISO-8859-1"),"UTF-8");System.out.println(username + ":" + password);//新建服务对象Service service = new Service();//验证处理boolean log = service.login(username, password);if( log ){System.out.println("log success");//request.getSession().setAttribute("username", username);}else{System.out.println("log fail");}//返回信息到客户端response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();if( log ){out.print("用户名:" + username);out.print("密码: " + password);}else{out.print("false");}out.flush();out.close();} @Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO 自动生成的方法存根 } }

6.RegLet.java 实现注册功能的servlet

package com.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.service.Service;public class RegLet extends HttpServlet {private static final long serialVersionUID = 9036889586892331384L; @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接受客户端信息String username = request.getParameter("username");username = new String(username.getBytes("ISO-8859-1"),"UTF-8");String password = request.getParameter("password");password = new String(password.getBytes("ISO-8859-1"),"UTF-8");System.out.println(username + ":" + password);//新建服务对象Service service = new Service();//验证处理boolean log = service.register(username, password);if( log ){System.out.println("log success");//request.getSession().setAttribute("username", username);}else{System.out.println("log fail");}//返回信息到客户端response.setCharacterEncoding("UTF-8");response.setContentType("text/html");PrintWriter out = response.getWriter();if( log ){out.print("用户名:" + username);out.print("密码: " + password);}else{out.print("false");}out.flush();out.close();} @Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// TODO 自动生成的方法存根 } }

到这里java web 端完成了
二、Mysql数据库
1.新建数据库test 数据库名test 与java web中的数据库名保持一致
2.建表 包含用户名username字段 和密码 password字段
sql语句

CREATE TABLE user(username VARCHAR(30) primary KEY,PASSWORD VARCHAR(30) NOT NULL);

这里数据库和web 服务器都完成了,然后运行web
双击index.jsp然后运行
1.再浏览器输入http://localhost:8080/HelloWeb/RegLet?username=aaa&password=123回车
如果显示

说明注册功能没问题

2.数据库新建查询 执行sql语句 SELECT * FROM user;

说明注册成功,并向数据库中插入数据成功

3.在浏览器中输入 http://localhost:8080/HelloWeb/LogLet?username=aaa&password=123回车
如果出现

说明登陆功能没问题

到这里服务端没问题并且可以成功运行了

三、Android端

1.工程目录 两个Activity Login登陆功能 Register注册功能

Login.java
注意:链接服务器web部分需要到线程中完成

import android.app.ProgressDialog;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.accessibility.AccessibilityManager;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class Login extends AppCompatActivity implements View.OnClickListener{    private EditText username;    private EditText password;    private Button login;    private TextView info;    private TextView register;    //提示框    private ProgressDialog dialog;    //服务器返回的数据    private String infoString;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        //初始化信息        username = (EditText)findViewById(R.id.username);        password = (EditText)findViewById(R.id.password);        login = (Button)findViewById(R.id.btn_login);        info = (TextView)findViewById(R.id.info);        register = (TextView)findViewById(R.id.register);        //设置按钮监听器        login.setOnClickListener(this);        register.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.btn_login:                //设置提示框                //设置子线程,分别进行Get和Post传输数据                new Thread() {                    @Override                    public void run() {                        try {                            String path = "http://10.0.2.2:8080/HelloWeb/LogLet" + "?username=" + username.getText() + "&password=" + password.getText();                            URL url = new URL(path);                            URLConnection urlConnection = url.openConnection();                            InputStream in = urlConnection.getInputStream();                            printInputStream(in);                        } catch (MalformedURLException e) {                            e.printStackTrace();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                }.start();                break;            case R.id.register:                //跳转注册页面                Intent intent = new Intent(Login.this,Register.class);                startActivity(intent);                break;        }    }    private void printInputStream(InputStream is){        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        StringBuffer sb = new StringBuffer();        String line = null;        try {            while ((line = reader.readLine()) != null) {                sb.append(line + "\n");            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                is.close();            } catch (IOException e) {                e.printStackTrace();            }        }        String rs = sb.toString();        Log.e("登陆信息",rs);    }}

Register.java
注意:链接服务器web部分需要到线程中完成

import android.app.ProgressDialog;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;public class Register extends AppCompatActivity implements View.OnClickListener{    private EditText regUserName;    private EditText regPassWord;    private Button btn_reg;    ProgressDialog dialog;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_register);        //修改标题栏title        ActionBar ac = getSupportActionBar();        ac.setTitle("注册");        //初始化        regUserName = (EditText)findViewById(R.id.regUserName);        regPassWord = (EditText)findViewById(R.id.regPassWord);        btn_reg = (Button)findViewById(R.id.btn_reg);        btn_reg.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.btn_reg:                               new Thread() {                    @Override                    public void run() {                        try {                            String path = "http://10.0.2.2:8080/HelloWeb/RegLet" + "?username=" + regUserName.getText() + "&password=" + regPassWord.getText();                            URL url = new URL(path);                            URLConnection urlConnection = url.openConnection();                            InputStream in = urlConnection.getInputStream();                            printInputStream(in);                        } catch (MalformedURLException e) {                            e.printStackTrace();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                }.start();                break;        }    }    private void printInputStream(InputStream is){        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        StringBuffer sb = new StringBuffer();        String line = null;        try {            while ((line = reader.readLine()) != null) {                sb.append(line + "\n");            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                is.close();            } catch (IOException e) {                e.printStackTrace();            }        }        String rs = sb.toString();        Log.e("注册信息",rs);    }}

布局文件很简单 这里不给出登陆注册

2.AndroidManifest.xml(重点)****
添加网络权限

主界面设为Login.java

                                            

在application中添加 android:usesCleartextTraffic=“true”(重点)

整个AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>                                                                                            

好了android程序写完了,运行

到这里就结束了****实现了android模拟器链接web服务器再链接数据库

但是这里只是实现模拟器链接,如果需要真机链接pc web端服务器就需要内网穿透
(是公网ip请绕过)

四、实现真机访问pc服务器,实现注册、登陆功能
1.很多提供内网穿透服务,这里我们选择花生壳内网穿透

选择新增映射

内网主机填ip地址 控制台 ipconfig/all查看端口号填谢web服务器的端口

确定

将外网访问部分复制到android程序

替换掉里面的10.0.2.2:8080这样

无论哪里的手机,接入什么样的网络都可以链接你PC的web服务器了

最后运行android程序

**源码:**链接:https://pan.baidu.com/s/1RbCKBo7RHxCABOgckmx0Ng
提取码:h7rz

总结:mysql新建数据库,建立web服务器
android端通过http访问PC 机web服务器
重点## 在application中添加 android:usesCleartextTraffic=“true”(重点)
添加网络权限

更多相关文章

  1. 一些好的链接,有空要临幸我哦
  2. Android,一个函数实现Http Get 普通请求
  3. 学习笔记(1):Android(安卓)WebRTC 实现1V1实时音视频通信-node.js
  4. Android使用post方式上传图片到服务器的方法
  5. Android(安卓)SQlite数据库的使用(二)
  6. Android(安卓)FloatingActionButton: FloatingActionsMenu向下伸
  7. Android(安卓)SQLite 数据库 java.lang.IllegalStateException:
  8. Android(安卓)-- sqlite数据库随apk发布
  9. Android(安卓)客户端通过内置API(HttpClient) 访问 服务器(用Spri

随机推荐

  1. android原生分享遇到的一个小问题
  2. 【Android】音乐播放器边播边缓存(二)Andro
  3. 翻译Android USB HOST API
  4. Android 中自定义权限
  5. Android Intent详解
  6. Android 解决65535的限制 使用android-su
  7. Android(安卓)GPRS的自动打开与关闭。
  8. 【初用Android Studio】快捷键之代码提示
  9. Jollen 的 Android 教學,#17: 樣式設計(St
  10. Android(安卓)开发艺术探索笔记之八 --