【问题标题】:how to connect android studio to mysql with jdbc如何使用 jdbc 将 android studio 连接到 mysql
【发布时间】:2019-01-18 00:56:12
【问题描述】:

我已经下载了 mysql-java-connector-5.1 并将其作为库导入

程序正在编译,但无论我在做什么,都会引发连接失败的异常。

我想将数据从应用程序(android studio-java)发送到存储在亚马逊(aws)中的 sql 数据库,我想用树莓派(使用 c++)获取数据。

c++ 完美运行。

我无法连接到 android studio,无法连接到本地主机(mysql 工作台),也无法连接到 aws。

我在网上看到一些模板用于“getConnection”函数中的“url”参数,我使用了这些:

对于本地主机:

String url = "jdbc:mysql://<local ip>:<port>/<schema>

对于aws:

String url = "jdbc:mysql://<endpoint given by aws>:<port>/<schema>

它们都不起作用,请帮助 这是我的代码:

public void test(View view) {

    Connection conn = null;

    try {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    try {

        String url = "jdbc:mysql://192.168.1.17:3306/sys";
        String user = "root";
        String password = "password";

        //local verion - find ip with ifconfig/what is my ip website
        conn = DriverManager.getConnection(url, user, password);

        // Do something with the Connection


    } catch (SQLException ex) {
        // handle any errors
        Log.i("SQLException: " , ex.getMessage());
        Log.i("SQLState: " , ex.getSQLState());
    }

但 conn 始终为空。 我忘了什么吗? * 顺便说一句,我不确定我是否必须使用

Class.forName("com.mysql.jdbc.Driver").newInstance();

但我还是用了它。

这是 printStackTrace 结果: System.err:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。 08-10 19:26:58.223 20891-20891/com.example.asaf.sql W/System.err: at java.lang.reflect.Constructor.newInstance0(Native Method) 08-10 19:26:58.225 20891-20891/com.example.asaf.sql W/System.err: 在 java.lang.reflect.Constructor.newInstance(Constructor.java:430) 08-10 19:26:58.227 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 08-10 19:26:58.228 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.Util.getInstance(Util.java:408) 08-10 19:26:58.230 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) 08-10 19:26:58.232 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898) 08-10 19:26:58.234 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887) 08-10 19:26:58.235 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861) 08-10 19:26:58.238 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2267) 08-10 19:26:58.240 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2016) 08-10 19:26:58.241 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:776) 08-10 19:26:58.243 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47) 08-10 19:26:58.244 20891-20891/com.example.asaf.sql W/System.err: at java.lang.reflect.Constructor.newInstance0(Native Method) 08-10 19:26:58.245 20891-20891/com.example.asaf.sql W/System.err: 在 java.lang.reflect.Constructor.newInstance(Constructor.java:430) 08-10 19:26:58.247 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 08-10 19:26:58.248 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386) 08-10 19:26:58.250 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330) 08-10 19:26:58.251 20891-20891/com.example.asaf.sql W/System.err: at java.sql.DriverManager.getConnection(DriverManager.java:569) 08-10 19:26:58.252 20891-20891/com.example.asaf.sql W/System.err: 在 java.sql.DriverManager.getConnection(DriverManager.java:219) 08-10 19:26:58.254 20891-20891/com.example.asaf.sql W/System.err: 在 com.example.asaf.sql.MainActivity.test(MainActivity.java:45) 08-10 19:26:58.255 20891-20891/com.example.asaf.sql W/System.err: at java.lang.reflect.Method.invoke(Native Method) 08-10 19:26:58.257 20891-20891/com.example.asaf.sql W/System.err: 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 08-10 19:26:58.258 20891-20891/com.example.asaf.sql W/System.err: 在 android.view.View.performClick(View.java:5637) 08-10 19:26:58.259 20891-20891/com.example.asaf.sql W/System.err: 在 android.view.View$PerformClick.run(View.java:22429) 08-10 19:26:58.260 20891-20891/com.example.asaf.sql W/System.err: 在 android.os.Handler.handleCallback(Handler.java:751) 08-10 19:26:58.262 20891-20891/com.example.asaf.sql W/System.err: 在 android.os.Handler.dispatchMessage(Handler.java:95) 08-10 19:26:58.263 20891-20891/com.example.asaf.sql W/System.err: 在 android.os.Looper.loop(Looper.java:154) 08-10 19:26:58.265 20891-20891/com.example.asaf.sql W/System.err: 在 android.app.ActivityThread.main(ActivityThread.java:6119) 08-10 19:26:58.266 20891-20891/com.example.asaf.sql W/System.err:在 java.lang.reflect.Method.invoke(本机方法) 08-10 19:26:58.267 20891-20891/com.example.asaf.sql W/System.err: 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 08-10 19:26:58.269 20891-20891/com.example.asaf.sql W/System.err: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 08-10 19:26:58.272 20891-20891/com.example.asaf.sql W/System.err: 引起: android.os.NetworkOnMainThreadException 08-10 19:26:58.273 20891-20891/com.example.asaf.sql W/System.err: 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1303) 08-10 19:26:58.273 20891-20891/com.example.asaf.sql W/System.err: 在 java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:86) 08-10 19:26:58.274 20891-20891/com.example.asaf.sql W/System.err: 在 java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74) 08-10 19:26:58.275 20891-20891/com.example.asaf.sql W/System.err: 在 java.net.InetAddress.getAllByName(InetAddress.java:752) 08-10 19:26:58.275 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188) 08-10 19:26:58.276 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.MysqlIO.(MysqlIO.java:301) 08-10 19:26:58.277 20891-20891/com.example.asaf.sql W/System.err: 在 com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2188) 08-10 19:26:58.277 20891-20891/com.example.asaf.sql W/System.err: at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2221)

