Страница 1 из 1

MS SQL 2008r2 jtds

Добавлено: 12 июл 2016, 23:07
Pavel_M
Друзья мои!!! Нужна помощь! Весь инет перерыл - не могу ответа найти. Но чувствую, что где-то все рядом и очень просто...
Проблема такая:
использую jtds-1.2.7.jar (версии от 1.2.5 до 1.2.8) для подключения к MS SQL 2008r2 и вроде бы все нормально до определенного времени подключалось и читал все, что мне нужно, но при добавлении в gradle dependencies какой-нибудь библиотеки (как практика показала - любой), при подключении к БД выдает исключение
java.sql.SQLException: The executeQuery method must return a result set.
И это именно не при выполнении запроса (запрос вообще убираю), а при
Connection conn = DriverManager.getConnection(MyApplication.db_url, MyApplication.db_name, MyApplication.db_password ); !!!

А после и добавления класса отдельно такую же фигню выдавать начал...

Вот код:

Код: Выделить всё

  class login extends AsyncTask<String, String, Integer> {
        Integer mysession=0;
        @Override
        protected void onPostExecute(Integer i) {
            Log.d("zxc","Запоминаю настройки");
            super.onPostExecute(i);
        }
        @Override
        protected void onPreExecute() {
            login_try++;//увеличиваем попытку на единицу
            super.onPreExecute();
        }
        @Override
        protected Integer doInBackground(String... params) {
            MyApplication.MY_IP=MyApplication.getLocalIpAddress();
            try {
                Connection conn = null;
                try
                {
                     Class.forName("net.sourceforge.jtds.jdbc.Driver"); //.newInstance();
                    //DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver());

                    Log.d("zxc", "MSSQL класс подключен");
                    //DriverManager.registerDriver(new net.sourceforge.jtds.jdbc.Driver());
                    Log.d("zxc", "MSSQL драйвер подключен");
                    conn = DriverManager.getConnection(MyApplication.db_url, MyApplication.db_name, MyApplication.db_password  );

                    // DriverManager.getConnection();

                    Statement st = conn.createStatement();
                    Log.d("zxc", "good!");
                    String query = "DECLARE @code int,@code_name varchar(150),@id_session int,@Questions_xml xml, @JK_array xml, @My_info xml, @My_avatar nvarchar(max)" +
                            " EXEC	[DS_CRM].[dbo].[Autorization_Revizor]    @Login = N'" + MyApplication.MY_LOGIN + "', @Password = N'"+ MyApplication.MY_PASSWORD +"', @id_value_enter = 1, @IP = N'" + MyApplication.MY_IP +  "', @Useragent = N'" + MyApplication.SOFTWAREVERSION + "', @Comment = N'IMEI:" + MyApplication.MYIMEI +  "', @code = @code OUTPUT, @code_name = @code_name OUTPUT, @id_session = @id_session OUTPUT, @Questions_xml = @Questions_xml OUTPUT, @My_info = @My_info OUTPUT, @JK_array = @JK_array OUTPUT, @My_avatar=@My_avatar OUTPUT " +
                            " SELECT	@code as N'code',@code_name as N'code_name', @id_session as N'id_session', @Questions_xml as N'Questions_xml', @My_info as N'My_info',   @JK_array as N'JK_array',   @My_avatar as N'My_avatar'";

                
                catch (java.sql.SQLException e)   {    e.printStackTrace();
                    Log.d("zxc", "bad=" + e.toString()); resultcode="Не смог подключиться к БД"; } //вот сюда отправляет все время
            }
            catch (Exception e) {   e.printStackTrace();  resultcode="Не смог выполнить функцию запроса";  }
            return mysession;
        }
    }

Код: Выделить всё


2 19:50:36.802 27346-27427/ru.ds_exp.test_07042016_02 D/zxc: MSSQL класс подключен
07-12 19:50:36.802 27346-27427/ru.ds_exp.test_07042016_02 D/zxc: MSSQL драйвер подключен
07-12 19:50:37.466 27346-27348/ru.ds_exp.test_07042016_02 D/dalvikvm: GC_CONCURRENT freed 698K, 15% free 10335K/12103K, paused 12ms+6ms, total 65ms
07-12 19:50:37.474 27346-27427/ru.ds_exp.test_07042016_02 D/dalvikvm: WAIT_FOR_CONCURRENT_GC blocked 44ms
07-12 19:50:37.726 27346-27348/ru.ds_exp.test_07042016_02 D/dalvikvm: GC_CONCURRENT freed 819K, 15% free 10888K/12807K, paused 13ms+12ms, total 53ms
07-12 19:50:38.154 56-56/? D/Genymotion: Received Ping
07-12 19:50:39.410 27346-27427/ru.ds_exp.test_07042016_02 W/System.err: java.sql.SQLException: The executeQuery method must return a result set.
07-12 19:50:39.410 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:517)
07-12 19:50:39.430 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1433)
07-12 19:50:39.430 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:401)
07-12 19:50:39.434 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:188)
07-12 19:50:39.438 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:175)
07-12 19:50:39.438 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:209)
07-12 19:50:39.450 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at ru.ds_exp.test_07042016_02.Screen_1$login.doInBackground(Screen_1.java:1075)
07-12 19:50:39.450 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at ru.ds_exp.test_07042016_02.Screen_1$login.doInBackground(Screen_1.java:1047)
07-12 19:50:39.454 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-12 19:50:39.454 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-12 19:50:39.474 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-12 19:50:39.474 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-12 19:50:39.490 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-12 19:50:39.494 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-12 19:50:39.494 27346-27427/ru.ds_exp.test_07042016_02 W/System.err:     at java.lang.Thread.run(Thread.java:856)
07-12 19:50:39.498 27346-27427/ru.ds_exp.test_07042016_02 D/zxc: bad=java.sql.SQLException: The executeQuery method must return a result set.
07-12 19:50:39.522 27346-27346/ru.ds_exp.test_07042016_02 D/zxc: Запоминаю настройки


Re: MS SQL 2008r2 jtds

Добавлено: 13 июл 2016, 10:59
Foenix
лучше не логи выводить, а пройтись дебаггером.

Re: MS SQL 2008r2 jtds

Добавлено: 13 июл 2016, 14:58
Pavel_M
несколько раз сделал rebuild, немного поправил activity.xml

перешел на jtds 1.2.1

и все заработало.... не знаю что именно повлияло, поэтому перечисли все манипуляции :)))

Re: MS SQL 2008r2 jtds

Добавлено: 13 июл 2016, 17:42
Foenix
у меня 1.2.6 работала хорошо.

Re: MS SQL 2008r2 jtds

Добавлено: 14 июл 2016, 18:24
Pavel_M
добавил немного кода и опять просит result set вернуть при DriverManager.getConnection(MyApplication.db_url, MyApplication.db_name, MyApplication.db_password ); ...

может я изначально что-то не так делаю?
скачал библиотеку jtds-1.2.xx (скачал с пометкой dist), скачался архив, из архива беру 1 файл с названием jtds-1.2.xx.jar, положил его в папку app/libs (там у меня еще 2 библиотеки AndroidViewAnimations-1.1.3.jar и AndroidEasingFunctions-1.0.0.jar) и в build.gradle(module:app) добавил вот так:


dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
// commit hash
compile 'com.android.support:appcompat-v7:23.2.1'
compile 'com.android.support:design:23.2.1'
compile 'uk.co.chrisjenx:calligraphy:2.2.0'
compile 'com.google.android.gms:play-services-maps:8.4.0'
... и т.д.

Re: MS SQL 2008r2 jtds

Добавлено: 14 июл 2016, 18:43
Pavel_M
Запустил Wireshark и Profiler... надо было конечно сразу это сделать...
При BatchStarting делает запрос (получается при getconnection)
SELECT @@MAX_PRECISION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET IMPLICIT_TRANSACTIONS OFF
SET QUOTED_IDENTIFIER ON
SET TEXTSIZE 2147483647

Предполагаю, что первая строка Select что-то возвращает, а точнее количество знаков после запятой и их 38....
но нафига этот select при connection!?
и может еще что-то надо установить на SQL сервере, библиотеку какую-нибудь?

Re: MS SQL 2008r2 jtds

Добавлено: 14 июл 2016, 20:40
Pavel_M
<kznm! Выяснил, что сервер на запрос, который идет при регистрации возвращает 0 строк

SELECT @@MAX_PRECISION
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET IMPLICIT_TRANSACTIONS OFF
SET QUOTED_IDENTIFIER ON
SET TEXTSIZE 2147483647



при выполнении этого же запроса в SSMS возвращает 1 строку...

Re: MS SQL 2008r2 jtds

Добавлено: 14 июл 2016, 20:58
Pavel_M
нужно SELECT @@MAX_PRECISION заменить на SELECT TOP 1 @@MAX_PRECISION
в файле ConnectionJDBC2.java в строке 92 - должно помочь

но при выводе логов все строки как ссылки, а net.sourceforge.jtds.jdbc..... строки без ссылок, те кликнув на нее я никуда не попадаю...
подозреваю, что это как-то связано, что я готовую библиотеку использую...
Помогите с этим пожалуйста