【发布时间】:2016-03-01 00:37:50
【问题描述】:
我正在尝试通过我开发的 Android 应用在我的 SQL Server 数据库上运行存储过程。我现在只是在胡闹,但我似乎无法让它运行。问题是我也没有遇到任何错误或崩溃 - 应用程序运行良好,我可以单击按钮,存储过程似乎不想运行。
SP 在表中创建一行。我已经在 SQL Server 中对此进行了测试,并且效果很好。问题似乎在于从我的应用程序执行它..
我认为我的设置是正确的。
1) 我在我的应用程序的 libs 文件夹中包含了正确的 .jar 文件。
2) 我在 build.gradle 中包含了对该库的引用:-
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.google.android.gms:play-services:8.3.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/jtds-1.3.1.jar')
}
3) 我已经导入了所有我需要的库(我认为):-
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
4) 我有一个按钮,当点击它时应该运行存储过程:-
@Override
public void onClick(View v) {
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
String username = "myusername";
String password = "mypassword";
Connection DbConn = DriverManager.getConnection("jdbc:jtds:sqlserver://sql9.hostinguk.net/matprichardson;user=" + username + ";password=" + password);
Log.w("Connection","Open");
Statement stmt = DbConn.createStatement();
stmt.execute("exec [matprichardson].[updatelatlong]");
DbConn.close();
} catch (Exception e) {
Log.w("Error connection","" + e.getMessage());
}
}
如果我从 try/catch 块中删除代码,Class.forName 部分以红色突出显示,当我悬停时,我得到一个 java.lang.ClassNotFoundException 但我已经读过这是第一个 try/catch 块的原因地点……我说的对吗?
无论如何,在修补了一个小时后,我已经到了不知道该怎么做的地步了。希望大家帮忙。
注意:我直接在我的设备上运行应用程序,而不是通过模拟器。
另一个注意事项:在 Android Monitor 的“logcat”部分中,我收到一个错误。单击按钮时的完整日志:
11-28 22:54:29.173 11995-11995/uk.co.matprichardson.omgandroid D/libc: [NET] android_getaddrinfofornet+,hn 18(0x73716c372e686f),sn(),hints(known),family 0,flags 4
11-28 22:54:29.173 11995-11995/uk.co.matprichardson.omgandroid D/libc: [NET] android_getaddrinfofornet-, err=8
11-28 22:54:29.173 11995-11995/uk.co.matprichardson.omgandroid E/MYAPP: exception android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1155)
at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at java.net.Socket.tryAllAddresses(Socket.java:109)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:259)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:311)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:187)
at java.sql.DriverManager.getConnection(DriverManager.java:179)
at java.sql.DriverManager.getConnection(DriverManager.java:144)
at uk.co.matprichardson.omgandroid.MainActivity.onClick(MainActivity.java:114)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19869)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5721)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
【问题讨论】:
-
给我几分钟时间再次运行,我会发布整个堆栈跟踪。
-
没什么可发的,但我已经发过了
-
这样更好。发布更新
-
好多了,你终于得到了googlable exception!
-
您先生,真是个天才。非常感谢 - 请发布您的答案,我会标记为正确的。
标签: java android jdbc android-studio