Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Temoxa
9 / 9 / 1
Регистрация: 19.03.2010
Сообщений: 674
Записей в блоге: 2
Завершенные тесты: 1
#1

Connect to MS SQL и ошибка "unfortunately has stopped" - Android

17.04.2015, 16:06. Просмотров 680. Ответов 12
Метки нет (Все метки)

Привет! Ребята выручите пожалуйста. Скачал jtds, вроде прилинковал к проекту... в манифесте прописал доступ к инету

XML
1
2
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
вот код соединения
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void OnClick(View v) throws SQLException {
        Connection conn = null;
        ResultSet rs = null;
        String url = "jdbc:jtds:sqlserver://127.0.0.1:1433;instance=SQLEXPRESS;DatabaseName=Test";
        String driver = "net.sourceforge.jtds.jdbc.Driver";
        String userName = "sa";
        String password = "test";
        try {
            Class.forName(driver);
            conn = DriverManager.getConnection(url, userName, password);
            System.out.println("Connected to the database!!! Getting table list...");
            DatabaseMetaData dbm = conn.getMetaData();
            rs = dbm.getTables(null, null, "%", new String[] { "TABLE" });
            while (rs.next()) {
                System.out.println(rs.getString("TABLE_NAME"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            conn.close();
            rs.close();
        }
    }
Запускаю в эмуляторе, выдает ерор "unfortunately has stopped"... В чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2015, 16:06     Connect to MS SQL и ошибка "unfortunately has stopped"
Посмотрите здесь:

Android "The application Butt (process.com.samples.Butt) has stopped unexpectedly. Please try again"
Android "Unfortunately, testApp has stopped"
Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" Android
Android Ошибка "Description Resource Path Location Type"
Android Исправить ошибку "Unfortunately appname has stopped"
Android Ошибка в Android Studio: "x86 emulation currently requires hardware acceleration"
Android Как отловить причину "unfortunately, application has stopped" на эмуляторе?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
17.04.2015, 16:11     Connect to MS SQL и ошибка "unfortunately has stopped" #2
Цитата Сообщение от Temoxa Посмотреть сообщение
В чем ошибка?
....в консоли
в консоли пишет в чем ошибка
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
17.04.2015, 16:12     Connect to MS SQL и ошибка "unfortunately has stopped" #3
Temoxa, вынесите данные манипуляции в отдельный поток.
нельзя такое делать в UI потоке.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
17.04.2015, 16:13     Connect to MS SQL и ошибка "unfortunately has stopped" #4
Цитата Сообщение от Temoxa Посмотреть сообщение
127.0.0.1
10.0.2.2

+ то, что написали androbro и Паблито
Temoxa
9 / 9 / 1
Регистрация: 19.03.2010
Сообщений: 674
Записей в блоге: 2
Завершенные тесты: 1
17.04.2015, 16:18  [ТС]     Connect to MS SQL и ошибка "unfortunately has stopped" #5
Нельзя с точки правильности проектирования приложения?)) если да, это отложим это пока.

Попробовал с 10.0.2.2, таже фигня...

Как правильно логи из консоли предоставить, тупо копи паст?
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
17.04.2015, 16:20     Connect to MS SQL и ошибка "unfortunately has stopped" #6
Temoxa,
Цитата Сообщение от Temoxa Посмотреть сообщение
с точки правильности проектирования приложения?
с точки зрения политики безопасности androidначиная с API>11
Temoxa
9 / 9 / 1
Регистрация: 19.03.2010
Сообщений: 674
Записей в блоге: 2
Завершенные тесты: 1
17.04.2015, 16:49  [ТС]     Connect to MS SQL и ошибка "unfortunately has stopped" #7
Тогда пример как в потоке плз)
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
17.04.2015, 22:45     Connect to MS SQL и ошибка "unfortunately has stopped" #8
Temoxa, даже на русском можно найти по этому вопросу страницы, ищите по AsynkTask.
Temoxa
9 / 9 / 1
Регистрация: 19.03.2010
Сообщений: 674
Записей в блоге: 2
Завершенные тесты: 1
18.04.2015, 07:21  [ТС]     Connect to MS SQL и ошибка "unfortunately has stopped" #9
Ну по идеи должно работать и без асинхронной задачи, разве нет?
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
18.04.2015, 11:35     Connect to MS SQL и ошибка "unfortunately has stopped" #10
Temoxa,
Цитата Сообщение от Temoxa Посмотреть сообщение
Ну по идеи должно работать и без асинхронной задачи, разве нет?
по идее Вы получите NetworkOnMainThreadException в API больше 11
gitarillo
717 / 517 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
15.05.2015, 00:04     Connect to MS SQL и ошибка "unfortunately has stopped" #11
Добрый день, уважаемые.
Сразу скажу очень много чего пересмотрел, перепробовал, не помогает в решении моей проблемы.
Есть маленькое приложение, задача которого просто соединиться с сервером ms sql.
Сервер сам настроил, все открыл, что нужно, в фаерволе все тоже сделал.
Коннект ни в какую не хочет происходить.
Фрагмент кода
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//.............
Context ct=getApplicationContext();
            Toast to;
            if (!validDataConnections())
            {
                to=Toast.makeText(ct, errorDb, Toast.LENGTH_SHORT);
            }
            else
            {
                
                String log="";
                try
                {
                    Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
                    log+="Дравер найден\n";
                
                 Connection conn = DriverManager.getConnection(
                "jdbc:jtds:sqlserver://192.168.0.101:1433/alimovdb", "sa","7420178");
// после этой строчки вываливается исключение типа permission denied NETWORK error
 
                 log+="Экзепляр соединения создан\n";
                 
                    Statement st = conn.createStatement();
                    log+="Соединение открыто\n";
                    ResultSet rs = st.executeQuery("select name from dbo.tb1");
                    // здесь пока все убрал
                    }
                }
                catch (Exception e)
                {
                    to=Toast.makeText(ct, log+e.toString(), Toast.LENGTH_SHORT);
                }
                            
            
            if (to!=null)
            {
                to.setGravity(Gravity.CENTER, 0, 0);
                to.show();
            }
 
