几天以来,我一直面临一个问题。我创建了一个带有按钮的 android 应用程序。单击按钮时,它应该从 sql server 获取数据。我已经为连接字符串提供了我的 IP,即 192.168.xx,这个应用程序在模拟器上成功运行。但是当我从三星 Galaxy 手机运行应用程序时,并没有连接到 sql server。这个问题已经发布了很多次,我对此做了很多研究,但找不到正确的答案。我对连接字符串感到困惑。我应该使用 10.0.2.2 还是 127.0.1.1 还是我的静态 IP。提前感谢您的帮助。我会很感激我得到的答复。请帮帮我!!!
4 回答
添加import android.util.Log;
到代码的顶部,并将 catch 语句中的行从e1.getMessage();
更改为Log.e("DBDebug", e1.getMessage());
然后在连接 USB 电缆的情况下再次在手机上运行此代码。如果您将 ADT 与 eclipse 一起使用,请在 logcat 窗口中添加一个标记过滤器作为“DBDebug”。这将显示您的应用程序的所有调试消息,并将捕获任何错误消息。查看一下,看看 jdbc 是否报告了任何错误。
或者,如果您使用控制台中的 android 工具,则命令为adb logcat -s "DBDebug"
可以使用 USB 数据线在 Android 设备和 PC 之间创建网络,但这比通过将手机连接到 WiFi 来使用已经工作的现有网络要复杂得多。
在运行 SQL 服务器的计算机上,打开命令窗口/控制台并键入“ipconfig”。你会看到类似的东西。读取 IPv4 地址的行是您的 android 应用程序将用于连接到 SQL 服务器的 IP 地址。
Ethernet adapter Local Area Connection:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::e4f4:7f27:bb97:ac87%10
IPv4 Address. . . . . . . . . . . : 192.168.0.7
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
您还需要确保没有防火墙阻止通过网络连接到 SQL 服务器。
根据您的 SQL 服务器的设置方式,它可能只允许从本地主机访问,而不是通过网络访问。确保您已在 SQL Server 中配置了一个用户,并且没有尝试以 root 用户身份进行连接。出于安全原因,默认 SQL 用户通常只允许本地主机连接。我相信这可能是您的问题,您需要创建一个能够通过网络访问服务器的用户。
如果您使用的是 MySQL,则语法将类似于以下内容:
CREATE USER 'david'@'192.168.0.0/255.255.255.0';
例如,如果您的网络在 192.168.1.xxx 范围内,您可以更改上面的行以反映这一点。
这是我正在使用的代码。我有一个数据库 SysTestNew。我正在从表中导入各方并将它们添加到我的 sqlite 数据库中。我在我的按钮上调用 importdata()。这在模拟器中运行良好,但在我的三星手机上运行良好。
String userName = "xxxxxx";
String password = "xxxxx";
String url = "jdbc:jtds:sqlserver://192.168.x.x:1433/SysTestNEW";
Connection conn;
String ACCODE, ACC_DESC, Address, Phone, Mobile, Area_Code, AREA_DESC,
ItemCode, ItemDesc, itemgroup_code, ITEMSUBGRP, unit, SaleRate,
getsalesmanname, getareaval, getgrpval;
DatabaseOperations db = new DatabaseOperations(this);
Button btnback, btnimport, btnimportitem;
Spinner spinareaname, spinitemname;
CheckBox chkareaall, chkitemall;
public void importdata() {
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, userName, password);
Toast.makeText(getApplicationContext(), "Connection open",
Toast.LENGTH_LONG).show();
Statement stmt = conn.createStatement();
ResultSet reset;
if (!chkareaall.isChecked()) {
getareaval = spinareaname.getSelectedItem().toString();
reset = stmt
.executeQuery("select am.ACCODE,am.ACC_DESC,cm.Address,cm.Phone,cm.Mobile,cm.Area_Code,ar.AREA_DESC from ACCMASTER am left join Custmaster cm on am.ACCODE=cm.Accode left join AREA ar on cm.Area_Code = ar.AREA_CODE where am.GROUP_ID='DR' and ar.AREA_DESC='"
+ getareaval + "'");
} else {
reset = stmt
.executeQuery("select am.ACCODE,am.ACC_DESC,cm.Address,cm.Phone,cm.Mobile,cm.Area_Code,ar.AREA_DESC from ACCMASTER am left join Custmaster cm on am.ACCODE=cm.Accode left join AREA ar on cm.Area_Code = ar.AREA_CODE where am.GROUP_ID='DR'");
}
if (reset != null) {
while (reset.next()) {
ACCODE = reset.getString(1);
ACC_DESC = reset.getString(2);
Address = reset.getString(3);
Phone = reset.getString(4);
Mobile = reset.getString(5);
Area_Code = reset.getString(6);
AREA_DESC = reset.getString(7);
db.insertCustomer(ACCODE, ACC_DESC, Address, Phone, Mobile,
Area_Code, AREA_DESC);
}
alertdialogbox("Import Parties",
"Parties Imported Successfully !!");
}
conn.close();
} catch (Exception e1) {
e1.getMessage();
}
}
根据您的手机 USB 连接用于: - 与计算机共享手机连接 - 在手机和计算机之间传输一些信息...但是要连接到您的 sql 服务器(托管在计算机中),您必须拥有两台设备的计算机和同一网络上的电话
您正在做的是尝试通过 192.168.xx 通过 wifi 网络连接
检查您的网络属性以查看您的计算机在 USB 电话计算机网络中而不是在 wifi 网络中的 ip 是什么
我的手机有一个设置为“USB Tethering”。我在某处读到,当您想通过 wifi 将手机与 PC 连接时使用此设置。我启用了此设置,然后运行我的应用程序但没有结果...此设置或任何其他设置是否在将我的手机连接到 pc 的 wifi 时起作用?