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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.97
Walleee
1 / 1 / 0
Регистрация: 28.04.2012
Сообщений: 57
#1

mssql + android - Android

15.01.2013, 19:23. Просмотров 4242. Ответов 29
Метки нет (Все метки)

Подскажите, пожалуйста, как подключить mssql к android?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kris_1
5 / 5 / 0
Регистрация: 16.01.2013
Сообщений: 16
21.01.2013, 10:26     mssql + android #21
ну, а я тебе о чем?

Добавлено через 2 минуты
вот тут вот http://stackoverflow.com/questions/1...ver-on-android народ задает аналогичный вопрос еще в сентябре, и тоже что-то с версией (в комментариях). Ну если с сентября не поправили, может там какое-то подключение должно быть иное, не знаю. Че оно его не находит-то..
Walleee
1 / 1 / 0
Регистрация: 28.04.2012
Сообщений: 57
21.01.2013, 11:51  [ТС]     mssql + android #22
вывел подключение в отдельный поток. ругается(

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
package com.example.hh;
 
import java.sql.Connection;
import java.sql.DriverManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    TextView tvInfo; 
    MyTask ts;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvInfo = (TextView)findViewById(R.id.textView1);
        try {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
        } 
        catch (ClassNotFoundException e) {
            e.printStackTrace();            
        }   
           
        ts = new MyTask();
        ts.execute();
    }
    
      class MyTask extends AsyncTask<Void, Void, Void> {
 
            @Override
            protected void onPreExecute() {
              super.onPreExecute();
              tvInfo.setText("start connection");
            }
 
            @Override
            protected Void doInBackground(Void... params) {             
                  Connection conn = null;
                  String url = "jdbc:jtds:sqlserver://127.0.0.1:12701/dbName";
                  String name = "user";
                  String password = "password";
                  try 
                  {
                   conn = DriverManager.getConnection(url, name, password);
                   //Toast.makeText(getApplicationContext(), "есть подключение к БД", Toast.LENGTH_SHORT).show();
                   tvInfo.setText("есть подключение к БД");
                  } 
                  catch (java.sql.SQLException e) 
                  {
                   e.printStackTrace();
                   //Toast.makeText(getApplicationContext(), "ошибка подключения к БД", Toast.LENGTH_SHORT).show();
                   tvInfo.setText("ошибка подключения к БД");     
                  }     
              return null;
            }
 
            @Override
            protected void onPostExecute(Void result) {
              super.onPostExecute(result);
              tvInfo.setText("end connection");
            }
          }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
logcat пишет
----------------------------------------------------------------------------
01-21 07:40:51.621: E/AndroidRuntime(814): FATAL EXCEPTION: AsyncTask #1
01-21 07:40:51.621: E/AndroidRuntime(814): java.lang.RuntimeException: An error occured while executing doInBackground()
01-21 07:40:51.621: E/AndroidRuntime(814): at android.os.AsyncTask$3.done(AsyncTask.java:299)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.lang.Thread.run(Thread.java:856)
01-21 07:40:51.621: E/AndroidRuntime(814): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4746)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:823)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.View.requestLayout(View.java:15468)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.View.requestLayout(View.java:15468)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.View.requestLayout(View.java:15468)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.View.requestLayout(View.java:15468)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:318)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.view.View.requestLayout(View.java:15468)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.widget.TextView.checkForRelayout(TextView.java:6313)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.widget.TextView.setText(TextView.java:3567)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.widget.TextView.setText(TextView.java:3425)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.widget.TextView.setText(TextView.java:3400)
01-21 07:40:51.621: E/AndroidRuntime(814): at com.example.hh.MainActivity$MyTask.doInBackground(MainActivity.java:57)
01-21 07:40:51.621: E/AndroidRuntime(814): at com.example.hh.MainActivity$MyTask.doInBackground(MainActivity.java:1)
01-21 07:40:51.621: E/AndroidRuntime(814): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-21 07:40:51.621: E/AndroidRuntime(814): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-21 07:40:51.621: E/AndroidRuntime(814): ... 4 more
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
21.01.2013, 14:16     mssql + android #23
Цитата Сообщение от Walleee Посмотреть сообщение
.setText
только в UI потоке
Kris_1
5 / 5 / 0
Регистрация: 16.01.2013
Сообщений: 16
21.01.2013, 16:29     mssql + android #24
Я с asyntask не работала, у меня обычные потоки, но из них нельзя обращаться к интерфейсу пользователя (в том-то и суть!). Если делать из потока обычного - нужно передавать из него сообщения в виде Handler.
Убери пока вообще все не относящееся к подключению и проверь соединяется ли вообще!
Ты с эмулятора хочешь подключиться, или с устройства? На чем тестируешь?
Walleee
1 / 1 / 0
Регистрация: 28.04.2012
Сообщений: 57
22.01.2013, 11:54  [ТС]     mssql + android #25
убрал onPreExecute() и onPostExecute(Void result) оставил только doInBackground(Void... params) результат тот же, хотя если верить примерам, то он должен был и с ними работать.
тестирую на эмуляторе, если бы я на устройстве тестировал, то я бы наверно уже повесился)

