三21 2024-06-09 17:38 采纳率: 81%
浏览 9

android studio连接数据库连不上

package com.example.oracle_work;

import android.content.Context;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseHelper {
    private static final String DB_URL = "jdbc:oracle:thin:@//localhost:1521/orcl";
    private static final String USERNAME = "c##student_user";
    private static final String PASSWORD = "student_password";

    public static Connection connectToDatabase(Context context) {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(DB_URL,USERNAME,PASSWORD);
        } catch (SQLException e) {
            // 捕获 SQLException 异常,并抛出 RuntimeException
            throw new RuntimeException("Failed to connect to database", e);
        }
        return connection;
    }
}



package com.example.oracle_work;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

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

import oracle.jdbc.driver.OracleDriver;

public class MainActivity extends AppCompatActivity {

    private TextView studentInfoTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取 TextView 对象
        studentInfoTextView = findViewById(R.id.student_info_text_view);

        // 连接数据库
        Connection connection = null;
        try {
            // 加载数据库驱动程序
            DriverManager.registerDriver(new OracleDriver());
            // 创建数据库连接
            String url = "jdbc:oracle:thin:@//localhost:1521/orcl";
            String username = "c##student_user";
            String password = "student_password";
            connection = DriverManager.getConnection(url, username, password);

            if (connection != null) {
                // 创建 Statement 对象
                Statement statement = connection.createStatement();

                // 执行查询语句
                String query = "SELECT * FROM students";
                ResultSet resultSet = statement.executeQuery(query);

                // 处理查询结果
                StringBuilder stringBuilder = new StringBuilder();
                while (resultSet.next()) {
                    // 获取查询结果中的数据
                    String studentId = resultSet.getString("STUDENT_ID");
                    String name = resultSet.getString("NAME");

                    // 拼接结果字符串
                    stringBuilder.append("Student ID: ").append(studentId).append(", Name: ").append(name).append("\n");
                }

                // 将结果显示在 TextView 中
                studentInfoTextView.setText(stringBuilder.toString());

                // 关闭结果集和语句
                resultSet.close();
                statement.close();
            } else {
                // 无法连接到数据库,处理错误情况
                Log.e("MainActivity", "Failed to connect to database");
            }

        } catch (SQLException e) {
            e.printStackTrace();
            // 处理查询异常
            Log.e("MainActivity", "SQL Exception: " + e.getMessage());
        } finally {
            // 关闭数据库连接
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />



    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Oracle_work"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


FATAL EXCEPTION: main
Process: com.example.oracle_work, PID: 17239
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/sql/DriverAction;
at com.example.oracle_work.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:8051)
at android.app.Activity.performCreate(Activity.java:8031)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-09 17:38
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码和描述来看,遇到的问题是在尝试访问Oracle数据库时遇到了NoClassDefFoundError,这通常意味着运行环境缺少必要的类库。在Android环境中访问Oracle数据库,你需要确保已经正确地添加了Oracle JDBC驱动到项目中。

    解决方案

    1. 添加依赖

    在Android Studio中,你不能直接将jar文件放入libs目录并引用,因为这种方式不适用于Gradle构建系统。相反,你需要通过Gradle依赖管理来添加Oracle JDBC驱动。在你的app级别的build.gradle文件中,添加以下依赖:

    dependencies {
        implementation 'com.oracle.database.jdbc:ojdbc8:19.3.0.0'
    }
    

    注意:版本号可能需要根据你实际使用的Oracle数据库版本进行调整。

    2. 清理与同步项目

    build.gradle文件修改后,记得执行Build > Clean ProjectBuild > Rebuild Project,以确保新的依赖被正确下载和配置。

    3. 检查权限

    你已经在manifest.xml中添加了INTERNET权限,这是正确的,因为Oracle JDBC驱动可能需要网络连接才能访问数据库服务器。

    4. 检查代码

    确保你的代码中没有其他语法或逻辑错误。在你提供的代码中,DatabaseHelper类是多余的,因为你在MainActivity中直接进行了数据库连接操作。如果你打算使用DatabaseHelper类,确保在MainActivity中正确调用其方法。

    5. 测试连接

    在确认以上步骤无误后,重新运行你的应用,检查是否能成功连接到数据库。如果仍然遇到问题,检查数据库URL、用户名和密码是否正确,以及数据库服务器是否允许来自你的设备或网络的连接。

    注意事项

    • 确保你的Oracle服务器配置允许远程连接。
    • 在开发过程中,考虑使用Logcat来查看更详细的错误信息,这有助于定位问题。
    • 对于生产环境,考虑使用更安全的连接方式,例如使用SSL/TLS加密。

    希望这些建议能帮助你解决问题。如果有任何进一步的疑问或遇到其他问题,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月9日

悬赏问题

  • ¥15 关于#最小二乘法#的问题:OUTPUT显示灰色
  • ¥15 第三方如何控制E8a进行烧录
  • ¥15 关于lua调用DLL的c/c++动态库(相关搜索:数据库)
  • ¥15 openwrt结合智能家居(相关搜索:路由器)
  • ¥15 求一款免费的pdf编辑js,web端用的
  • ¥15 求分析下图晶体与三极管组成的振荡电路
  • ¥100 多线程+连接池+代理 运行一段时间线程阻塞
  • ¥15 关于#单片机#的问题:求一个使用C语言将重力加速度gx,gy,gz积分获取到速度的代码(相关搜索:c语言)
  • ¥15 matlab导致电脑重启问题
  • ¥20 为何R语言love图显示的分类变量点与smd值不一致