云服务器(云数据库)连接Mysql数据库【超详细-少踩雷】

一. 华为云服务器

百度搜索华为云服务,免费领取一个月云服务器/云数据库。我们这里先用云服务器为例。

1.云服务器配置

具体步骤如下:

  1. 选择Windows server 数据中心 64位版本;
  2. 点进实例,点远程登陆实例
  3. 进入系统后,自行下载配置MySQL,这里就不具体写数据库的安装;
  4. 安装好后(我这里用的系统是Linux CentOs 7.x版本,不是Windows系统),在云服务上进入MySQL,Linux命令mysql -uroot -p,进入MySQL;
  5. 进入MySQL后执行CentOs命令:*grant all privileges on.*to ‘root’@’% identified by ‘你的MySQL数据库密码’’ with grant option;**这是允许远程访问配置;
  6. 执行关闭防火墙和数据库开机启动设置systemctl stop firewalld.service;
  7. 安装MySQL我就不详细介绍了,参考其他文章【MySQL安装配置】;
  8. 云服务器配置安全组(放出端口才能连接使用)
    添加规则
     [
    sqlserver端口是1433,相同步骤开放即可
    现在云服务器都准备好了

2.使用远程桌面连接

Windows 64位数据中心版本,则:在本机电脑上,左下角搜索 远程桌面连接
第一栏输入云服务器的公网IP,第二栏输入Administrator
第一栏输入云服务器的公网IP,第二栏输入Administrator
点击连接,则进入了你的云服务器,就不用打开网页远程连接了。
在这里插入图片描述这里就连接成功云服务器了。

CentOS7系统:下载安装Xshell 6
新建在这里插入图片描述
点连接就行了。

二.安装配置MySQL可视化软件

在本机下载软件【Navicat for MySQL】15天试用。
搜索【PatchNavicat】可破解无限时间使用,需要的留下邮箱。

在这里插入图片描述
连接名自定义就行。
第二栏写云服务器公网的IP地址
用户名和密码写你MySQL的账号密码,点连接测试,确定。如果连接不成功即是你云端服务器MySQL没配置好,或者是云服务器安全配置没开放端口,需要自己设置

三.Android Studio

我这里采用的是Android studio软件,
先讲解再贴代码

private String drive=“com.mysql.jdbc.Driver”; //连接数据库的驱动
private String connect=“jdbc:mysql://公网IP地址/数据库名字?autoReconnect=true” 注释 //?autoReconnect=true代表MySQL长连接,由于MySQL8小时不操作即自动断开服务,需还自行连接,有这个即解决自动断开服务的问题
private String mysql_uid=“root”; //数据库用户名
private String mysql_passwd=“密码”; //数据库密码
private Connection cn=null;

还要再libs里添加驱动
在这里插入图片描述

右击,add 添加到build.gradle里
在这里插入图片描述

代码片段

代码片.

 sign_in.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //线程
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                      
                            Class.forName(drive);//加载驱动
                            cn= DriverManager.getConnection(connect,mysql_uid,mysql_passwd); //驱动管理,写入数据,就是数据库连接字符串和数据库账号和密码
                            resultCount=insert();//返回的值
                            Log.e("run: ", String.valueOf(resultCount));
                            // 使用handler,使主线程响应并执行runShowResult方法
                            handler.post(runShowResult);//主线程
                        } catch (ClassNotFoundException e) {
                            Log.e( "insert: ", "连接失败");
                            e.printStackTrace();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                });
                thread.start();//线程运行
            }
        });

响应超过五秒的操作都得开启新线程来运行
Thread thread = new Thread
数据信息循环操作 代码片.

String passwd[] = new String[20];
 String user[] = new String[20];
 String sql_queryALL = "select * from user_login";
Statement st = (Statement) cn.createStatement();
        ResultSet rs = st.executeQuery(sql_queryALL);//执行sql语句
        while (rs.next()){//循环数据库数据,每条数据都保存到数组user里面
            String UserName = rs.getString("user_phone");
            String UserPasswd = rs.getString("user_passwd");
            user[i++]=UserName;
            passwd[j++]=UserPasswd;
        }
        

所有代码,直接贴出来

