Android studio与mysql-jdbc连接,实现登录界面
- Android studio 与mysql连接-我用的是jdbc连接.坑很多,谨慎使用.首先我们需要在工程里面导入mysql驱动,我用的是5.1.49.在Ocral官网下载就可以了.链接在下面,我也会放在文末.(https://dev.mysql.com/downloads/connector/j/).最好使用5.1.49版本.mysql8.0也可以用这个驱动.8.0以上的驱动总是有各种各样的问题.反正我是放弃了.有勇气的大佬可以去尝试.
下载完之后解压 将jar文件复制到工程文件libs下路径如下 ./myAppliation(我的工程名)/app/libs/ 然后再添加依靠.复制之后将工程调整到project视图,找到app里面的libs,现在libs里面就已经能看到这个驱动了,不过这个时候还是没有完成依靠添加.
右击驱动,然后点击Add AS Library
选择ok 就添加完成了.
这时候我们已经将驱动完全添加了.
- 添加如下目录包,都必须要添加.
创建一个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是可以不做处理的.全部都是博主踩的血坑!!!
- 添加网络权限
完成以上内容之后我们需要添加网络权限,在AndroidManifest.xml里面.
<uses-permission android:name="android.permission.INTERNET" />
- 登录前端
因为这篇文章不是主要讲前端的,所以我们就用最简单的界面.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。
|