簡體   English   中英

Android與Oracle數據庫的連接

[英]Android Connection with Oracle Database

通過單擊一個按鈕,我想執行選擇查詢以顯示一些結果,我使用了Internet權限,AsyncTask和PC的地址ip來執行此調用,但它對我沒有用,而且日志不起作用給我看什么找出問題所在,這是代碼:

在清單文件中:

 <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();
    }
}

我還在Netbeans的一個簡單的Java項目(無效主程序)中運行相同的過程,並且運行良好,我嘗試了很多次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();
        } 

您的catch子句僅包含語句e.printStackTrace(); 搞定了。 它只是吞沒了異常,您當然看不到它。 最好使用Log類報告捕獲的異常。 在其中插入類似Log.e(“ tag”,e.toString())的內容; 然后您會看到問題所在。

接下來,您應該始終關閉所有已使用的資源。 在您的情況下,它是Connection,Statement和ResultSet。 關閉它們的正確位置是您的(missed)finally子句。

但是無論如何,如果您想通過Android設備使用Oracle,則應確保從設備可訪問網絡192.168.1。*,並且至少可以成功(從設備)ping地址(192.168.1.7)。 您是否設法以某種方式測試連接? 而且有更多的原因來獲取異常(在您的代碼中默默地吞下),這意味着您應該做的第一件事是更改代碼並正確記錄異常。 接下來,它可能是缺少的JDBC驅動程序庫,可能是導致數據庫無法訪問(最可能)的網絡配置問題,如果您無權讀取“ auteur”,則可能是Oracle方面的問題,等等

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM