繁体   English   中英

无法从Android连接到SQL Server

[英]Can`t connect to SQL server from Android

我想从Android连接到SQL Server。 我想从SQL Server访问数据。 但这并没有建立联系。 请帮我解决这个问题。

我包括了jtds-1.2.7.jar

这是我的MainActivity (我提到程序中出现错误的地方):

try{
    String driver = "net.sourceforge.jtds.jdbc.Driver";
    Class.forName(driver).newInstance();

    conUrl = "jdbc:jtds:sqlserver://192.168.1.15 :1433/Retail_MB;encrypt=fasle;user=sa;password=123;instance=SQLEXPRESS;";
    uname = "sa";
    pass = "123";

    /////// On this statement it gives error...
    connect = DriverManager.getConnection(conUrl,uname,pass);

    Statement statement=connect.createStatement();
    rs=statement.executeQuery(str);

    while(rs.next()){
    Log.w("Data:",rs.getString(0));
    }
    connect.close();

    } catch (Exception e){
    Log.w("Error connection","" + e.getMessage());
    }

在DriverManager.getConnection(conUrl,uname,pass);上给出错误

错误是IOExeption:

socket failed: EACCES (Permission denied)

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.alphahms"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.alphahms.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

问题是什么? Android和SQL Server专家请帮助我。

尝试添加

<uses-permission android:name="android.permission.INTERNET" />

在您的Android清单中。

它允许应用程序打开网络套接字。

第一个EACCES (Permission denied)是因为清单中没有Internet权限:

<uses-permission android:name="android.permission.INTERNET" />

添加后,您得到的ANR应用程序没有响应。 这是因为您将UI线程阻塞了5秒钟或更长时间。 您不应该在UI线程上执行网络请求,而应为它们使用后台线程。 AsyncTask可能是将操作卸载到Backgrond线程的最简单方法。 (由于targetSdkVersion为18且高于11,因此您还应该获得NetworkOnMainThreadException以便在UI线程上执行网络操作-我想您已在未显示的代码中取消了该异常。)

通常,从移动客户端进行JDBC数据库连接是一个坏主意。 JDBC协议专为例如数据中心中的高吞吐量低延迟网络而设计。 移动数据网络运行缓慢且无法有效地使用JDBC。 而是,为您的远程数据库操作创建Web服务,然后将移动应用程序连接到Web服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM