在 Android Studio 中找不到 JDBC 类

Posted

技术标签:

【中文标题】在 Android Studio 中找不到 JDBC 类【英文标题】:JDBC Class not found in Android Studio 【发布时间】:2016-02-16 12:35:39 【问题描述】:

编写了一些简单的代码来在 Netbeans IDE 的控制台中显示数据库的内容,但是当将此代码移植到 android Studio 时,我收到许多 ClassNotFound 错误,有谁知道我如何将 JDBC 类导入 Android Studio 或者我是否有刚刚出现编码错误?

代码:

String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        String DB_URL = "jdbc:mysql://localhost/EMP";

        //  Database credentials
        String USER = "root";
        String PASS = "";

        Connection conn = null;
        Statement stmt = null;
        try
            //STEP 2: Register JDBC driver
            Class.forName("com.mysql.jdbc.Driver");

            //STEP 3: Open a connection
            //System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            //STEP 4: Execute a query
            //System.out.println("Creating statement...");
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT id, first, last, username, password FROM Employees";
            ResultSet rs = stmt.executeQuery(sql);

            //STEP 5: Extract data from result set
            while(rs.next() )
                //Retrieve by column name
                int id  = rs.getInt("id");
                int age = rs.getInt("age");
                String first = rs.getString("first");
                String last = rs.getString("last");


                //Display values
                System.out.print("ID: " + id);
                System.out.print(", Age: " + age);
                System.out.print(", First: " + first);
                System.out.println(", Last: " + last);
            
            //STEP 6: Clean-up environment
            rs.close();
            stmt.close();
            conn.close();
        catch(SQLException se)
            //Handle errors for JDBC
            se.printStackTrace();
        catch(Exception e)
            //Handle errors for Class.forName
            e.printStackTrace();
        finally
            //finally block used to close resources
            try
                if(stmt!=null)
                    stmt.close();
            catch(SQLException se2)
            // nothing we can do
            try
                if(conn!=null)
                    conn.close();
            catch(SQLException se)
                se.printStackTrace();
            //end finally try
            //end try


        

错误:

02-16 07:25:40.285 24180-24180/com.example.georgetucker.youdecide W/System.err: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
02-16 07:25:40.285 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.Class.classForName(Native Method)
02-16 07:25:40.285 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.Class.forName(Class.java:204)
02-16 07:25:40.285 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.Class.forName(Class.java:169)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at com.example.georgetucker.youdecide.LoginActivity.loginButtonOnClick(LoginActivity.java:49)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.reflect.Method.invoke(Method.java:525)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.view.View$1.onClick(View.java:3628)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.view.View.performClick(View.java:4240)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.view.View$PerformClick.run(View.java:17721)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.os.Handler.handleCallback(Handler.java:730)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:92)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.os.Looper.loop(Looper.java:137)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5103)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.reflect.Method.invoke(Method.java:525)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at dalvik.system.NativeStart.main(Native Method)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err: Caused by: java.lang.NoClassDefFoundError: com/mysql/jdbc/Driver
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     ... 18 more
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mysql.jdbc.Driver" on path: DexPathList[[zip file "/data/app/com.example.georgetucker.youdecide-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.georgetucker.youdecide-2, /system/lib]]
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
02-16 07:25:40.295 24180-24180/com.example.georgetucker.youdecide W/System.err:     ... 18 more

感谢收看 :)

【问题讨论】:

【参考方案1】:

我猜你想编写一个从数据库读取数据的简单应用程序。如果是这样的话,你不应该考虑mysql。使用 android 附带的 SQLite,这对于您的 android 手机上的本地数据库的大多数用途来说应该足够了。

但是,如果您打算制作一个真正的应用程序,您将在后端服务器上使用 mysql 并让 android 通过 http(s) 调用它,也许如果您需要,您可以将一些检索到的数据本地存储在您的 sqllite 数据库中.这称为 3 层架构(一种称为 MVC 的设计模式是它的一个很好的应用)。你的安卓应用主要是展示部分,后端服务器负责逻辑和数据库连接。以下是其工作原理的简单介绍(我建议您大致了解一下,您只需要了解一下即可):

如果您是移动编程新手并且不知道现实世界的应用程序是如何工作的(或者它们是如何构成的),我建议您参加由 google 在 udacity 上开发的免费且非常有趣的 android 视频课程(也查看 gradle 课程),您将掌握如何连接到后端的某些东西并获取数据:

udacity android online courses

【讨论】:

是的,这是一个大学编程项目,需要链接到数据库(最终项目将是一个小型社交网络),所以我坚持时间紧迫,我需要最快的解决方案来获得我的看看它在现实世界中的作用,是否没有办法在这个系统中实现 JDBC,因为我已经学会了它的语法?谢谢:-) 我不这么认为 .. 对于 Web 开发人员来说,有些东西可以安装充当 php 和 mysql 服务器的软件包,但我不相信这就是你所需要的 .. 如果你急于草稿,您可以推迟(甚至忽略,尽管我不建议)后端部分.. 只需将其全部本地化,但使用 SQLite.. 相信我这很容易,并且与著名的语法非常相似RDBM 系统,如 mysql(select 是 selectanywhere,weher 子句,ordereby,groupby .. 都一样).. 你知道 mysql,所以你不会遇到任何问题,看看一个简单的教程就可以了跨度> 例如看这个 .. 看起来有点长,但在几个小时内,您将获得访问数据库所需的一切:link .. 当您需要更多理解或概念时,重新上网^_^ 谢谢!我肯定会改用它,因为它看起来更容易而且麻烦更少,最后一个我无法找到答案的问题,它可以与 XAMPP 和/或 WAMPP 等 localhost 服务器程序一起使用吗?跨度> 我将在多个 cmets 中回答 .. 不,如果使用该方法在 android 设备上本地执行所有操作(这实际上不是真正的应用程序,只是一个示例),您不需要像 xampp 或 wampp 之类的东西 .. 但如果你选择正确的方式,作为一个真正简单的应用程序,你可以使用 php 和 mysql 做服务器端并使用 xampp 或 wampp 来管理它,android 应用程序会联系服务器使用互联网 (http) 并从中获取数据(顺便说一句,不难,阅读有关 androidhttpclient 和 json 的信息)

以上是关于在 Android Studio 中找不到 JDBC 类的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Visual Studio 2019 (XAMARIN) 中找不到 Android 库

在 Android Studio 中找不到 MainActivity.java [关闭]

在 Android Studio 的插件中找不到 Android Drawable Importer

在 Android Studio 中找不到“填充父级”[重复]

在 Android Studio 中找不到 Open for Editing

在 Android Studio 中找不到 JDBC 类