简体   繁体   中英

Connect Android genymotion with SQL server 2000 in localhost

I can't connect my virtual machine Android with the sql server 2000 that is running in the localhost. please help me I will be very grateful..................................................................................................................................

This is my log:

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)

This is my code:

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;
}   
}

It seems that you don't allow WIFI connection. You should refer to that post which explains how to do it. That would probably solve your problem.

Furthermore, you should take a look at this post also. I have noticed that it is the same Exception. Have you tried to launch your application in debug mode step by step?

Your Database connector have also a design problem because it violates the single responsability principle: You make Toast error message.... A DB connector must have one job connect to database, and throws and Exception if it is not possible. You will increase the testability of your component.

You should be able to use that connector in a Android app, pure Java... Do you imagine to write a distinct connector for each context?? That won't be acceptable unless you have to and that's not the case here. Take advantage of OOP approach at its maximum.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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