2016-12-14 4 views
0

, нажав кнопку, я хочу выполнить запрос выбора, чтобы показать некоторые результаты, я использовал разрешение Интернета и AsyncTask и адрес ip моего ПК для выполнения этого вызова, но он не работал для я, также Записывать не показывает мне что-нибудь, чтобы выяснить этот вопрос, это код:Android-соединение с Oracle Database

в файле манифеста:

<uses-permission android:name="android.permission.INTERNET"/> 

Android програмного:

package com.ammach.oraclecon; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class MainActivity extends AppCompatActivity { 


    class Task extends AsyncTask<Void,Void,String>{ 

     @Override 
     protected String doInBackground(Void... params) { 

      String param="mal9a walou"; 
      String driver="oracle.jdbc.driver.OracleDriver"; 
      String bd="ORCL"; 
      String user="SYSTEM"; 
      String passwd="SYSTEM"; 
      String port="1521"; 
      String ip="192.168.1.7"; 
      String url="jdbc:oracle:thin:@"+ip+":"+port+":"+bd; 

      Connection con=null; 
       try { 
        Class.forName(driver); 
        con = DriverManager.getConnection(url, user, passwd); 
        Log.e("coooon", "coooon"); 
        Statement st=con.createStatement(); 
        Log.e("Statement", "Statement"); 
        ResultSet resultSet = st.executeQuery("select * from auteur"); 
        Log.e("ResultSet", "ResultSet"); 

        Log.e("con", "You made it, take control your database now!"); 
        if(resultSet.next()){ 
         param=resultSet.getString("nom"); 
         Log.e("dkhal", "rah dkhal"); 
        }else{ 
         Log.e("walou", "walou"); 
        } 

       } catch (SQLException | ClassNotFoundException e) { 
        e.printStackTrace(); 
       } 


      return param; 
     } 

     @Override 
     protected void onPostExecute(String param) { 
      super.onPostExecute(param); 
      textView.setText(param); 
      Toast.makeText(MainActivity.this, "finished", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    TextView textView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     textView= (TextView) findViewById(R.id.txt); 
    } 

    public void fetchOracle(View view) { 

     new Task().execute(); 
     Toast.makeText(MainActivity.this, "starting", Toast.LENGTH_SHORT).show(); 
    } 
} 

я Al поэтому выполните ту же процедуру в простом проекте java (void main) в Netbeans, и он отлично работает, я много раз пытался использовать приложение для Android, но я не смог, может кто-то помочь мне решить эту проблему.

это Java программа:

 String param = "nothing"; 
     String driver = "oracle.jdbc.driver.OracleDriver"; 
     String bd = "ORCL"; 
     String user = "SYSTEM"; 
     String passwd = "SYSTEM"; 
     String port = "1521"; 
     String ip = "localhost"; 
     String url = "jdbc:oracle:thin:@" + ip + ":" + port + ":" + bd; 

     Connection con = null; 
     try { 
      Class.forName(driver); 
      con = DriverManager.getConnection(url, user, passwd); 
      Statement st = con.createStatement(); 
      ResultSet resultSet = st.executeQuery("select * from auteur"); 
      if (resultSet.next()) { 
       param = resultSet.getString("nom"); 

      } else { 
       System.out.println("no result"); 
      } 
      System.out.println("nom: "+param); 
     } catch (SQLException | ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
+0

Вы на реальном устройстве Android или эмуляторе? –

+0

на реальном устройстве –

ответ

0

Ваш пункт задвижка с единственным заявлением e.printStackTrace(); делает трюк. Он просто проглатывает исключение, и вы, конечно, не можете его увидеть. Гораздо лучше использовать класс журнала для отчета об исключении пойманного. Вставьте туда что-то вроде Log.e («tag», e.toString()); и вы увидите проблему.

Далее вы должны всегда закрыть все ресурсы, которые вы использовали. В вашем случае это Connection, Statement и ResultSet. Правильное место для их закрытия находится в вашем (пропущенном) предложении finally.

Но в любом случае, если вы хотите работать с Oracle с устройства Android, вам необходимо убедиться, что сеть 192.168.1. * Доступна с вашего устройства, а адрес (192.168.1.7) по крайней мере можно успешно отсканировать (от вашего устройство). Вам удалось каким-то образом проверить соединение? И может быть гораздо больше причин, чтобы получить исключение (которое тихо проглочено в вашем коде), это означает, что первое, что вам нужно сделать, это изменить свой код и правильно обработать исключение. Далее это может быть недостающая библиотека драйверов JDBC, это может быть проблема конфигурации сети, которая делает невозможным доступ к базе данных (что наиболее вероятно), это может быть проблемой на стороне Oracle, если у вас нет разрешения на чтение из «auteur», и т. д.

+0

Я pinged мой ПК с моего телефона и это достижимо, я изменил код с примечаниями u упомянул, и это дает мне исключение ниже: –

+0

java.sql.SQLException: Exception d'E/S : Сетевой адаптер не смог установить соединение –

+0

проблема заключается в том, что URL-адрес работает в простом проекте в netbeans –