//........
Драйвера пробовал различные, версии тоже. Ничего не помогает.
Проверял коннект с других программ, специально на C# написал программу для тестирования подключения. С любых компов работает, а с android никак. Скачал с маркета MSSQL console lite. C нее тоже удалось подключиться.
Помогите, мозг уже сломал

Добавлено через 1 час 45 минут
Разобрался. Ошибка была не в подключении, а именно в том, что нужно работать через AsyncTask. Если кому интересен пример, могу скинуть сюда.
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 498
15.05.2015, 07:03     Connect to MS SQL и ошибка "unfortunately has stopped" #12
gitarillo, кинь примерчик если не сложно плиз?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2015, 11:49     Connect to MS SQL и ошибка "unfortunately has stopped"
Еще ссылки по теме:

Android Ошибка "Cannot find symbol variable layout"
При запуске приложения на эмуляторе: "unfortunately appname has stopped" Android
Как исправить ошибку "Unfortunately, <Program> has stopped"? Android
Ошибка "cannot find symbol variable bs" (Android Studio) Android
Android Ошибка при создании проекта "invalid LOC header (bad signature)"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gitarillo
717 / 517 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
18.05.2015, 11:49     Connect to MS SQL и ошибка "unfortunately has stopped" #13
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
package classes;
 
public class SqlProv {
 
    private String ServAndDb;
    private String userName;
    private String password;
    private String server;
    private String db;
    
    // Это конструктор класса подключения к базе данных
    public SqlProv(String server, String dataBase, String uName, String pass)
    {
        this.ServAndDb= "jdbc:jtds:sqlserver://" + server + "/" + dataBase;
        this.userName=uName;
        this.password=pass;     
        this.server=server;
        db=dataBase;
    }
    
    // Получить имя сервера с драйвером и базой данных
    public String GetServerAndDb()
    {
        return this.ServAndDb;
    }
    // Получить имя пользователя
    public String GetUserName()
    {
        return this.userName;
    
    }
    // Получить имя пользователя
    public String GetDb()
    {
        return this.db;
        
    }
    
    // Получить пароль
        public String GetPass()
        {
            return this.password;
        
        }
        
        // Получить сервер
        public String GetServer()
        {
            return this.server;
                
        }
    
