【问题标题】:Can't connect to SQL Database (Java, Android Studio)无法连接到 SQL 数据库(Java、Android Studio)
【发布时间】:2019-01-27 23:23:29
【问题描述】:

我已经导入了JDBC库,设置为可编译,并赋予App上网权限。 当按下屏幕上的按钮时,它应该连接到数据库并为我提供要在列表中实现的值。

当我按下按钮时,我可以看到它给了我“连接到数据库”文本,但大约半秒后它显示最后一个 catch 块中定义的“异常”。

我在 onPostExecute 中注释掉了这三行代码,因为当我保留它们时,App 只会崩溃。

public void retrieveData(View view) {
    GetData retrieveData = new GetData();
    retrieveData.execute();


}

private class GetData extends AsyncTask<String,String,String> {
    String msg = "";

    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";

    static final String DB_URL = "jdbc:mysql://" + DbStrings.DATABASE_URL + "/" + DbStrings.DATABASE_NAME;

    @Override
    protected void onPreExecute() {
        progress.setText("Connecting to database");
    }

    @Override
    protected String doInBackground(String... strings) {

        Connection conn = null;
        Statement stmt = null;

        try {
            Class.forName(JDBC_DRIVER);
            conn = DriverManager.getConnection(DB_URL, DbStrings.USERNAME, DbStrings.PASSWORD);

            stmt = conn.createStatement();
            String sql = "SELECT * FROM video"; //
            ResultSet rs = stmt.executeQuery(sql);

            while(rs.next()) {
                String name = rs.getString("title");

                buildNames += name + " ### ";

            }

            msg = "Process complete.";

            rs.close();
            conn.close();
            stmt.close();


        } catch(SQLException connError) {
            msg = "An exception was thrown for JDBC.";
            connError.printStackTrace();
        } catch (ClassNotFoundException e) {
            msg = "A Class not found exception was thrown.";
            e.printStackTrace();
        } catch (java.sql.SQLException e) {
            msg = "Exception";
            e.printStackTrace();
        } finally {

            try{
                if(stmt != null) {
                    stmt.close();
                }
            } catch (java.sql.SQLException e) {
                e.printStackTrace();
            }
            try{
                if(conn != null) {
                    conn.close();
                }
            } catch (java.sql.SQLException e) {
                e.printStackTrace();
            }

        }


        return null;
    }

    @Override
    protected void onPostExecute(String msg) {

        progress.setText(this.msg);

        //names = buildNames.substring(0,buildNames.length()-5).split(" ### ");
        //itemAdapter = new ItemAdapter(thisContext, buildNames.substring(0,buildNames.length()-5).split(" ### ")); //crashes
        //namesList.setAdapter(itemAdapter);

    }


}

}

【问题讨论】:

  • 使用 Logcat 检查堆栈跟踪:stackoverflow.com/q/23353173/115145。另外,请理解 JDBC 不是为在移动设备上使用而设计的,这也是 Android 不支持 JDBC 的原因之一。
  • 这是我发现的:java.sql.SQLException: Unknown initial character set index '192' 从服务器收到。可以通过“characterEncoding”属性强制初始客户端字符集。我在教程中看到了这个工作,所以它不应该阻止它工作
  • 您真的不应该从 Android 应用程序直接连接到数据库。
  • 为什么不呢?不安全吗?我应该怎么做?

标签: java android sql android-studio jdbc


【解决方案1】:

检查堆栈跟踪后发现:

java.sql.SQLException: Unknown initial character set index '192' received from server.

所以我知道要搜索什么; 我使用的是过时的 JDBC (3.x) 版本。导入版本 5.1.46 后,它现在可以工作了:)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2015-10-18
    • 2020-08-14
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多