android - 将 Android 应用程序连接到 sql server 数据库

标签 android sql jdbc connection jtds

我对 java 和 android 编程还很陌生。 我正在尝试将 Android 应用程序连接到 Windows 笔记本电脑上安装的 SQL Server 数据库。

我在全网搜索了很多解决方案,但没有成功。 我的情况如下:

  • 我正在 Windows 下使用 ADT 进行编程
  • 我直接在 Galaxy S3 (Jelly Bean 4.1.2) 上运行该应用程序
  • 该应用程序只有一个“连接到数据库”按钮
  • 代码如下(放置在MainActivity.java中):

    public void ConnectToDatabase(View View){
        try {
             // SET CONNECTIONSTRING
             Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
             Connection DbConn = DriverManager.getConnection("jdbc:jtds:sqlserver://12.34.56.78:1433/DatabaseName;user=myusername;password=mypassword");
    
             // CONNECTION OK: SHOW MESSAGE
             Toast.makeText(this, "Connection successful!", Toast.LENGTH_LONG).show();
         }
    }
    

我通过这些方式添加了jtds-1.2.5.jar两次:

  • 在程序包资源管理器下,右键单击应用名称
  • 构建路径\添加外部存档..
  • 手动搜索jtds-1.2.5.jar文件,确认

然后:

  • 手动复制 jtds-1.2.5.jar 文件
  • 在包资源管理器下,右键单击 libs 目录
  • 粘贴

在我的笔记本电脑上,SQL 浏览器服务已启用,端口 1433 已正确打开,并且 Windows 防火墙服务已禁用。我可以从另一台电脑正常连接到我的数据库。

我正在使用 Connectify 与我的 Android 设备共享笔记本电脑的互联网连接。我可以从笔记本电脑成功 ping 通智能手机。我还使用另一台笔记本电脑尝试了此配置,没有出现问题。

当我按下“连接到数据库”按钮时,我收到以下错误消息:

Intent error: Network error IOException: socked failed: EACCES (Permission denied)

我在网上搜索了一下,找到了这个解决方案。将互联网权限放入Manifest文件中:

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

之后,当我按下“连接到数据库”按钮时,应用程序崩溃了。这是 LogCat 的输出:

D/dalvikvm(24311): GC_CONCURRENT freed 180K, 6% free 12426K/13127K, paused 12ms+2ms, total 39ms
D/AndroidRuntime(24311): Shutting down VM
W/dalvikvm(24311): threadid=1: thread exiting with uncaught exception (group=0x40f382a0)
E/AndroidRuntime(24311): FATAL EXCEPTION: main
E/AndroidRuntime(24311): java.lang.IllegalStateException: Could not execute method of the activity
E/AndroidRuntime(24311):    at android.view.View$1.onClick(View.java:3691)
E/AndroidRuntime(24311):    at android.view.View.performClick(View.java:4211)
E/AndroidRuntime(24311):    at android.view.View$PerformClick.run(View.java:17267)
E/AndroidRuntime(24311):    at android.os.Handler.handleCallback(Handler.java:615)
E/AndroidRuntime(24311):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime(24311):    at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(24311):    at android.app.ActivityThread.main(ActivityThread.java:4898)
E/AndroidRuntime(24311):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(24311):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(24311):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
E/AndroidRuntime(24311):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
E/AndroidRuntime(24311):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(24311): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime(24311):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(24311):    at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(24311):    at android.view.View$1.onClick(View.java:3686)
E/AndroidRuntime(24311):    ... 11 more
E/AndroidRuntime(24311): Caused by: java.lang.NullPointerException
E/AndroidRuntime(24311):    at com.example.app1.MainActivity.ConnectToDatabase(MainActivity.java:74)
E/AndroidRuntime(24311):    ... 14 more

有人可以帮我解决这个问题吗?

提前致谢


编辑

我认为应用程序已正确加载 JDBC 驱动程序。应用程序在尝试连接到 SQL 数据库时抛出异常。只要我尝试连接到\SQLEXPRESS 数据库,我就更改连接字符串,如下所示:

Connection DbConn = DriverManager.getConnection("jdbc:jtds:sqlserver://12.34.56.78:1433/DatabaseName;user=myusername;password=mypassword;instance=SQLEXPRESS")

如果我保留“istance=SQLEXPRESS”,应用程序会抛出以下SQLException:

"Unable to get information from SQL Server: 12.34.56.78."

如果我从连接字符串中删除 istance,我收到的错误如下:

Error: null

有什么想法吗? :(

最佳答案

这可能不相关(因为我从未尝试/听说过直接从 Android 应用程序访问 sql 数据库),但是为什么不为数据库创建一个 Web 服务呢?由于您的数据库位于主机上而不是手机存储卡上,因此最终您需要创建一个 Web 服务,以便您的应用程序可以访问数据库。

关于android - 将 Android 应用程序连接到 sql server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16941189/

相关文章:

mysql - 从同一个表中选择和删除

用于将不明确的结果集作为 ArrayList 返回的 Java、MySQL 方法

android - 两个类成员映射到新的最终类

java - 通过 AndEngine 触摸旋转

java - 安全异常:权限被拒绝

MYSQL 通过连接更新未正确连接

mysql - 按结果分组的 SQL 查询未按预期工作

oracle - oracle 8i的jdbc驱动选择

java - 如何验证表中某列是否存在

javascript - React Native Android 原生 UI 组件中的自定义事件