java – 在Android Studio中使用JDBC苦苦挣扎
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 在Android Studio中使用JDBC苦苦挣扎,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含6111字,纯文字阅读大概需要9分钟。
内容图文
我正在尝试从我开发的Android应用程序在我的SQL Server数据库上运行存储过程.我现在只是搞乱了,但我似乎无法让它运行.事情是我没有得到任何类型的错误或崩溃 – 应用程序工作正常,我可以单击按钮,存储过程似乎不想运行.
SP在表中创建一行.我在SQL服务器上测试了它,它运行得很好.问题似乎是从我的应用程序执行它..
我想我已经正确设置了.
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,但我已经读到了这是首先尝试/捕获块的原因…我对吗?
无论如何,经过一段时间的修补,我已经达到了一个我不知道该怎么办的地步.希望你们能帮忙.
注意:我正在我的设备上直接运行应用程序,而不是通过模拟器.
另一个注意事项:在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)
解决方法:
这不完全正确.
catch (Exception e)
{
Log.w("Error connection","" + e.getMessage());
}
11-26 20:49:14.662 5445-5445/uk.co.matprichardson.omgandroid W/Error connection: null
像往常一样,答案是在完整堆栈跟踪中,而不是仅在异常消息中.你基本上是在抑制整个异常,包括它的堆栈跟踪,只记录唯一的异常消息.这真的是无益的(不仅对我们而言,为了将它翻译成外行人的条款,以防你不理解它,也为了自己研究/谷歌它).
如果您不知道如何使用print the full stack trace in Android,请访问以下Q& A:Android – print full exception backtrace to log.
一旦手上有完整的堆栈跟踪,看起来如下所示:
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)
然后简单地复制异常类型,消息(如果有)和第一行堆栈跟踪(没有括号和行号),如下所示,
android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
进入一个体面的搜索引擎寻找线索,如Google.截至目前,顶级点击直接或间接(重复)引用下面的Stack Overflow问题:
> android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
> Caused by: android.os.NetworkOnMainThreadException
> How to fix android.os.NetworkOnMainThreadException?
当然其中一人必须解释/回答你的具体问题.
内容总结
以上是互联网集市为您收集整理的java – 在Android Studio中使用JDBC苦苦挣扎全部内容,希望文章能够帮你解决java – 在Android Studio中使用JDBC苦苦挣扎所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。