package com.example.loginqq.Login_item;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.loginqq.R;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class register_QQ_Mactivity extends AppCompatActivity {
    private Button sign_in;
    private ImageView fanhui;
    private EditText user_number,user_passwd;
    private String drive="com.mysql.jdbc.Driver";
    private String connect="jdbc:mysql://IP/数据库名?autoReconnect=true";
    private String mysql_uid="root";//数据库账号
    private String mysql_passwd="****";//数据库密码
    private Connection cn=null;
    private PreparedStatement ps=null;
    private Handler handler = new Handler();
    private EditText editText;
    private int resultCount;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        user_number=findViewById(R.id.register_user);
        user_passwd=findViewById(R.id.register_passwd);
        sign_in=findViewById(R.id.register_btn);
        skip();//跳转执行
    }
    //跳转相关按钮
    private void skip() {
        //返回登陆
        fanhui = findViewById(R.id.return_back);
        fanhui.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(register_QQ_Mactivity.this,Login_QQ_Mactivity.class);
                startActivity(intent);
                finish();
            }
        });

        //注册按钮
        sign_in.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Class.forName(drive);
                            cn= DriverManager.getConnection(connect,mysql_uid,mysql_passwd);
                            resultCount=insert();
                            Log.e("run: ", String.valueOf(resultCount));
                            // 使用handler,使主线程响应并执行runShowResult方法
                            handler.post(runShowResult);
                        } catch (ClassNotFoundException e) {
                            Log.e( "insert: ", "连接失败");
                            e.printStackTrace();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                });
                thread.start();
            }
        });
    }

    private int insert() throws SQLException {
        int Count=1;
        String sql_queryALL = "select * from user_login";
        String sql_insert = "insert into user_login (user_phone,user_passwd) values" + "(" + user_number.getText().toString().trim()
                +","+user_passwd.getText().toString().trim()+ ")";
        //String sql_delete = "delete from test where phone=" + editText.getText().toString().trim();
        Statement st = (Statement) cn.createStatement();
        ResultSet rs = st.executeQuery(sql_queryALL);
        Log.e("insert: ","连接成功" );
        String user[] = new String[20];
        String passwd[] = new String[20];
        int i=0,j=0;
        while (rs.next()){//循环数据库数据,每条数据都保存到数组user里面
            String UserName = rs.getString("user_phone");
            String UserPasswd = rs.getString("user_passwd");
            user[i++]=UserName;
            passwd[j++]=UserPasswd;
        }
        for (i=0;i<user.length;i++){
            //输入的数据和数组挨个比对,一条输入的数据和数组全部数据进行比对,判断是否注册
            if (!user_number.getText().toString().trim().equals(user[i])){
                if(user_number.getText().toString().trim().equals("")) {
                    Looper.prepare();
                    Toast.makeText(getApplicationContext(), "用户名不能为空", Toast.LENGTH_SHORT).show();
                    Looper.loop();
                    break;
                }else if(user_passwd.getText().toString().trim().equals("")){
                        Looper.prepare();
                        Toast.makeText(getApplicationContext(), "密码不能为空", Toast.LENGTH_SHORT).show();
                        Looper.loop();
                        break;
                    }
                else if(user_passwd.getText().toString().length()>20&&user_passwd.getText().toString().length()<=6){
                    Looper.prepare();
                    Toast.makeText(getApplicationContext(), "密码长度在(6,21)之间,请重试", Toast.LENGTH_SHORT).show();
                    Looper.loop();
                    break;
                }else if(checkUsername(user_number.getText().toString().trim())==false){
                    Looper.prepare();
                    Toast.makeText(getApplicationContext(), "请输入正确的手机号", Toast.LENGTH_SHORT).show();
                    Looper.loop();
                    break;
                }
                continue;
            }
            //比对成功则执行else,显示已注册账号
            else if(user_number.getText().toString().trim().equals(user[i]))
            {
                return Count =-1;
            }
            /*if (editText.getText().toString().trim().equals(user[i])){
                Log.e("查看已注册账号", "i:" + user[i]);
                Looper.prepare();
                Toast.makeText(MainActivity.this, "注册失败,已注册",
                        Toast.LENGTH_SHORT).show();
                Looper.loop();
                break;
            }else
            {
                PreparedStatement pst = cn.prepareStatement(sql_insert);
                pst.executeUpdate();
                //Log.e("注册成功: ", mybook);
                Looper.prepare();
                Toast.makeText(MainActivity.this, "注册成功",
                        Toast.LENGTH_SHORT).show();
                Looper.loop();
                break;
            }*/

        }
        //如果执行到已注册账号那一步,则break终止循环,执行下列语句,注册成功
        PreparedStatement pst = cn.prepareStatement(sql_insert);
        pst.executeUpdate();
        Looper.prepare();
        Toast.makeText(register_QQ_Mactivity.this, "注册成功",
                Toast.LENGTH_SHORT).show();
        Looper.loop();
        return Count;
    }

    // 主线程响应方法,用于显示提示气泡
    public Runnable runShowResult = new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            // 弹出气泡
            if(resultCount==-1){
                Toast.makeText(getApplicationContext(), "用户已注册,注册失败", Toast.LENGTH_SHORT).show();
            }

        }
    };


    //判断手机号是否正确
    private boolean checkUsername(String username){
        Pattern pattern = Pattern.compile("^((13[0-9])|(14[5,7,9])|(15[^4])|(18[0-9])|(17[0,1,3,5,6,7,8]))\\d{8}$");
        Matcher matcher = pattern.matcher(username);
        return matcher.matches();
    }




}
//以上思路就是创建连接数据库的字符串,往数据库里加入一个手机号和密码,一条数据,先rs.next()循环获取数据信息,并加入到数组里,再用循环调取数组数据,判断是否存在账号,账号是否正确,正则表达式判断,和为空否。

到这就完毕了

一个简单的云服务连接MySQL就是这些步骤了,目的是注册账号密码到云服务器里的数据库里。

发布了2 篇原创文章 · 获赞 0 · 访问量 34

猜你喜欢

转载自blog.csdn.net/q1210249579/article/details/104984532