Добавлено через 40 минут
соединение есть )
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
        Thread t = new Thread(new Runnable() {
            public void run() {
              try {
                  Connection conn = null;
                  String url = "jdbc:jtds:sqlserver://127.0.0.1:12701/dbName";
                  String name = "userName";
                  String password = "userPassword";
                  try 
                  {
                   conn = DriverManager.getConnection(url, name, password);
                   //Toast.makeText(getApplicationContext(), "есть подключение к БД", Toast.LENGTH_SHORT).show();
                   Log.d(LOG_TAG, "good!");
                  } 
                  catch (java.sql.SQLException e) 
                  {
                   e.printStackTrace();
                   Toast.makeText(getApplicationContext(), "ошибка подключения к БД", Toast.LENGTH_SHORT).show();
                   Log.d(LOG_TAG, "bad");
                  } 
              } catch (Exception e) {
                e.printStackTrace();
              }
            }
          });
          t.start();
V0v1k
1158 / 982 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
22.01.2013, 15:03     mssql + android #26
опять же, тосты с не UI потока.

Добавлено через 2 минуты
уберите тосты и покажите стек трейс SQLException.
Kris_1
5 / 5 / 0
Регистрация: 16.01.2013
Сообщений: 16
22.01.2013, 15:58     mssql + android #27
я тоже не поняла - все получилось или нет?
Тосты тоже нельзя. Чтоб информацию передать нужно использовать Handler-ы
Walleee
1 / 1 / 0
Регистрация: 28.04.2012
Сообщений: 57
23.01.2013, 12:13  [ТС]     mssql + android #28
да соединяется сейчас. тост не сработал потому что в catch попал(забыл убрать).

Добавлено через 16 часов 36 минут
а обращаться к данным я должен в этом же потоке?
простенький запрос выполняю опять ошибок кучу выводит.

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
        Thread t = new Thread(new Runnable() {
            public void run() {
              try {
                  Connection conn = null;
                  String url = "jdbc:jtds:sqlserver://127.0.0.1:12701/dbName";
                  String name = "userName";
                  String password = "userPassword";
                  try 
                  {
                   conn = DriverManager.getConnection(url, name, password);
                   Log.d(LOG_TAG, "good!");
                   
                   Statement st = conn.createStatement();
                   String query = "select * from tb where (id = 1)";
                   try
                   {
                   ResultSet rs = st.executeQuery(query);
                   Log.d(LOG_TAG, "very good!");
                   
                        try
                        {
                            //Log.d(LOG_TAG, rs.getString("GroupNo"));  
                            String str1; 
                            str1 = rs.getString("GN");
                        }
                        catch(Exception e) { Log.d(LOG_TAG, "very bad2!"); }           
                   }
                   catch(Exception e){ Log.d(LOG_TAG, "very bad!"); }
                  } 
                  catch (java.sql.SQLException e) 
                  {
                      e.printStackTrace();
                      Log.d(LOG_TAG, "bad");
                  } 
              } 
              catch (Exception e) {
                e.printStackTrace();
              }
            }
          });
          t.start();