    // Выводит все данные о подлючении, кроме пароля
    public String GetAll()
    {
        return "Сервер:" + this.ServAndDb + "\nПользователь:" + this.userName;
                
    }
    
}
 
 
 
 
// реализация обработчика нажатия на кнопку сохранения настроек
    public OnClickListener btn_check_server_Click=new OnClickListener() 
    {
        // метод который реализуется
        @Override
        public void onClick(View v) 
        {
            
            
            Context ct=getApplicationContext(); // получаем контекст приложения
            
            if (!validDataConnections()) // проверяем пустоту полей
            {
                // если пусто, дальше не идем, а показываем сообщение
                to=Toast.makeText(ct, errorDb, Toast.LENGTH_LONG);
                to.setGravity(Gravity.CENTER, 0, 0);
                to.show();
                return;
            }
            else
            {
                // создаем новый экземляр класса работы с бд
// это просто для хранения настроек. в принципе можно просто в переменных хранить
                SqlSetUser=new SqlProv(
                        t_server.getText().toString(),
                        t_database.getText().toString(),
                        t_username.getText().toString(), 
                        t_password.getText().toString()
                        );
                
                asyncth asyc=new asyncth(SqlSetUser);   // создаем объект асинхронной работы с базой                
                asyc.execute("SELECT [name] FROM [tb1]"); // выполняем выборку из базы
                // где name - имя поля в таблице tb1. По сути нужно подогнать запрос под свою таблицу
                // где храниться номер накладной
                
            }
    }
    };
    
    
    
    Toast to;
    // асинхронная работа с базой
     class asyncth extends AsyncTask<String, Void, JSONArray>  {
        private SqlProv curDbSet;
         // конструктор класса
         public asyncth(SqlProv dbset)
         {
            
             curDbSet=dbset;
         }
        
        private String resm;
                 @Override
                 protected JSONArray doInBackground(String... query) 
                 {
                     resm="";
                     /*resm+="Зашли в метод\n";*/
                   JSONArray resultSet = new JSONArray(); // объект в котором будут храниться результаты выборки
                   // в нашем случае одно значение
                   // но вообще по сути это специализированный двумерный массив
                   try 
                   {
                     Class.forName("net.sourceforge.jtds.jdbc.Driver"); // выбираем драйвер подключения к базе
                    // resm+="Драйвер найден\n";
                     Connection con = null; // переменная подключения
                     Statement st = null; // активизирует подключение е базе
                     ResultSet rs = null; // переменная для работы с результатом выборки
                     
                    
                     try 
                     {
                         // инциализируем подключение
                       con = DriverManager.getConnection(curDbSet.GetServerAndDb(), curDbSet.GetUserName(), curDbSet.GetPass());
                       /*resm+="Соединение установлено\n";*/
                       if (con != null) 
                       {
                         st = con.createStatement();
                         /*resm+="Соединение открыто\n";*/
                       
                         SqlSetUser=curDbSet;
                         rs = st.executeQuery(query[0]); // считываем только первый параметр (у нас один запрос)
                         /*resm+="Запрос выполнен\n";*/
                         if (rs != null) 
                         {
                             
                           int columnCount = rs.getMetaData().getColumnCount(); // количество столбцов выборки
                           /*resm+="Кол-во столбцов=" + String.valueOf(columnCount) + "\n";*/
                           // Сохранение данных в JSONArray
                           while (rs.next()) 
                           {
                             JSONObject rowObject = new JSONObject(); // объект для считывания строки из таблицы
                             for (int i = 1; i <= columnCount; i++)  // цикл по столбцам
                             {
                                 // наполняем строку данными проходясь по столбцам
                               rowObject.put(rs.getMetaData().getColumnName(i), (rs.getString(i) != null) ? rs.getString(i) : "");
                             }
                             // отправляем результат в результсет
                             resultSet.put(rowObject);
                           }
                         }
                       }
                     } 
                     catch (SQLException e) // перехватываем ошибку выполнения запроса
                     {
                         resm+="Ошибка SQL:" + e.getMessage();
                     } 
                     catch (JSONException e) // перехватываем ошибку работы с JSON объектом
                     {
                       e.printStackTrace();
                     } 
                     finally // блок, срабатывающий в любом случае
                     {
                       try 
                       {
                           // закрытие всех открытых соединений
                         if (rs != null) rs.close();
                         if (st != null) st.close();
                         if (con != null) con.close();
                       } 
                       catch (SQLException e) 
                       {
                         throw new RuntimeException(e.getMessage());
                       }
                     }
                   } 
                   catch (ClassNotFoundException e) 
                   {
                     e.printStackTrace();
                   }
                   return resultSet; // возавращаем результат
                 }
     
                 
                 // этот метод вызывается, когда выборка завершится полностью
                 @Override
                 protected void onPostExecute(JSONArray result) 
                 {
                    // TODO: вернуть результат
                     try
                     {
                         JSONObject tmp= result.getJSONObject(0); // получаем единственную строку (нам больше не надо)
                         resm+=tmp.getString("name"); // по имени столбца изымаем значение
                        
                        
                         
                         
                     }
                     catch (Exception e)
                     {
                         resm+="Ошибка при выборе результата {" + e.getMessage() + "}";
                     }
                     // для красоты еще выведем номер накладной как системное сообщение
                     Context ct=getApplicationContext();
                     to=Toast.makeText(ct, resm, Toast.LENGTH_LONG);
                     if (to!=null)
                        {
                            to.setGravity(Gravity.CENTER, 0, 0);
                            to.show();
                        }
                    
                 }
    }
Yandex
Объявления
18.05.2015, 11:49     Connect to MS SQL и ошибка "unfortunately has stopped"
Ответ Создать тему
Опции темы

Текущее время: 04:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru