Java 在本地主机中将Android genymotion与SQL server 2000连接
我无法将我的虚拟机Android与本地主机上运行的sql server 2000连接。请帮助我,我将非常感激 这是我的日志:Java 在本地主机中将Android genymotion与SQL server 2000连接,java,android,sql-server,localhost,genymotion,Java,Android,Sql Server,Localhost,Genymotion,我无法将我的虚拟机Android与本地主机上运行的sql server 2000连接。请帮助我,我将非常感激 这是我的日志: 04-10 22:51:14.162: W/System.err(1121): android.os.NetworkOnMainThreadException 04-10 22:51:14.162: W/System.err(1121): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(Stri
04-10 22:51:14.162: W/System.err(1121): android.os.NetworkOnMainThreadException
04-10 22:51:14.162: W/System.err(1121): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
04-10 22:51:14.170: W/System.err(1121): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
04-10 22:51:14.170: W/System.err(1121): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
04-10 22:51:14.170: W/System.err(1121): at libcore.io.IoBridge.connect(IoBridge.java:112)
04-10 22:51:14.174: W/System.err(1121): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-10 22:51:14.174: W/System.err(1121): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
04-10 22:51:14.174: W/System.err(1121): at java.net.Socket.startupSocket(Socket.java:566)
04-10 22:51:14.174: W/System.err(1121): at java.net.Socket.tryAllAddresses(Socket.java:127)
04-10 22:51:14.174: W/System.err(1121): at java.net.Socket.<init>(Socket.java:177)
04-10 22:51:14.174: W/System.err(1121): at java.net.Socket.<init>(Socket.java:149)
04-10 22:51:14.178: W/System.err(1121): at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:249)
04-10 22:51:14.190: W/System.err(1121): at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:322)
04-10 22:51:14.190: W/System.err(1121): at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
04-10 22:51:14.194: W/System.err(1121): at java.sql.DriverManager.getConnection(DriverManager.java:175)
04-10 22:51:14.198: W/System.err(1121): at java.sql.DriverManager.getConnection(DriverManager.java:209)
04-10 22:51:14.198: W/System.err(1121): at com.example.appentrenamientonatacion.ConectorBD.conectar(ConectorBD.java:40)
04-10 22:51:14.202: W/System.err(1121): at com.example.appentrenamientonatacion.ClienteBD.buscarClientePorId(ClienteBD.java:125)
04-10 22:51:14.202: W/System.err(1121): at com.example.appentrenamientonatacion.MainActivity.mostrarClientes(MainActivity.java:57)
04-10 22:51:14.202: W/System.err(1121): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 22:51:14.202: W/System.err(1121): at java.lang.reflect.Method.invoke(Method.java:511)
04-10 22:51:14.202: W/System.err(1121): at android.view.View$1.onClick(View.java:3586)
04-10 22:51:14.206: W/System.err(1121): at android.view.View.performClick(View.java:4084)
04-10 22:51:14.206: W/System.err(1121): at android.view.View$PerformClick.run(View.java:16966)
04-10 22:51:14.206: W/System.err(1121): at android.os.Handler.handleCallback(Handler.java:615)
04-10 22:51:14.206: W/System.err(1121): at android.os.Handler.dispatchMessage(Handler.java:92)
04-10 22:51:14.206: W/System.err(1121): at android.os.Looper.loop(Looper.java:137)
04-10 22:51:14.210: W/System.err(1121): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-10 22:51:14.210: W/System.err(1121): at java.lang.reflect.Method.invokeNative(Native Method)
04-10 22:51:14.210: W/System.err(1121): at java.lang.reflect.Method.invoke(Method.java:511)
04-10 22:51:14.210: W/System.err(1121): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
这是我的代码:
public class ConectorBD {
private String url = "jdbc:jtds:sqlserver://10.0.2.2:1433;DatabaseName=stadiums";
private String driver = "net.sourceforge.jtds.jdbc.Driver";
private String userName = "sa";
private String password = "";
private Connection conn = null;
private ResultSet rs = null;
Context context;
public ConectorBD(String databaseName,String username,String password,Context context){
this.context=context;
//url+=databaseName;
//this.userName=username;
//this.password=password;
}
public void conectar(){
try {
Class.forName(driver);
setConn(DriverManager.getConnection(url, userName, password));
System.out.println("Connected to the database!!! Getting table list...");
//DatabaseMetaData dbm = conn.getMetaData();
Toast.makeText(context, "conectado", Toast.LENGTH_SHORT).show();
}catch(Exception e) {
String a="";
/*for (StackTraceElement st :e.getStackTrace()){
a+=st+"\n";
}*/
//System.out.println(a);
//Log.e("error", a);
Toast.makeText(context,a, Toast.LENGTH_SHORT).show();
e.printStackTrace();
//System.out.println();
}
}
public ArrayList select(String queries,ArrayList<String> lstCamposATraer){
ArrayList lst = new ArrayList();
try{
Statement sta = getConn().createStatement();
String Sql = queries;
setRs(sta.executeQuery(Sql));
int cont=0;
while(getRs().next()){
lst.add(getRs().getString(lstCamposATraer.get(cont)));
cont++;
if (cont==lstCamposATraer.size()){
cont=0;
}
}
//esto esta todo mal, no pense en separa los campos ni en nada :p
/*while (rs.next()) {
System.out.println(rs.getString("iDPileta"));
}*/
}catch(Exception e){
e.printStackTrace();
}finally{
cerrar();
}
return lst;
}
public void cerrar(){
try {
if(conn!=null){
getConn().close();
}
if (rs!=null){
getRs().close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getConn() {
return conn;
}
public void setConn(Connection conn) {
this.conn = conn;
}
public ResultSet getRs() {
return rs;
}
public void setRs(ResultSet rs) {
this.rs = rs;
}
}
您似乎不允许WIFI连接。 你应该参考说明如何做的内容。 这可能会解决你的问题 此外,你也应该看看这个。我注意到这是同样的例外。 您是否尝试过以调试模式一步一步地启动应用程序 您的数据库连接器也存在设计问题,因为它违反了单一责任原则:生成Toast错误消息。。。。DB连接器必须有一个连接到数据库的作业,如果不可能,则抛出和异常。您将提高组件的可测试性 您应该能够在Android应用程序中使用该连接器,纯Java。。。您是否设想为每个上下文编写一个不同的连接器??除非你必须这样做,否则这是不可接受的,而这里的情况并非如此。
最大限度地利用OOP方法 什么都没发生,我不知道是genymotion出了问题还是我的代码不起作用。在这种情况下,是的,你的代码会有帮助。您的Android应用程序使用哪种IP?Localhost…?我使用10.0.2.2和10.0.2.3,因为我读到genymotion有这个IP来连接我计算机的Localhost。我已经编辑了我的原始答案,希望能对您有所帮助