首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已添加mysql-connector,但连接仍处于停滞状态

已添加mysql-connector,但连接仍处于停滞状态
EN

Stack Overflow用户
提问于 2019-05-09 02:18:34
回答 1查看 91关注 0票数 0

我尝试向android studio中的数据库发送查询,几年前我用eclipse实现了这一点,但现在我想用这个IDE编写应用程序

首先,我向您展示我的代码:

代码语言:javascript
复制
 private static int getAktuelleArtikelID() throws NumberFormatException, SQLException
    {
        ResultSet ergebnisSet = null;
        int ergebnis;
        try
        {
            Connection verbindung = DriverManager.getConnection("jdbc:mysql://localhost:3306/foo", "bar", "foobar!");
            Statement statement = verbindung.createStatement();
            String abfrage = "SELECT artikel_id FROM Artikel order by 1 desc limit 1";
            ergebnisSet = statement.executeQuery(abfrage);
            ergebnisSet.next();

        }
        catch (Exception exc)
        {
            exc.printStackTrace();
        }

        ergebnis = Integer.parseInt(ergebnisSet.getString(1));
        return ergebnis;

    }

代码似乎在我的观点中是正确的,我有jdbc的问题。

我添加了mysqlconnector5.1.44,如下所示:来自How to Mysql JDBC Driver to android studio的答案2

但是我得到了这个错误:

代码语言:javascript
复制
W/System.err: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
W/System.err:     at java.lang.reflect.Constructor.newInstance0(Native Method)
W/System.err:     at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
W/System.err:     at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
W/System.err:     at com.mysql.jdbc.Util.getInstance(Util.java:408)
W/System.err:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
W/System.err:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
W/System.err:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
W/System.err:     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
W/System.err:     at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2268)
W/System.err:     at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2017)
W/System.err:     at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:779)
W/System.err:     at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
W/System.err:     at java.lang.reflect.Constructor.newInstance0(Native Method)
W/System.err:     at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
W/System.err:     at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
W/System.err:     at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
W/System.err:     at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:569)
        at java.sql.DriverManager.getConnection(DriverManager.java:219)
W/System.err:     at com.example.androidcameraapi2.Database.getAktuelleArtikelID(Database.java:20)
W/System.err:     at com.example.androidcameraapi2.Database.artikelHochladen(Database.java:40)
W/System.err:     at com.example.androidcameraapi2.MainActivity$7.onClick(MainActivity.java:227)
W/System.err:     at android.view.View.performClick(View.java:6597)
W/System.err:     at android.view.View.performClickInternal(View.java:6574)
W/System.err:     at android.view.View.access$3100(View.java:778)
W/System.err:     at android.view.View$PerformClick.run(View.java:25885)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:873)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err:     at android.os.Looper.loop(Looper.java:193)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6669)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
W/System.err: Caused by: android.os.NetworkOnMainThreadException
W/System.err:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1513)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:117)
W/System.err:     at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:105)
        at java.net.InetAddress.getAllByName(InetAddress.java:1154)
W/System.err:     at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:188)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300)
W/System.err:     at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2189)
W/System.err:     at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2222)
W/System.err:   ... 24 more
D/AndroidRuntime: Shutting down VM

graddle也想要更新,但我已经尝试过了,它似乎让一切变得更糟

EN

回答 1

Stack Overflow用户

发布于 2019-05-09 02:49:07

以下是一些建议:

  1. 永远不会将ResultSet传递到方法作用域之外。您可以在一个方法中创建它,并在该方法中清除它。将数据加载到对象中并将这些数据返回给调用者。
  2. 永远不会以这种方式在数据访问类中创建连接。您应该使用池化连接。

SQL将exceptions.

  1. Stick记录到非特定于数据库的
  2. (例如MySQL)。如果一个值应该是唯一的,就应该把这个要求构建到你的模式中,而不是在configuration.
  3. You中从你的应用程序中提取it.
  4. Connection参数的查询应该外部化。
  5. 不应该在应用程序中使用数据库管理员凭据。
  6. 纯文本凭据是进入数据库的邀请。

下面是我如何编写你的方法:

代码语言:javascript
复制
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * JDBC demo.
 * User: mduffy
 * Date: 5/8/19
 * Time: 2:37 PM
 * @link https://stackoverflow.com/questions/56046854/added-mysql-connector-but-connection-is-still-dying?noredirect=1#comment98735575_56046854
 */
public class JdbcDemo {

    private static final String SELECT_SQL = "SELECT artikel_id FROM Artikel ";

    private DataSource dataSource;

    public JdbcDemo(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public List<String> getAktuelleArtikelID() {
        List<String> aktuelleArtikelId = new ArrayList<>();
        ResultSet rs = null;
        Statement st = null;
        try {
            st = this.dataSource.getConnection().createStatement();
            rs = st.executeQuery(SELECT_SQL);
            while (rs.next()) {
                aktuelleArtikelId.add(rs.getString(1));
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(rs);
            close(st);
        }
        return aktuelleArtikelId;
    }

    // Should be in a utility class
    private static void close(ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void close(Statement st) {
        try {
            if (st != null) {
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56046854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档