IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android studio开发.<大学访客车辆预约管理系统> -> 正文阅读

[移动开发]Android studio开发.<大学访客车辆预约管理系统>

Android studio与mysql-jdbc连接,实现登录界面

  1. Android studio 与mysql连接-我用的是jdbc连接.坑很多,谨慎使用.首先我们需要在工程里面导入mysql驱动,我用的是5.1.49.在Ocral官网下载就可以了.链接在下面,我也会放在文末.(https://dev.mysql.com/downloads/connector/j/).最好使用5.1.49版本.mysql8.0也可以用这个驱动.8.0以上的驱动总是有各种各样的问题.反正我是放弃了.有勇气的大佬可以去尝试.
    下载完之后解压1
    将jar文件复制到工程文件libs下路径如下
    ./myAppliation(我的工程名)/app/libs/
    在这里插入图片描述
    然后再添加依靠.复制之后将工程调整到project视图,找到app里面的libs,现在libs里面就已经能看到这个驱动了,不过这个时候还是没有完成依靠添加.
    在这里插入图片描述

右击驱动,然后点击Add AS Library

在这里插入图片描述
选择ok 就添加完成了.

这时候我们已经将驱动完全添加了.

  1. 添加如下目录包,都必须要添加.
    在这里插入图片描述
    创建一个JDBCUtils类
package com.example.myapplication.utils;


import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCUtils {



    static {

        try {
            Log.v("MainActivity","222");
            Class.forName("com.mysql.jdbc.Driver");//(1)
            Log.v("MainActivity","333");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();

        }

    }

    public static Connection getConn() {

        String ip = "192.168.206.226";
        int port = 3306;
        String dbName = "test";
        String url = "jdbc:mysql://" + ip + ":" + port + "/" + dbName;
        String user = "1111";
        String password = "1111";
        Connection  conn = null;

        try {
            Log.v("MainActivity",url);

           conn = DriverManager.getConnection(url, user, password);//(2)
            Log.v("MainActivity","连接成功");
        }catch (Exception exception){
            exception.printStackTrace();
            Log.v("MainActivity","连接失败");
        }
        return conn;
    }

    public static void close(Connection conn){
        try {
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

}


其中一些奇奇怪怪的日志输出是我调试用的,可以不用添加.
(1) Class.forName(“com.mysql.jdbc.Driver”);
Class.forName()方法要求JVM查找并加载指定的类到内存中,(JVM是java虚拟机的缩写,是Java运行环境的一部分,它是来解析和运行Java程序的.)告诉jvm去com.mysql.jdbc这个路径下找Drive.
(2)jdbc连接数据库需要使用DriverManager类的getConnection()方法,这里面有很多踩坑的地方,百分之50的坑都是因为这里,第一,ip地址,不要用localhost,如果用真机测试,要查看本机ip地址(只需要win+r然后cmd然后ipconfig得到ipv4地址就是我们要用的IP地址),如果要是用模拟机测试的话需要把IP地址改成10.0.0.1 .端口号就是自己的mysql端口号一般来说是3306.第二,user和password分别是数据库用户名和用户名密码,这里的数据库用户名要给到所有权限,除了常规权限之外.主要是远程访问mysql> grant all privileges on . to 用户名@’%’ identified by “password”;并且最好不要用root因为如果用root的话系统会认为不安全,开通权限失败,所以我们这里创建了一个全新的用户并且赋予所有的权限.密码就是用户密码啦,这个没什么所谓的啦…第三,就是时区处理的问题.这里mysql驱动5.0和8.0有很多区别,我们这里说的就是5.0版本.5.0是可以不做处理的.全部都是博主踩的血坑!!!

  1. 添加网络权限
    完成以上内容之后我们需要添加网络权限,在AndroidManifest.xml里面.
     <uses-permission android:name="android.permission.INTERNET" />
  1. 登录前端
    因为这篇文章不是主要讲前端的,所以我们就用最简单的界面.activity_main.xml
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:layout_editor_absoluteX="220dp"
        tools:layout_editor_absoluteY="220dp"
        android:padding="60dp"

        >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">


            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="15sp"
                android:text="账号:" />

            <EditText
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:inputType="textPersonName"
                android:text="" />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">


            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:textSize="15sp"
                android:text="密码:"

                />

            <EditText
                android:id="@+id/password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:ems="10"
                android:inputType="textPersonName"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">



        </LinearLayout>

        <Button
            android:layout_marginTop="60dp"
            android:id="@+id/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录"
            android:onClick="LOGIN"
          />

        <Button
            android:id="@+id/button3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="REG"
            android:text="注册" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>```

大家可以DIY可以做的更好看一点,以后我会继续发帖慢慢完善.

5. MainActivity.java
这里就是我们的后端啦.直接上程序.

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

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

import com.example.myapplication.dao.UserDao;

public class MainActivity extends AppCompatActivity {
// Button button=findViewById(R.id.button3);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Button regbutton=this.findViewById(R.id.button2);

}

public void REG(View view){
   // Log.v("MainActivity","www");

//Intent intent=new Intent(MainActivity.this,RegisterActivity.class);
//startActivity(intent);
startActivity(new Intent(getApplicationContext(),RegisterActivity.class));

}


public void LOGIN(View view){

    EditText EditTextname = (EditText)findViewById(R.id.name);
    EditText EditTextpassword = (EditText)findViewById(R.id.password);

    new Thread(){(1)
        @Override
        public void run() {
            Log.v("MainActivity","www");
            UserDao userDao = new UserDao();
            Log.v("MainActivity","ww");
            boolean a = userDao.login(EditTextname.getText().toString(),EditTextpassword.getText().toString());
            int msg = 0;
            if(a){
                msg = 1;
            }

            hand1.sendEmptyMessage(msg);


        }
    }.start();


}
final Handler hand1 = new Handler()
{
    @Override
    public void handleMessage(Message msg) {

        if(msg.what == 1)
        {
            Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_LONG).show();
            try
            {
                Thread.sleep(1000);//单位:毫秒
            } catch (Exception e) {
            }
(1)在安卓4.0起,为了避免连接失败形成阻塞,连接数据库这边必须要放在子线程里面。创建new thread就可以,要注意一个常识,在子线程内没有办法直接与显示界面交互,需要建立handle。





  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-07 13:50:15  更:2022-02-07 13:51:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:50:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码