Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端),android+mysql

Android studio连接MySQL并完成简单的登录注册功能 首先展示一下完成效果。数据库设计数据库内容登录结果展示此处默认您已经安装好Androidstudio与MySQL软件。接下来需要连接MySQL,首先需要开启网络权限。需要添加一句话,具体位置如图(将项目切换成Android模式比较好找)下载完成后在里边找到mysql-connector-java-5.1.47-bin.jar并复制到粘贴板。然后将Androidstudio的项目页面切换到Project模式,找到如下文件的位置进行粘贴。... 阅读详情


写在最前:

  在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流。

  新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ?

  好了,下面进入正题。

一、开发环境的部署

  程序结构:

    android+servlet+service+mysql

  仅供参考:能实现相关功能即可

    操作系统:ubuntu 14.10

    数据库:mysql-5.5    数据库工具:emma

    服务器:tomcat      服务器工具:Myeclipse 10

    安卓端:真机 android4.4  安卓端工具:eclipse+adt

  注意:

    程序调试过程可能会产生乱码,只需保持所有工具编码方式相同即可。

二、数据库设计

  数据库名称:test

  表名称:student

  建表语句:

CREATE TABLE `student` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `username` char(20) NOT NULL DEFAULT '',
  `password` char(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

  表格视图:

  

三、服务器端设计

  1、新建Web Project,命名为HelloWeb,同时删除掉WebRoot的index.jsp

  2、项目结构图如下:

    这里我们采用servlet编程,所以不需要任何jsp页面。

    LogLet类和RegLet类分别用于处理客户端的登陆和注册请求;Service类用于完成servlet对数据库的具体操作;DBManager类用于进行数据库基本操作;

    左侧是项目图,右侧是web.xml配置文件截图。

  

  3、项目代码:

    DBManager.java

      <1> 私有化DBManager的构造函数,定义一个静态的成员变量,在一个共有方法中实例化该成员变量。若要实例化对象调用此方法即可。

        同一时间该类只能存在一个对象。符合sql对象习惯。 (此方式有缺陷,具体自行搜索)       

       <2> 定义数据库连接、关闭以及增删改查的基本操作,返回结果集。

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 = "root";
    public static final String URL = "jdbc:mysql://localhost: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;
    }
}

    Service.java

      这个简单,根据传参得到sql语句,通过DBManager类的 createInstance() 方法实例化对象,调用本类的操作方法,完成数据操作。

      写到这里,可以预见:下一个类会通过调用本类方法完成登陆/注册的服务。

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 student 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; } }

    LogLet.java

      一个简单的Servlet,用于处理Http请求(get/post)。果然,实例化上一个类的对象,并调用了login方法,返回值为布尔类型。

      RegLet.java和该类近乎相同,只是在 serv.login(username, password); 换成了 serv.register(username, password); 此处省去~

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 = 369840050351775312L;

    public 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");
        System.out.println(username + "--" + password);

        // 新建服务对象
        Service serv = new Service();

        // 验证处理
        boolean loged = serv.login(username, password);
        if (loged) {
            System.out.print("Succss");
            request.getSession().setAttribute("username", username);
            // response.sendRedirect("welcome.jsp");
        } else {
            System.out.print("Failed");
        }

        // 返回信息到客户端
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.print("用户名:" + username);
        out.print("密码:" + password);
        out.flush();
        out.close();

    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

    }

}

四、客户端设计

  1、新建Android App Project,命名为AndroidHTTPDemo

  2、现在开始思考需要什么东西...

     <1> 登陆和注册页面:布局文件

        login.xml , register.xml

     <2> 登陆和注册页面对应的Activity组件,在activity中进行具体操作

        login.java , register.java

     <3> 能够实现Http以get/post方式通信的类

        WebService.java , WebServicePost.java

     <4> 网络通信权限

        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
       <uses-permission android:name="android.permission.INTERNET" />

    OK,项目结构出炉,右侧是Manifeast配置文件的主要内容

  3、现在,我们开始关注具体的代码。

    <1> 首先要做的,登陆注册界面,这个不用多说。我直接放图,大致就是下面这个样子,大家可以按照自己爱好设计。

    (注意一点,因为登陆和注册的xml、activity都是近乎完全一样,最不一样的sql语句我们在之前已经处理过了,所以这里只写其中的一个即可)

  

    <2> 在服务器端编程时我们了解到:服务器端接收客户端发送的信息,对信息进行一系列处理后,最终信息返回到客户端。

      首先要想的,就是获取信息并发送出去,然后接收信息并显示出来。

      获取信息好办,getText()嘛,不好办的是发送,还有发送所需的线程。

      (网络服务由于耗时问题,放在主线程很可能由于网络故障导致ANR;所以要开辟子线程留给http网络服务。当然不使用主线程也可以,只是不推荐)

      

    <3> Login.java 有三点需要注意

      第一个是检测网络状态,只能检测流量,无法检测wifi;

      第二个是在子线程中,我们利用获得的用户名密码调用了http通信类最后返回的info值,不能直接在子线程中更改主线程的页面值,这里用了handle解决。

      第三个是这里有get/post两种http请求方式,两个实现类,我们需要那一个,只要把另一个注释掉即可,返回的数据都是一样的。

package com.httpdemo;

import com.rxz.androidhttpdemo.R;
import com.web.WebService;
import com.web.WebServicePost;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Login extends Activity implements OnClickListener {

    // 登陆按钮
    private Button logbtn;
    // 调试文本,注册文本
    private TextView infotv, regtv;
    // 显示用户名和密码
    EditText username, password;
    // 创建等待框
    private ProgressDialog dialog;
    // 返回的数据
    private String info;
    // 返回主线程更新数据
    private static Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);

        // 获取控件
        username = (EditText) findViewById(R.id.user);
        password = (EditText) findViewById(R.id.pass);
        logbtn = (Button) findViewById(R.id.login);
        regtv = (TextView) findViewById(R.id.register);
        infotv = (TextView) findViewById(R.id.info);

        // 设置按钮监听器
        logbtn.setOnClickListener(this);
        regtv.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.login:
            // 检测网络,无法检测wifi
            if (!checkNetwork()) {
                Toast toast = Toast.makeText(Login.this,"网络未连接", Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
                break;
            }
            // 提示框
            dialog = new ProgressDialog(this);
            dialog.setTitle("提示");
            dialog.setMessage("正在登陆,请稍后...");
            dialog.setCancelable(false);
            dialog.show();
            // 创建子线程,分别进行Get和Post传输
            new Thread(new MyThread()).start();
            break;
        case R.id.register:
            Intent regItn = new Intent(Login.this, Register.class);
            // overridePendingTransition(anim_enter);
            startActivity(regItn);
            break;
        }
        ;
    }

    // 子线程接收数据,主线程修改数据
    public class MyThread implements Runnable {
        @Override
        public void run() {
            info = WebService.executeHttpGet(username.getText().toString(), password.getText().toString());
            // info = WebServicePost.executeHttpPost(username.getText().toString(), password.getText().toString());
            handler.post(new Runnable() {
                @Override
                public void run() {
                    infotv.setText(info);
                    dialog.dismiss();
                }
            });
        }
    }

    // 检测网络
    private boolean checkNetwork() {
        ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connManager.getActiveNetworkInfo() != null) {
            return connManager.getActiveNetworkInfo().isAvailable();
        }
        return false;
    }

}

    <4> WebService.java   

      这里的IP是你的服务器IP,不确定时看下是否能用手机ping工具ping通。

      因为我用的是真机,所以模拟器我还真不太清楚,我简单说一下真机与windows/linux下的服务器网络连接流程,详情请百度。

      ① 你的服务器端程序已发布到互联网:这好办,就是你的IP地址。

      ② 你是在本地电脑上,这要求你的真机和你的电脑在同一个局域网。两种较方便的方法:路由器/笔记本的无线网卡

       是个人都能看出来第二种方便,谁也不能到哪都带个路由器吧,那么好,笔记本开启无线热点,手机wifi连接热点,这是客户端和服务器就在一个局域网内。

       查看笔记本ip地址中的无线网卡地址([win]ipconfig/[lnx]ifconfig -- wlan),加上你的服务器端口号(服务器为开启状态),访问即可。

       conn.setConnectTimeout(3000);需要设置超时时间,否则会执行默认超时时间,30s ?

      接收到的输入流需要先转换成比特位,在转换成string类型。