【问题讨论】:

  • 我有一个愚蠢的问题:你有一个运行在 localhost 上的 MySQL 数据库服务器,它监听 3306 吗?你得到的确切错误信息是什么?
  • 这是错误:无法创建与数据库服务器的连接。我知道我通过模拟器运行它,所以我什至写了计算机 ip 而不是 127.0.0.1。此外,我在 aws(亚马逊)中有数据库,但我无法连接。与 c++ 它工作和 java 没有。
  • 请发布ex.printStackTrace()产生的异常堆栈跟踪。您目前基本上忽略了异常。只是打印出错误然后继续,就好像什么都没发生一样是问题的主要原因。另外,我希望您下载的 MySQL Connector/J 版本比 5.1.0 版本更新。
  • 我没有忽略它只是为了测试,我无法通过 getConnection() 的行。我想下载版本 8,但我找不到像 5.1.0 版那样的 java-version-bin.jar。 int 版本 8 我可以找到相同的文件,但没有“bin”字,我无法编译
  • 我添加了 printStackTrace 的结果,感谢您的回应

标签: android mysql jdbc mysql-workbench


【解决方案1】:

这里有一个连接到 microsoft sql express 的工作方法示例

 try {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);

            connection = DriverManager.getConnection("jdbc:jtds:sqlserver://replacewithip:port//DBNAME", "User", "Password");       // Connect to database
            if (connection == null) {
                ConnectionResult = "Verify connection";
                Toast.makeText(activity, ConnectionResult, Toast.LENGTH_LONG).show();
            } else {
                //do something with your connection, in this case I executed a query
                ResultSet rs = null;
                String query = "EXEC AppMovil.INITE_Articulos_Familia '" + codigo  + "'";
                Statement stmt = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);


                //size = cantidad de rows, metodo para obtener cantidad de rows
                rs = stmt.executeQuery(query);
                ResultSetMetaData rsmtd = rs.getMetaData();
                while(rs.next()){
                    ListaConsultaFamilia item = new ListaConsultaFamilia(
                            rs.getString("Codigo"),
                            rs.getString("Descripcion"),
                            rs.getString("Precio")
                    );
                    listaConsultaFamilias.add(item);
                }

                listaConsultaFamilias.size();

                ConnectionResult = " successful";
                isSuccess = true;


                connection.close();
            }

        }catch (Exception ex)
        {
   //catch error while reading
            Looper.prepare();
            isSuccess = false;
            Toast.makeText(activity, "No existen consultas en el periodo seleccionado", Toast.LENGTH_LONG).show();
            ConnectionResult = ex.getMessage();
        }

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 2012-08-27
    • 2023-03-11
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2016-12-29
    • 2012-06-21
    相关资源
    最近更新 更多