【问题标题】:Failed to remote server SQL SERVER using jdts无法使用 jdts 远程服务器 SQL SERVER
【发布时间】:2016-07-20 09:48:28
【问题描述】:

我已经阅读了一些关于 jdts.jar 库的文章,然后我想将它实现到 android 应用程序,已经做了一些编码,但我总是无法连接数据库 sql server。 我第一次尝试使用 Navicat SQL 浏览器进行远程,我可以连接它,但是当我进行 android 编码时,我无法连接它。已经检查了ip public,用户名,密码和数据库名称,它们与我的android编码相同。这是我的日志猫:

        07-20 16:32:49.270  31447-31447/? E/AndroidRuntime? FATAL EXCEPTION: main
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.avian.apps.avian/com.avian.apps.avian.LoginActivity}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2186)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
        at android.app.ActivityThread.access$600(ActivityThread.java:145)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5099)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
        at dalvik.system.NativeStart.main(Native Method)
        Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
        at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
        at libcore.io.IoBridge.connectErrno(IoBridge.java:131)
        at libcore.io.IoBridge.connect(IoBridge.java:116)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
        at java.net.Socket.connect(Socket.java:847)
        at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:288)
        at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:251)
        at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:331)
        at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184)
        at java.sql.DriverManager.getConnection(DriverManager.java:175)
        at java.sql.DriverManager.getConnection(DriverManager.java:209)
        at com.avian.apps.avian.ConnectionClass.getConnection(ConnectionClass.java:25)
        at com.avian.apps.avian.LoginActivity.onCreate(LoginActivity.java:36)
        at android.app.Activity.performCreate(Activity.java:5117)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2236)
        at android.app.ActivityThread.access$600(ActivityThread.java:145)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5099)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:570)
        at dalvik.system.NativeStart.main(Native Method)

还有我的 ConnectionClass :

        public class ConnectionClass {
        private Connection connect;
        private String driverName = "net.sourceforge.jtds.jdbc.Driver"; 
        private String jdbc = "jdbc:jtds:sqlserver://";
        private String host = "x.x.x.x:"; // x.x.x.x : server ip public
        private String port = "1433/"; // Port Default SQLServer
        private String database = "MOB_APPS"; 
        private String url = jdbc + host + port + database;
        private String username = "sa"; // username default SQLServer
        private String password = "admin.123";
        public Connection getConnection() throws SQLException {
        if (connect == null) {
            try {
            Class.forName(driverName);
            try {
                connect = DriverManager.getConnection(url, username, password);
                Log.d("Success","notifmessage");
            } catch (SQLException se) {
                Log.d("Failed", "notifmessage");
            }
            } catch (ClassNotFoundException cnfe) {
            Log.d("Class not found "+cnfe,"notifmessage");
            }
        }
        return connect;
        }
        }

谁能帮我解决这个问题? 提前致谢

【问题讨论】:

    标签: android jtds


    【解决方案1】:

    在建立连接之前调用它

            Log.i("Android", " MySQL Connect.");
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
    

    查看更新功能。

     public Connection getConnection() throws SQLException {
            Log.i("Android", " MySQL Connect.");
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
            if (connect == null) {
                try {
                    Class.forName(driverName);
                    try {
                        connect = DriverManager.getConnection(url, username, password);
                        Log.d("Success", "notifmessage");
                    } catch (SQLException se) {
                        Log.d("Failed", "notifmessage");
                    }
                } catch (ClassNotFoundException cnfe) {
                    Log.d("Class not found " + cnfe, "notifmessage");
                }
            }
            return connect;
        }
    

    更新:

    我的工作代码注意我正在使用旧版本的 jar jtds 1.2.7 文件与最新版本有问题。

    public class DBconnection {
    
        public static String User_name = "saxxxx";
        public static String User_pass = "xxxxxh";
        public static String Db_name = "xxxxx";
        static Context mcontext;
        public static Connection Conn = null;
        public static String Server_ip = "192.168.5.14:1433;";
    
        public static Connection Getconnection() {
    
            Log.i("Android", " MySQL Connect.");
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                    .permitAll().build();
            StrictMode.setThreadPolicy(policy);
            String connString = null;
            try {
                Log.i("SQL Looking", "Start Looking for server");
                String driver = "net.sourceforge.jtds.jdbc.Driver";
                Class.forName(driver).newInstance();
                connString = "jdbc:jtds:sqlserver://" + Server_ip
                        + ";databaseName=" + Db_name + ";user=" + User_name
                        + ";password=" + User_pass + ";";
    
                Conn = DriverManager.getConnection(connString);
                Log.i("Connection", "open DB Class");
            } catch (Exception e) {
                Toast.makeText(mcontext, e.toString() + "db", Toast.LENGTH_LONG)
                        .show();
                Log.w("Error connection", e.getMessage());
    
            }
            return Conn;
        }
    
        public static void close_DB() {
    
            try {
                Conn.close();
                Log.i("Connection", "Close DB Class");
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    

    【讨论】:

    • 同样的结果兄弟,失败
    • 它没有再次说严格模式错误,但仍然无法连接到服务器,
    • @AgoengLiu 请重播你得到的结果!
    • 抱歉 Sohail 仍然无法连接
    • 你降级了库 jar 吗? logact 现在在说什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    相关资源
    最近更新 更多