package com.web;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebService {

    private static String IP = "10.42.0.1:8080";

    // 通过Get方式获取HTTP服务器数据
    public static String executeHttpGet(String username, String password) {

        HttpURLConnection conn = null;
        InputStream is = null;

        try {
            // 用户名 密码
            // URL 地址
            String path = "http://" + IP + "/HelloWeb/servlet/MyServlet";
            path = path + "?username=" + username + "&password=" + password;

            conn = (HttpURLConnection) new URL(path).openConnection();
            conn.setConnectTimeout(3000); // 设置超时时间
            conn.setReadTimeout(3000);
            conn.setDoInput(true);
            conn.setRequestMethod("GET"); // 设置获取信息方式
            conn.setRequestProperty("Charset", "UTF-8"); // 设置接收数据编码格式

            if (conn.getResponseCode() == 200) {
                is = conn.getInputStream();
                return parseInfo(is);
            }

        }catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 意外退出时进行连接关闭保护
            if (conn != null) {
                conn.disconnect();
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return null;
    }

    // 将输入流转化为 String 型 
    private static String parseInfo(InputStream inStream) throws Exception {
        byte[] data = read(inStream);
        // 转化为字符串
        return new String(data, "UTF-8");
    }

    // 将输入流转化为byte型 
    public static byte[] read(InputStream inStream) throws Exception {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, len);
        }
        inStream.close();
        return outputStream.toByteArray();
    }
}

    <5> WebServicePost.java 和上一个大同小异,只不过参数不是放在url中,而是在HashMap中传输,数据传输方式略有不同。

      处理方式不变,还有注意别忘了设置超时。

package com.web;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;

public class WebServicePost {

    private static String IP = "10.42.0.1:8080";

    // 通过 POST 方式获取HTTP服务器数据
    public static String executeHttpPost(String username, String password) {

        try {
            String path = "http://" + IP + "/HelloWeb/servlet/MyServlet";

            // 发送指令和信息
            Map<String, String> params = new HashMap<String, String>();
            params.put("username", username);
            params.put("password", password);

            return sendPOSTRequest(path, params, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    // 处理发送数据请求
    private static String sendPOSTRequest(String path, Map<String, String> params, String encoding) throws Exception {

        List<NameValuePair> pairs = new ArrayList<NameValuePair>();
        if (params != null && !params.isEmpty()) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
            }
        }

        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(pairs, encoding);

        HttpPost post = new HttpPost(path);
        post.setEntity(entity);
        DefaultHttpClient client = new DefaultHttpClient();
        // 请求超时
        client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);
        // 读取超时
        client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
        HttpResponse response = client.execute(post);

        // 判断是否成功收取信息
        if (response.getStatusLine().getStatusCode() == 200) {
            return getInfo(response);
        }

        // 未成功收取信息,返回空指针
        return null;
    }

    // 收取数据
    private static String getInfo(HttpResponse response) throws Exception {

        HttpEntity entity = response.getEntity();
        InputStream is = entity.getContent();
        // 将输入流转化为byte型
        byte[] data = WebService.read(is);
        // 转化为字符串
        return new String(data, "UTF-8");
    }
}

五、运行效果

  以上工作完成后,只需要讲服务器端发布到本地(附上--mysql-jdbc驱动地址--),安卓端发布到手机,确保局域网内部,ip正确,即可正常访问。

  客户端截图:测试成功

           

  服务器端截图:测试成功

  

六、最后

  以上不足之处,还望大家多多指正。如有问题欢迎给我留言。

  代码并未涉及到Session保持,自动登陆等,正在改进中,最终效果应该类似于虎牙直播的登陆注册(刚好举个例子
)

安卓okhttp连接mysql_[转]OkHttp使用完全教程 1. 历史上Http请求库优缺点在讲述OkHttp之前, 我们看下没有OkHttp的时代, 我们是如何完成http请求的.在没有OkHttp的日子, 我们使用HttpURLConnection或者HttpClient. 那么这两者都有什么优缺点呢? 为什么不在继续使用下去呢?HttpClient是Apache基金会的一个开源网络库, 功能十分强大, API数量众多, 但是正是由于庞大的API数量使... 阅读详情

相关推荐

Android通过Http连接MySql数据库(servlet服务器)

借鉴原文地址:http://www.cnblogs.com/yzxk/p/4749440.html先看两个概念:1.android连接数据库的方式有两种       1.通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。       2.android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。2.连接服务器方式:...

多看看世界 2万+

Android通过Http连接MySQL 实现登陆/注册(数据库+service+客户端)【大部分转自帮客之家】

一、开发环境的部署   程序结构:     android+servlet+service+mysql   仅供参考:能实现相关功能即可     操作系统:ubuntu 14.10     数据库:mysql-5.5    数据库工具:emma     服务器:tomcat      服务器工具:Myeclipse 10     安卓端:真机 an

