【问题标题】:Android: Async dobackground() not working properly while connecting to databaseAndroid:连接到数据库时异步dobackground()无法正常工作
【发布时间】:2016-02-23 09:35:34
【问题描述】:

我正在尝试使用 AsyncTask 中的 jtds 连接到 mssql 服务器数据库。在线,

con = DriverManager.getConnection(connString);

当它出现在这一行时,在 Execute 函数上的 3 或 4 秒 AsyncTask.java 文件之后以及该应用程序崩溃之后。

这是我目前为止的目标

protected Void doInBackground(Void... params)
    {
        Connection con = null;
        try {
            String driver = "net.sourceforge.jtds.jdbc.Driver";
            Class.forName(driver).newInstance();
            String connString = "jdbc:jtds:sqlserver://dbandroid.mssql.somee.com:1433/dbandroid;";
            con = DriverManager.getConnection(connString,"username","password");
            Log.i("SQLConn", "IsClosed:" + con.isClosed());
        }
        catch(Exception ex)
        {
            Log.e("SQLServerConn",ex.getMessage());
        }
        return null;
    }

在 3 到 4 秒后获取连接线时,它会出现在这里 AsyncTask.java

public synchronized void execute(final Runnable r) {
        mTasks.offer(new Runnable() {
            public void run() {
                try {....

而且sql连接没有问题,因为我已经用相同的用户名和密码将它连接到SSMS

错误日志

02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime: Process: com.example.hamza.sunshine, PID: 15690
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:300)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:  Caused by: java.lang.VerifyError: net/sourceforge/jtds/jdbc/TdsCore
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:359)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.sql.DriverManager.getConnection(DriverManager.java:179)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.sql.DriverManager.getConnection(DriverManager.java:213)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at com.example.hamza.sunshine.MainActivity$SQLServerConn.doInBackground(MainActivity.java:270)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at com.example.hamza.sunshine.MainActivity$SQLServerConn.doInBackground(MainActivity.java:258)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
02-23 05:18:03.704 15690-15737/com.example.hamza.sunshine E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841) 

【问题讨论】:

  • 请在此处粘贴您的崩溃报告,以便更好地帮助您。
  • 我不知道从哪里获得崩溃报告我是新手
  • 它将在LogCat 选项卡中提供。当您的应用程序崩溃时,您将在 logcat 中看到可用的错误日志。复制粘贴到这里。
  • 我已经更新了 Logcat 的详细信息,请查看上方
  • 这看起来不像崩溃日志。我们正在寻找的应该是堆栈跟踪形式的红色。

标签: java android android-asynctask jtds mssql-jdbc


【解决方案1】:

这就是答案。当我收到那个 f*ckin 错误时,我正在使用 jtds-1.3.1。只需将 jtds 降级到 1.3.0 和 BINGO。它将运行良好并成功连接到数据库。我猜这是最新版本的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 2020-11-14
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多