繁体   English   中英

将 Android genymotion 与 localhost 中的 SQL Server 2000 连接

[英]Connect Android genymotion with SQL server 2000 in localhost

我无法将我的虚拟机 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 错误消息.... 数据库连接器必须有一个作业连接到数据库,如果不可能,则抛出和异常。 您将提高组件的可测试性。

您应该能够在纯 Java 的 Android 应用程序中使用该连接器……您是否想过为每个上下文编写不同的连接器? 除非您必须这样做,否则这是不可接受的,而这里的情况并非如此。 最大限度地利用 OOP 方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM