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

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

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

Connect to MS SQL и ошибка "unfortunately has stopped" - Программирование Android

17.04.2015, 16:06. Просмотров 717. Ответов 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"... В чем ошибка?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2015, 16:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Connect to MS SQL и ошибка "unfortunately has stopped" (Программирование Android):

Новая реализация findViewById и ошибка "Unfortunately, MyApp has been stopped" - Программирование Android
Здравствуйте, хотел немного сократить код программы, создав метод, который принимает на вход View и Integer //Сам метод public ...

Часы для Android и ошибка "unfortunately clock has stopped" - Программирование Android
Задали лабораторную по создания приложения часов для андроид. По скольку ни с андройдом ни с явой не работал, пытаюсь разобраться. ...

При запуске приложения на эмуляторе: "unfortunately appname has stopped" - Программирование Android
доброго времени суток, друзья, помогите найти ошибку, при запуске приложения на эмуляторе выдает сообщение unfortunately appname has...

Как отловить причину "unfortunately, application has stopped" на эмуляторе? - Программирование Android
Приветствую всех! Помогите разобраться. Пытаюсь убрать заголовок protected void onCreate(Bundle savedInstanceState) { ...

Как исправить ошибку "Unfortunately, <Program> has stopped"? - Программирование Android
Я только начал изучать программирование программ для Android и сразу же после создания приложения Hello World, при запуске приложения на...

Исправить ошибку "Unfortunately appname has stopped" - Программирование Android
Посоветуйте как можно обнаружить причину ошибки &quot;Unfortunatellya Battle has stoped&quot;, как ее исправить ??

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2486 / 1931 / 602
Регистрация: 12.05.2014
Сообщений: 6,787
Завершенные тесты: 1
17.04.2015, 16:11 #2
Цитата Сообщение от Temoxa Посмотреть сообщение
В чем ошибка?
....в консоли
в консоли пишет в чем ошибка
1
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
17.04.2015, 16:12 #3
Temoxa, вынесите данные манипуляции в отдельный поток.
нельзя такое делать в UI потоке.
1
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
17.04.2015, 16:13 #4
Цитата Сообщение от Temoxa Посмотреть сообщение
127.0.0.1
10.0.2.2

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

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

Как правильно логи из консоли предоставить, тупо копи паст?
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
17.04.2015, 16:20 #6
Temoxa,
Цитата Сообщение от Temoxa Посмотреть сообщение
с точки правильности проектирования приложения?
с точки зрения политики безопасности androidначиная с API>11
0
Temoxa
9 / 9 / 1
Регистрация: 19.03.2010
Сообщений: 678
Записей в блоге: 2
Завершенные тесты: 1
17.04.2015, 16:49  [ТС] #7
Тогда пример как в потоке плз)
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
17.04.2015, 22:45 #8
Temoxa, даже на русском можно найти по этому вопросу страницы, ищите по AsynkTask.
0
Temoxa
9 / 9 / 1
Регистрация: 19.03.2010
Сообщений: 678
Записей в блоге: 2
Завершенные тесты: 1
18.04.2015, 07:21  [ТС] #9
Ну по идеи должно работать и без асинхронной задачи, разве нет?
0
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 843
18.04.2015, 11:35 #10
Temoxa,
Цитата Сообщение от Temoxa Посмотреть сообщение
Ну по идеи должно работать и без асинхронной задачи, разве нет?
по идее Вы получите NetworkOnMainThreadException в API больше 11
0
gitarillo
720 / 520 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
15.05.2015, 00:04 #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. Если кому интересен пример, могу скинуть сюда.
0
disx
22 / 22 / 0
Регистрация: 26.02.2014
Сообщений: 546
Записей в блоге: 1
15.05.2015, 07:03 #12
gitarillo, кинь примерчик если не сложно плиз?
0
gitarillo
720 / 520 / 24
Регистрация: 17.06.2010
Сообщений: 1,012
Записей в блоге: 1
18.05.2015, 11:49 #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();
                        }
                    
                 }
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2015, 11:49
Привет! Вот еще темы с ответами:

"Unfortunately, testApp has stopped" - Программирование Android
package com.illya05_Studio.simplepasssecurity; import android.app.Activity; import android.content.SharedPreferences; import...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log" - Программирование Android
Unknown method 'e' of 'org.apache.commons.logging.Log' package com.mycompany.myapp; import android.widget.*; import...

"The application Butt (process.com.samples.Butt) has stopped unexpectedly. Please try again" - Программирование Android
работаю на эклипс, программирую калькулятор для android. у меня есть 2 программы, 1 из них: package com.samples.But; import...

Ошибка "Gradle"MyApplication" projectrefresh failed - Программирование Android
Всем доброго вечера. Только начинаю писать под андроид, и на одном из первых этапов возникла такая ошибка. Создал проект (эмулятор не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.05.2015, 11:49
Ответ Создать тему
Опции темы

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