java.lang.classnotfoundexception:com.mysql.jdbc.driver (react native,android)

qmb5sa22  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(404)

我正在为react本机应用程序开发本机模块。在模块中,我尝试建立一个jdbc连接。我还使用androidstudio加载了mysql-connector-java-8.0.11连接器,但是出现了上述错误。
我已经使用androidstudio将jar文件添加为一个模块。
以下是我的代码:

package com.myproject.helloworld;

import android.widget.Toast;

import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Map;
import java.util.HashMap;

import javax.sql.DataSource;

public class MyModule extends ReactContextBaseJavaModule {

  private static final String DURATION_SHORT_KEY = "SHORT";
  private static final String DURATION_LONG_KEY = "LONG";

  public MyModule(ReactApplicationContext reactContext) {
    super(reactContext);
  }

  @Override
  public String getName() {
    return "MyModule";
  }

  @Override
  public Map<String, Object> getConstants() {
    final Map<String, Object> constants = new HashMap<>();
    constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
    constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
    return constants;
  }

  @ReactMethod
  public void show(String message, int duration, Callback successCallback) {
      Toast.makeText(getReactApplicationContext(), message, duration).show();

      String str = null;

      try{
          Class.forName("com.mysql.jdbc.Driver").newInstance();
          Connection con= DriverManager.getConnection(
          "jdbc:mysql://localhost:3306/dgcis","root","root");

          Statement stmt=con.createStatement();
          ResultSet rs=stmt.executeQuery("select COUNTRY_NAME from exp_imp_brc limit 1;");
          while(rs.next())
          str = rs.getString(1);

          System.out.print(str);

          con.close();

      }catch(Exception e){ str = e.toString();}

      successCallback.invoke("santosh", str );

      }

}

这是我的毕业档案:

apply plugin: "com.android.application"

            import com.android.build.OutputFile

            /**
             * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
             * and bundleReleaseJsAndAssets).
             * These basically call `react-native bundle` with the correct arguments during the Android build
             * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
             * bundle directly from the development server. Below you can see all the possible configurations
             * and their defaults. If you decide to add a configuration block, make sure to add it before the
             * `apply from: "../../node_modules/react-native/react.gradle"` line.
             *
             * project.ext.react = [
             *   // the name of the generated asset file containing your JS bundle
             *   bundleAssetName: "index.android.bundle",
             *
             *   // the entry file for bundle generation
             *   entryFile: "index.android.js",
             *
             *   // whether to bundle JS and assets in debug mode
             *   bundleInDebug: false,
             *
             *   // whether to bundle JS and assets in release mode
             *   bundleInRelease: true,
             *
             *   // whether to bundle JS and assets in another build variant (if configured).
             *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
             *   // The configuration property can be in the following formats
             *   //         'bundleIn${productFlavor}${buildType}'
             *   //         'bundleIn${buildType}'
             *   // bundleInFreeDebug: true,
             *   // bundleInPaidRelease: true,
             *   // bundleInBeta: true,
             *
             *   // whether to disable dev mode in custom build variants (by default only disabled in release)
             *   // for example: to disable dev mode in the staging build type (if configured)
             *   devDisabledInStaging: true,
             *   // The configuration property can be in the following formats
             *   //         'devDisabledIn${productFlavor}${buildType}'
             *   //         'devDisabledIn${buildType}'
             *
             *   // the root of your project, i.e. where "package.json" lives
             *   root: "../../",
             *
             *   // where to put the JS bundle asset in debug mode
             *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
             *
             *   // where to put the JS bundle asset in release mode
             *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
             *
             *   // where to put drawable resources / React Native assets, e.g. the ones you use via
             *   // require('./image.png')), in debug mode
             *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
             *
             *   // where to put drawable resources / React Native assets, e.g. the ones you use via
             *   // require('./image.png')), in release mode
             *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
             *
             *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
             *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
             *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
             *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
             *   // for example, you might want to remove it from here.
             *   inputExcludes: ["android/**", "ios/**"],
             *
             *   // override which node gets called and with what additional arguments
             *   nodeExecutableAndArgs: ["node"],
             *
             *   // supply additional arguments to the packager
             *   extraPackagerArgs: []
             * ]
             */

            project.ext.react = [
                entryFile: "index.js"
            ]

            apply from: "../../node_modules/react-native/react.gradle"

            /**
             * Set this to true to create two separate APKs instead of one:
             *   - An APK that only works on ARM devices
             *   - An APK that only works on x86 devices
             * The advantage is the size of the APK is reduced by about 4MB.
             * Upload all the APKs to the Play Store and people will download
             * the correct one based on the CPU architecture of their device.
             */
            def enableSeparateBuildPerCPUArchitecture = false

            /**
             * Run Proguard to shrink the Java bytecode in release builds.
             */
            def enableProguardInReleaseBuilds = false

            android {
                compileSdkVersion 23
                buildToolsVersion "23.0.1"

                defaultConfig {
                    applicationId "com.myproject"
                    minSdkVersion 16
                    targetSdkVersion 22
                    versionCode 1
                    versionName "1.0"
                    ndk {
                        abiFilters "armeabi-v7a", "x86"
                    }

                }
                splits {
                    abi {
                        reset()
                        enable enableSeparateBuildPerCPUArchitecture
                        universalApk false  // If true, also generate a universal APK
                        include "armeabi-v7a", "x86"
                    }
                }
                buildTypes {
                    release {
                        minifyEnabled enableProguardInReleaseBuilds
                        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
                    }
                }
                // applicationVariants are e.g. debug, release
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        // For each separate APK per architecture, set a unique version code as described here:
                        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
                        def versionCodes = ["armeabi-v7a":1, "x86":2]
                        def abi = output.getFilter(OutputFile.ABI)
                        if (abi != null) {  // null for the universal-debug, universal-release variants
                            output.versionCodeOverride =
                                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
                        }
                    }
                }
            }

            dependencies {
                compile project(':react-native-fetch-blob')
                compile fileTree(dir: "libs", include: ["*.jar"])
                compile "com.android.support:appcompat-v7:23.0.1"
                compile "com.facebook.react:react-native:+"  // From node_modules
                //compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.11'

            }

            // Run this once to be able to run the application with BUCK
            // puts all compile dependencies into folder libs for BUCK to use
            task copyDownloadableDepsToLibs(type: Copy) {
                from configurations.compile
                into 'libs'
            }
tzdcorbm

tzdcorbm1#

找不到模块是您的类路径。也可能是,虽然项目知道该文件,但构建脚本的作用域中可能没有jar文件。
将此添加到gradle依赖项中

// https://mvnrepository.com/artifact/mysql/mysql-connector-java
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.5'

编辑:将mysql connector版本更新为5.1.5,以便与1.7编译代码兼容。

相关问题