as直接连接数据库
我们已经学习了springboot和as前后端分离实现Android连接数据库,今天试试直接在Android连接数据库:
我们在使用implementation("mysql:mysql-connector-java:5.1.47")导入依赖时出现了错误,所以这里用本地配置,导入jar包;

在build.gradle中导入本地jar包:

build.gradle
找到mysql-connector-java-5.1.47.jar,在app路径下新建一个libs目录,粘贴,如下:

在AndroidManifest.xml中写入

创建JDBCHelper类:
package com.app.newcoursedemo;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCHelper {
// MySql数据库的MySQL 数据库的连接 URL,包括主机名、端口号和数据库名称
static String url = "jdbc:mysql://10.0.2.2:3306/login?serverTimezone=UTC";
// MySql数据库的用户名
static String name = "root";
// MySQL 数据库的密码
static String psw = "123456";
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;
}
}
xml文件完成前端页面的构建:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入课程名"/>
<EditText
android:id="@+id/teacher"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入任课教师"/>
<EditText
android:id="@+id/loc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入上课地点"/>
<Button
android:id="@+id/confirm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="提交"></Button>
</androidx.appcompat.widget.LinearLayoutCompat>
在MainActivity中实现事件实现,完成数据库数据添加:
package com.app.newcoursedemo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MainActivity extends AppCompatActivity {
private EditText name, teacher, loc;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = findViewById(R.id.name);
teacher = findViewById(R.id.teacher);
loc = findViewById(R.id.loc);
btn = findViewById(R.id.confirm); // 修改为布局文件中的 ID
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开启一个新线程用来执行数据库操作
new Thread(new Runnable() {
@Override
public void run() {
// 获取数据库连接
Connection con = JDBCHelper.getCon();
if (con == null) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "数据库连接失败", Toast.LENGTH_SHORT).show();
}
});
return;
}
String sqlStr = "select * from course where name=?";
try {
PreparedStatement ps = (PreparedStatement) con.prepareStatement(sqlStr);
ps.setString(1, name.getText().toString());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "课程已存在", Toast.LENGTH_SHORT).show();
}
});
} else {
String sqlStr1 = "insert into course(id,name,teacher,loc) values(null,?,?,?)";
try {
PreparedStatement ps1 = (PreparedStatement) con.prepareStatement(sqlStr1);
ps1.setString(1, name.getText().toString());
ps1.setString(2, teacher.getText().toString());
ps1.setString(3, loc.getText().toString());
int rows = ps1.executeUpdate();
if (rows > 0) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "提交成功", Toast.LENGTH_SHORT).show();
//finish(); // 结束当前 Activity
}
});
}
} catch (SQLException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "提交失败", Toast.LENGTH_SHORT).show();
}
});
}
}
} catch (SQLException e) {
e.printStackTrace();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "查询失败", Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
});
}
}
最后就实现了as实现前后端连接数据库;
不过在 Android 应用中直接使用 JDBC 连接 MySQL 数据库是不推荐的,因为这会阻塞主线程,导致应用无响应(ANR),所以这个方法只适用于基本的as数据库练习

浙公网安备 33010602011771号