mobei1983的博客 8817

安卓okhttp连接mysql_Android PHP Okhttp3模拟登陆和注册

全部代码:源码地址大致流程经过长达一个星期的研究,网上找了无数实例,大都只有客户端,或者用URLHttpConnection而不是OKHttp3,或者代码太过时根本调不通。经历了数不清的痛苦,东拼西凑总算找到方法跑通了,个中艰辛,真是无法言表。1.登陆使用okhttp3来发送post,将用户名,密码封装成MAP在request里2.服务器端来读取POST,与数据库验证成功再发回登陆成功消息,以JS...

weixin_36292762的博客 654

Android连接MySQL数据库实现登陆功能详细步骤

连接MySQL数据库实现登陆功能详细步骤

Kevin 1669

mysql答题系统android_Android答题APP的设计与实现

还没有整理完,待续……学校开了Android课,最后让交一个大作业。正好拿来练练手,记录下思路。也希望能给有需要的朋友们一些帮助。恩,纯小白教程,大神们可以绕路了。作业的题目是这样的:考试APP系统:1)要求有用户登陆功能:从远程服务器进行登陆验证。2)要有考试测试界面,主要是选择、判断、简答题目测试。3)要有统计成绩界面和错题显示界面。评分标准:1、界面设计占评分的30%2、系统运行正确; 功能...

weixin_29811891的博客 1835

Android Studio连接MySQL实现用户登录和注册功能

本文介绍了如何使用Android Studio连接MySQL数据库,并实现用户登录和注册功能。首先,我们配置了数据库连接和必要的权限。在移动应用开发中,实现用户登录和注册是一个常见的需求。本文将介绍如何使用Android Studio连接MySQL数据库,并通过调用API实现用户登录和注册功能。首先,我们需要在Android Studio中配置数据库连接。通过这些方法,我们可以方便地在Android应用程序中进行用户身份验证和管理。接下来,我们需要创建一个Java类用于处理与数据库的交互。

WELL_CODER的博客 701

Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端),androidmysql

写在最前:   在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流。   新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子不被别人看出来呢-,- ?   好了,下面进入正题。 一、开发环境的部署   程序结构:     android+servlet+service+mysql   仅供参考:能实现相关功能即可   

It_BeeCoder的博客 2万+

安卓开发之简单的通过服务器端验证密码登录

安卓应用程序,通过post请求服务器端Servlet,验证用户名和密码,仅做了密码显示,没有做验证逻辑,小白一枚,希望大家多多指教

Android通过Http连接MySQL 实现登陆/注册(数据库+服务器+客户端)

 https://www.cnblogs.com/yzxk/p/4749440.html 一、开发环境的部署 程序结构: android+servlet+service+mysql 仅供参考:能实现相关功能即可 操作系统:ubuntu 14.10 数据库:mysql-5.5    数据库工具:emma 服务器:tomcat      服务器工具:Myeclips

xingyunqi7的博客 2503

python123题目——个税计算器

类型:简单分支。

m0_62488776的博客 5805

【随机过程】 3 - 随机过程的频域分析1 - 功率谱

随机过程的频域分析 文章目录随机过程的频域分析1. 什么是谱2. 确定信号的频谱2.1 周期信号的频谱2.2 非周期信号的频谱3. 随机信号的谱3.1 随机信号做傅里叶分析的困难3.2 功率谱密度的物理和数学表示形式3.2.1 功率谱密度的物理表示3.2.2 功率谱密度的数学表示3.3 功率谱密度的解读3.3.1 量纲分析3.3.2 谱3.3.3 密度3.3.4 wiener和khinchin3.4 功率谱密度的性质3.4.1 非线性3.4.2 偶函数3.5 wiener-khinchin关系的应用3.6

qq_41741344的博客 3133

Android通过Servlet连接MySQL 实现登陆/注册(数据库+服务器+客户端)

转载至:http://www.bkjia.com/Androidjc/1045369.html#comment Android通过Servlet连接MySQL 实现登陆/注册(数据库+服务器+客户端),androidmysql写在最前:   在实际开发中,相信每个项目都会有用户登陆注册功能,这个实现的方法很多,下面是我实现的方法,供大家交流。   新人发帖,万分紧张,怎么样才能装作一副经常发帖的样子

xlzy 9125

超越图灵机——论人工智能实现的可能性(一)