logcat пишет
-------------------------------
01-23 08:00:35.789: E/ActivityThread(628): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d538e8 that was originally bound here
01-23 08:00:35.789: E/ActivityThread(628): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d538e8 that was originally bound here
01-23 08:00:35.789: E/ActivityThread(628): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-23 08:00:35.789: E/ActivityThread(628): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-23 08:00:35.789: E/ActivityThread(628): at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-23 08:00:35.789: E/ActivityThread(628): at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-23 08:00:35.789: E/ActivityThread(628): at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-23 08:00:35.789: E/ActivityThread(628): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-23 08:00:35.789: E/ActivityThread(628): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-23 08:00:35.789: E/ActivityThread(628): at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
01-23 08:00:35.789: E/ActivityThread(628): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
01-23 08:00:35.789: E/ActivityThread(628): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-23 08:00:35.789: E/ActivityThread(628): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-23 08:00:35.789: E/ActivityThread(628): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-23 08:00:35.789: E/ActivityThread(628): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-23 08:00:35.789: E/ActivityThread(628): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-23 08:00:35.789: E/ActivityThread(628): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-23 08:00:35.789: E/ActivityThread(628): at java.lang.Thread.run(Thread.java:856)
01-23 08:00:35.930: E/StrictMode(628): null
01-23 08:00:35.930: E/StrictMode(628): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d538e8 that was originally bound here
01-23 08:00:35.930: E/StrictMode(628): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969)
01-23 08:00:35.930: E/StrictMode(628): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863)
01-23 08:00:35.930: E/StrictMode(628): at android.app.ContextImpl.bindService(ContextImpl.java:1418)
01-23 08:00:35.930: E/StrictMode(628): at android.app.ContextImpl.bindService(ContextImpl.java:1407)
01-23 08:00:35.930: E/StrictMode(628): at android.content.ContextWrapper.bindService(ContextWrapper.java:473)
01-23 08:00:35.930: E/StrictMode(628): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157)
01-23 08:00:35.930: E/StrictMode(628): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145)
01-23 08:00:35.930: E/StrictMode(628): at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191)
01-23 08:00:35.930: E/StrictMode(628): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850)
01-23 08:00:35.930: E/StrictMode(628): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551)
01-23 08:00:35.930: E/StrictMode(628): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549)
01-23 08:00:35.930: E/StrictMode(628): at android.os.AsyncTask$2.call(AsyncTask.java:287)
01-23 08:00:35.930: E/StrictMode(628): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
01-23 08:00:35.930: E/StrictMode(628): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
01-23 08:00:35.930: E/StrictMode(628): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
01-23 08:00:35.930: E/StrictMode(628): at java.lang.Thread.run(Thread.java:856)
----------------------------------
лог выводит "very bad2!"
то есть ошибка тут
Java
1
str1 = rs.getString("GN");
хотя запрос корректный
Kris_1
5 / 5 / 0
Регистрация: 16.01.2013
Сообщений: 16
23.01.2013, 15:01     mssql + android #29
не нужно это в поток пихать уже. Получил переменную ResultSet, и выходи оттуда (ну, если хочешь)), и делай с ней потом что хочешь в любом месте программы.
Честно говоря не могу по логу (может быть ты не все прихватил) сообразить где ошибка, ищи среди этих строчек ошибок указание на твою программу, щелкаешь по ней два раза - и в редакторе тебе подсветит строчку, где произошла ошибка. Только если будет вложенный вызов - одной процедуры из другой, то будет допустим там две строчки с указанием конечной ошибки (сверху), и строчки во внешней процедуре, из которой была вызвана процедура с ошибкой (чуть ниже).

А правильно обрщаться к строчкам резалтсета примерно так
Java
1
2
3
while (rs.next()) {
                тут что-то делаешь с rs.getString("name")
            }

Потому что не понятно где у твоего сета находится текущая запись.

либо просто переходи перед вызовом rs.getString на первую запись резалтсета.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2013, 19:28     mssql + android
Еще ссылки по теме:

Android Android L
Android Android
Android Android
Android с 0 Android
Android.mk Android

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

Или воспользуйтесь поиском по форуму:
Kris_1
5 / 5 / 0
Регистрация: 16.01.2013
Сообщений: 16
24.01.2013, 19:28     mssql + android #30
вот сегодня случайно наткнулась на пример, там все это есть
http://www.quizful.net/post/using-jdbc
Yandex
Объявления
24.01.2013, 19:28     mssql + android
Ответ Создать тему
Опции темы

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