Android通过Web与后台数据库交互

2022.01.08 更新

已更新新版本博客,更新内容与原文章相比有点多,因此新开了一篇博客,请戳这里

1 背景

开发一个App与后台数据库交互,基于MySQL+原生JDBC+Tomcat,没有使用DBUtilsJDBC框架,纯粹底层JDBC实现。

这几天踩了很多坑,希望能帮助读者少踩坑。

2 开发环境

  • Windows10
  • 服务器CentOS 7
  • Android Studio 3.5.1
  • IntelliJ IDEA 2019.02
  • MySQL 8.0.17
  • Tomcat 9.0.26

3 准备环境

主要是安装MySQLTomcat,已经安装的可以略过。

3.1 安装MySQL

这个是目前比较新的MySQL版本。

服务器系统是CentOS

其他系统安装看这里:

CentOS使用yum安装即可。

3.1.1 下载并安装MySQL

sudo yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
sudo yum install mysql-community-server

3.1.2 启动服务并查看初始化密码

sudo service mysqld start
sudo grep 'temporary password' /var/log/mysqld.log

3.1.3 修改密码

首先使用root登录:

mysql -u root -p

输入上一步看到的密码,接着使用alter修改密码:

alter mysql.user 'root'@'localhost' identified by 'password';

注意新版本的MySQL不能使用太弱的密码,比如:

在这里插入图片描述
出现这种提示的话则说明密码太弱了,请使用一个更高强度的密码。

3.1.4 允许外部访问

use mysql;
update user set host='%' where user='root';

这个可以根据自己的需要去修改,host='%'表明允许所有的ip登录,也可以设置特定的ip,若使用host='%'的话建议新建一个用户配置相应的权限。

3.1.5 配置防火墙(可选)

一般来说需要在对应的云厂商的防火墙配置中开启响应端口,如图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

其中授权对象可以根据自己的需要更改,0.0.0.0/0表示允许所有的ip

3.2 安装Tomcat

3.2.1 下载并上传到服务器

先去官网下载,下载后上传文件到服务器:

在这里插入图片描述

在这里插入图片描述

笔者使用的是scp命令,使用不熟练的可以戳这里看看

scp apache-tomcat-xxxx.tar.gz username@xx.xx.xx.xx:/

改成自己的用户名和ip

3.2.2 解压

ssh连接到服务器,接着移动到/usr/local并解压:

mkdir /usr/local/tomcat
mv apache-tomcat-xxxx.tar.gz /usr/local/tomcat
tar -xzvf apache-tomcat-xxx.tar.gz

3.2.3 修改默认端口(可选)

修改conf/server.xml文件,一般只需修改

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

中的8080端口,修改这个端口即可。

需要的话自行更改。

3.2.4 启动

运行bin目录下的startup.sh:

cd bin
./startup.sh

3.2.5 测试

浏览器输入:

服务器IP:端口

若出现:

在这里插入图片描述

则表示成功。

3.2.6 开机启动(可选)

建议配置开机启动,修改/etc/rc.local文件,添加:

sh /usr/local/tomcat/bin/startup.sh

这个根据自己的Tomcat安装路径修改,指定bin下的startup.sh

4 建库建表

创建用户表,这里简化操作就不创建新用户不授权了。

这是一个在本地用root登录的示例,请根据实际情况创建并授权用户。

4.1 用户表

CREATE DATABASE userinfo;
USE userinfo;
CREATE TABLE user
(
    id          INT     NOT NULL    PRIMARY KEY   AUTO_INCREMENT,
    name        CHAR(30)    NULL,
    password    CHAR(30)    NULL
);

4.2 导入

mysql -u root -p < user.sql

在这里插入图片描述

这样准备工作就做好了,下面正式开始进行敲代码阶段。

5 后端部分

5.1 创建项目

选择Web Application:
在这里插入图片描述

在这里插入图片描述

5.2 添加依赖库

创建一个叫lib的目录:
在这里插入图片描述

添加两个JAR包(文末提供下载链接):

  • mysql-connector-java-8.0.17.jar
  • javax.servlet-api-4.0.1.jar

在这里插入图片描述

打开Project Structure

在这里插入图片描述

Modules --> + --> JARs or directories

在这里插入图片描述

选择刚才新建的lib下的两个JAR包:

在这里插入图片描述

勾选并apply

在这里插入图片描述

5.3 创建包与类

总共4个包:

  • com.servlet:用于处理来自前端的请求,包含SignUp.javaSignIn.java
  • com.util:主要功能是数据库连接,包含DBUtils.java
  • com.entity:实体类,包含User.java
  • com.dao:操作用户类的类,包含UserDao.java

在这里插入图片描述

5.4 DBUtils

连接数据库的类,纯粹的底层JDBC实现,注意驱动版本

public class DBUtils {
   

    private static Connection connection = null;
    public static Connection getConnection()
    {
   
        try {
   
            Class.forName("com.mysql.cj.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/数据库名字";
            String usename = "账号";
            String password = "密码";
            connection = DriverManager.getConnection(url,usename,password);
        }
        catch (Exception e)
        {
   
            e.printStackTrace();
            return null;
        }
        return connection;
    }

    public static void closeConnection()
    {
   
        if(connection != null)
        {
   
            try {
   
                connection.close();
            }
            catch (SQLException e)
            {
   
                e.printStackTrace();
            }
        }
    }
}

主要就是获取连接与关闭连接两个函数。

String url = "jdbc:mysql://127.0.0.1:3306/数据库名字";
String usename = "账号";
String password = "密码";

这几行根据自己的用户名,密码,服务器ip和库名修改。

注意,MySQL 8.0以上使用的注册驱动的语句是:

Class.forName("com.mysql.cj.jdbc.Driver");

旧版的是:

Class.forName("com.mysql.jdbc.Driver");

5.5 User

User类比较简单,就是就三个字段与Getter+Setter

public class User {
   
    private int id;
    private String name;
    private String password;
    //三个Getter与三个Setter
    //...
}

5.6 UserDao

public class UserDao {
   
    public boolean query(User user)
    {
   
        Connection connection = DBUtils.getConnection();
        String sql = "select * from user where name = ? and password = ?";
        try {
   
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1,user.getName());
            preparedStatement.setString(2,user.getPassword());
            ResultSet resultSet = preparedStatement.executeQuery();
            return resultSet.next();
        }
        catch (SQLException e
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值