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中写入语句,添加 Internet 权限

创建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数据库练习

posted @ 2025-03-13 22:36  vivi_vimi  阅读(37)  评论(0)    收藏  举报