Java 在本地主机中将Android genymotion与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

我无法将我的虚拟机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(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。我已经编辑了我的原始答案,希望能对您有所帮助