今天要连接数据库,但是耽搁了好几天都没有成功,显示的是
就很烦,所以我今天就专注解决这个问题(mysql远程连接的创建),参考csdn的https://blog.csdn.net/m0_48958478/article/details/121704034这个链接,只要给root的密码改一下就可以解决
注意:!!!!!!!!!我的root的密码已经修改了,以后一定要记得用新密码。
下面是我的注册登录注销app的基本流程:
我的文件路径大概是这样的:

创建好空项目sync之后,在app下创建一个文件夹libs,接下来就要导入jar包,找到文件中的mysql驱动jar包,导入libs如图:

注意:一定要是有-bin的
然后点击add as library

之后就可以在project目录那里换成Android添加java文件和桌面等配置了
jdbcHelper
点击查看代码
package com.example.login.helper;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class jdbcHelper {
// MySql数据库的MySQL 数据库的连接 URL,包括主机名、端口号和数据库名称。
static String url = "jdbc:mysql://我的计算机端口号:3306/login";
// MySql数据库的用户名。
static String name = "root";
// MySQL 数据库的密码。
static String psw = "我的密码";
public static Connection getCon() {
Connection con = null;
try {
// 加载 MySQL JDBC 驱动程序。
Class.forName("com.mysql.jdbc.Driver");
// 使用 DriverManager.getConnection 方法尝试建立与 MySQL 数据库的连接
con = (Connection) DriverManager.getConnection(url,name,psw);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return con;
}
}
点击查看代码
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.example.login.helper.jdbcHelper;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainActivity extends AppCompatActivity {
EditText uname,upsw;
TextView zc,zx;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uname = findViewById(R.id.uname);
upsw = findViewById(R.id.upsw);
zc = findViewById(R.id.zc);
zx = findViewById(R.id.zx);
btn = findViewById(R.id.login);
// 登录按钮点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个新线程来执行登录操作
new Thread(new Runnable() {
@Override
public void run() {
// 获取到 MySQL 数据库的连接
Connection con = jdbcHelper.getCon();
// 准备一个 SQL 查询语句来检查用户凭据
String sqlStr = "select * from userinfo where uname=? and psw=?";
try {
// 创建一个 PreparedStatement 对象
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
// 设置查询参数
ps.setString(1,uname.getText().toString());
ps.setString(2,upsw.getText().toString());
// 进行查询
ResultSet rs = ps.executeQuery();
// 使用 Looper 来更新 UI
Looper.prepare();
// 判断查询结果是否存在
if(rs.next()) {
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();
}
// 结束 Looper
Looper.loop();
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
}
});
// 跳转到注册页面按钮点击事件
zc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
}
});
// 跳转到注销页面按钮点击事件
zx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,MainActivity3.class);
startActivity(intent);
}
});
}
}
点击查看代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="登录"
android:textStyle="bold"
android:layout_gravity="center"></TextView>
<EditText
android:id="@+id/uname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名"
android:paddingLeft="10dp"></EditText>
<EditText
android:id="@+id/upsw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:paddingLeft="10dp"></EditText>
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"></Button>
<TextView
android:id="@+id/zc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册"
android:textSize="17sp"
android:layout_gravity="center"></TextView>
<TextView
android:id="@+id/zx"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注销"
android:textSize="17sp"
android:layout_gravity="center"></TextView>
</LinearLayout>
点击查看代码
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.login.helper.jdbcHelper;
import com.mysql.jdbc.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainActivity2 extends AppCompatActivity {
EditText uname,upsw;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
uname = findViewById(R.id.uname);
upsw = findViewById(R.id.upsw);
btn = findViewById(R.id.login);
// 注册按钮点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个新线程来执行注册操作
new Thread(new Runnable() {
@Override
public void run() {
// 获取到 MySQL 数据库的连接
Connection con = jdbcHelper.getCon();
// 准备一个 SQL 查询语句来检查用户凭据
String sqlStr = "select * from userinfo where uname=?";
try {
// 创建一个 PreparedStatement 对象
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
// 设置查询参数
ps.setString(1,uname.getText().toString());
// 进行查询
ResultSet rs = ps.executeQuery();
// 使用 Looper 来更新 UI
Looper.prepare();
// 判断查询结果是否存在
if(rs.next()) {
// 用户名已存在
Toast.makeText(MainActivity2.this,"用户名已存在",Toast.LENGTH_SHORT).show();
} else {
// 注册
String sqlStr1 = "insert into userinfo(uname,psw) values(?,?)";
try {
// 创建一个新的 PreparedStatement 对象
PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
// 设置插入参数
ps1.setString(1,uname.getText().toString());
ps1.setString(2,upsw.getText().toString());
// 执行插入操作
int rows = ps1.executeUpdate();
// 判断插入是否成功
if(rows > 0) {
// 更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity2.this,"注册成功",Toast.LENGTH_SHORT).show();
}
});
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 结束 Looper
Looper.loop();
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}
点击查看代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="注册"
android:textStyle="bold"
android:layout_gravity="center"></TextView>
<EditText
android:id="@+id/uname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名"
android:paddingLeft="10dp"></EditText>
<EditText
android:id="@+id/upsw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:paddingLeft="10dp"></EditText>
<Button
android:id="@+id/login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="注册"></Button>
</LinearLayout>
点击查看代码
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.login.helper.jdbcHelper;
import com.mysql.jdbc.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainActivity3 extends AppCompatActivity {
EditText uname,upsw;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
uname = findViewById(R.id.uname);
upsw = findViewById(R.id.upsw);
btn = findViewById(R.id.login);
// 注销按钮点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个新线程来执行注销操作
new Thread(new Runnable() {
@Override
public void run() {
// 获取到 MySQL 数据库的连接
Connection con = jdbcHelper.getCon();
// 准备一个 SQL 查询语句来检查用户凭据
String sqlStr = "select * from userinfo where uname=? and psw=?";
try {
// 创建一个 PreparedStatement 对象
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
// 设置查询参数
ps.setString(1,uname.getText().toString());
ps.setString(2,upsw.getText().toString());
// 进行查询
ResultSet rs = ps.executeQuery();
// 使用 Looper 来更新 UI
Looper.prepare();
// 判断查询结果是否存在
if(rs.next()) {
// 用户存在,执行注销操作
String sqlStr1 = "delete from userinfo where uname=?";
try {
// 创建一个 PreparedStatement 对象来执行注销操作
PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
// 设置注销参数
ps1.setString(1,uname.getText().toString());
// 执行注销操作
int rows = ps1.executeUpdate();
// 判断注销是否成功
if(rows > 0) {
// 注销成功,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"注销成功",Toast.LENGTH_SHORT).show();
}
});
} else {
// 注销失败,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"注销失败",Toast.LENGTH_SHORT).show();
}
});
}
} catch (SQLException e) {
e.printStackTrace();
}
} else {
// 用户不存在,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
}
});
}
// 结束 Looper
Looper.loop();
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}
点击查看代码
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.login.helper.jdbcHelper;
import com.mysql.jdbc.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainActivity3 extends AppCompatActivity {
EditText uname,upsw;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
uname = findViewById(R.id.uname);
upsw = findViewById(R.id.upsw);
btn = findViewById(R.id.login);
// 注销按钮点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个新线程来执行注销操作
new Thread(new Runnable() {
@Override
public void run() {
// 获取到 MySQL 数据库的连接
Connection con = jdbcHelper.getCon();
// 准备一个 SQL 查询语句来检查用户凭据
String sqlStr = "select * from userinfo where uname=? and psw=?";
try {
// 创建一个 PreparedStatement 对象
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
// 设置查询参数
ps.setString(1,uname.getText().toString());
ps.setString(2,upsw.getText().toString());
// 进行查询
ResultSet rs = ps.executeQuery();
// 使用 Looper 来更新 UI
Looper.prepare();
// 判断查询结果是否存在
if(rs.next()) {
// 用户存在,执行注销操作
String sqlStr1 = "delete from userinfo where uname=?";
try {
// 创建一个 PreparedStatement 对象来执行注销操作
PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
// 设置注销参数
ps1.setString(1,uname.getText().toString());
// 执行注销操作
int rows = ps1.executeUpdate();
// 判断注销是否成功
if(rows > 0) {
// 注销成功,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"注销成功",Toast.LENGTH_SHORT).show();
}
});
} else {
// 注销失败,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"注销失败",Toast.LENGTH_SHORT).show();
}
});
}
} catch (SQLException e) {
e.printStackTrace();
}
} else {
// 用户不存在,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
}
});
}
// 结束 Looper
Looper.loop();
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}
点击查看代码
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.login.helper.jdbcHelper;
import com.mysql.jdbc.PreparedStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainActivity3 extends AppCompatActivity {
EditText uname,upsw;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
uname = findViewById(R.id.uname);
upsw = findViewById(R.id.upsw);
btn = findViewById(R.id.login);
// 注销按钮点击事件
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个新线程来执行注销操作
new Thread(new Runnable() {
@Override
public void run() {
// 获取到 MySQL 数据库的连接
Connection con = jdbcHelper.getCon();
// 准备一个 SQL 查询语句来检查用户凭据
String sqlStr = "select * from userinfo where uname=? and psw=?";
try {
// 创建一个 PreparedStatement 对象
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
// 设置查询参数
ps.setString(1,uname.getText().toString());
ps.setString(2,upsw.getText().toString());
// 进行查询
ResultSet rs = ps.executeQuery();
// 使用 Looper 来更新 UI
Looper.prepare();
// 判断查询结果是否存在
if(rs.next()) {
// 用户存在,执行注销操作
String sqlStr1 = "delete from userinfo where uname=?";
try {
// 创建一个 PreparedStatement 对象来执行注销操作
PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
// 设置注销参数
ps1.setString(1,uname.getText().toString());
// 执行注销操作
int rows = ps1.executeUpdate();
// 判断注销是否成功
if(rows > 0) {
// 注销成功,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"注销成功",Toast.LENGTH_SHORT).show();
}
});
} else {
// 注销失败,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"注销失败",Toast.LENGTH_SHORT).show();
}
});
}
} catch (SQLException e) {
e.printStackTrace();
}
} else {
// 用户不存在,更新 UI
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity3.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
}
});
}
// 结束 Looper
Looper.loop();
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
}
浙公网安备 33010602011771号