超越图灵机——论人工智能实现的可能性(一)我认为人工智能是可以实现到逻辑思维这一步的,因为逻辑思维可以完全用字符串来表示,图灵机可以把任意单元置成任意值,在这一点上是完备的,这就足以描述逻辑思维了,所以用图灵机完全可以实现到逻辑思维。当然图灵机会受到哥德尔不完备性的制约,但是逻辑系统也会受到同样的制约,所以我认为完全可以用图灵机实现逻辑思维。那么逻辑思维的本质机理与图灵机是什么关系?逻辑思

太极语言 1万+

android登陆注册

登陆注册功能是好多软件所必须的功能,实现的流程如下:android客户端提交注册的用户名和密码,然后,将用户名和密码保存到mySql数据库中,登陆的时候从Mysql数据库查询是否已经注册过,如未注册跳到注册界面。 实现的效果如下: 需要准备的条件如下: 1.安装好Mysql数据库 2.为Mysql数据库配置驱动jar包,mysql-connector-java-5.1.26-bin.j

程序员Android 1万+

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

本文描述串口DMA收/发机制设计,及STM32串口DMA收/发实现。

只要思想不滑坡,想法总比问题多。 5万+

基于物联网设计的蜂箱智能监测系统设计

为解决传统养蜂业依赖人工、管理效率低下、干扰蜂群等问题,本项目设计并实现了一套基于物联网(IoT)的蜂箱智能监测系统。

685

Servlet+安卓端+mysql实现注册登录操作

笨笨的博主在捣鼓了快一周之后,终于成功实现了Servlet+安卓端的注册登录操作!!!可歌可泣呜呜呜呜。在网上找了很多例子,但是代码都没跑通,加上自己真的很菜(Java编程啥的没什么经验),所以踩了很多坑。现在写一篇小教程,要注意的细节我尽量提及!让大家都能体会到自己实现这个的激动心情。 好,废话不多说,咱们开始! 准备工作 安装Eclipse、mysql、AndroidStudio、Navic...

Clover_pofu的博客 2214

9 硬件工程师笔面试高频知识考点真题解析——运算放大器

运算放大器(运放)摘要 运放是一种高增益、差分输入的模拟集成电路,具有虚短(线性区输入电压相等)和虚断(输入电流为零)特性,支持负反馈(线性放大)和开环/正反馈(饱和区比较)两种工作模式。关键特性包括高输入阻抗、低输出阻抗,理想运放参数(如无限增益)与实际参数(如有限带宽)的差异。 选型要点: 信号特性:直流/低频信号关注失调电压(Vos)、温漂;高频信号侧重带宽(GBW)和压摆率(SR)。 电源条件:单/双电源供电、电压范围及功耗需求(如电池设备需低静态电流)。 精度与噪声:微弱信号需低噪声运放,高精度场

XU157303764的博客 1677

Android开发后台数据接口交互实现简单的登录案例

今天给大家带来的是客户端与服务器端的通信,话不多说,直接上例子:界面今天我们实现一个注册的功能,客户端的界面编写神马的咱就不在这浪费时间了,我这也直接写好了,一个最简单的注册和登录界面:界面写好之后,接下来咱们就去弄接口了。数据库  这里使用的mysql,搭建数据库这一步自己去搞定 ,新建一个test_sql数据库,在里面创建一个user表里面的字段就三个user_id,user_name,use...

qq_34317125的博客 5万+

fatal: unable to access ‘https://github.com/‘: Recv failure: Connection was reset 解决方案

本文主要介绍了fatal: unable to access ‘https://github.com/’: Recv failure: Connection was reset 解决方案,希望能对使用github的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解

实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。

猫敷雪 402

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

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"?> <web-app xmlns:x...

qq_41285455的博客 1670

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

虚拟主机做服务器 PHP+Android客户端+MySql数据库

简介     我们都知道,Android的App分两种,一种是本地的,一种是需要联网的,本地的App缺少交互,无法形成一种用户粘性,连接网络的App在这方面就很好的交互效果,笔者最初在尝试让App连接网络的时候,遇到了很多的困难,其实,这些问题都是很简单。这就是自学的一个弊端吧!在遇到问题的时候无法再短时间内有效的解决。     那么,什么是虚拟主机呢?简单的说就是一个公司,将公司的服务主机业务

一个大金宝的博客 1616

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(二)
下一篇: ubuntu-如何解决错误-Failed to fetch http://dl.google.com/linux/chrome/deb/dists/stable/Release
It_BeeCoder
博客等级 码龄10年 967粉丝 238原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值