Jump to content
¯\_( ツ)_/¯
  • TAD GROUP are currently hiring penetration testers. Please read the topic in Career Central subforum.
  • Sponsored Ad
TheFutureOfProgramming

Как да свържа PostgreSQL с Android Studio

Recommended Posts

Търся от дълго време някаква информация за това, но не намирам нищичко. Сравнително нов съм в Java, но знам повечето неща и бързо се уча. Ако някой може да ми помогне с някоя статия или да ми каже как става връзката между Postgres и Android Studio. До колкото разбрах, трябва да създам някакъв сървар който да прави връзката между приложението и базата данни, но как се създава този сървар? Също така за първи път задавам въпрос тук, извинявам се ако съм сбъркал къде да кача темата, не е нарочно със сигурност.

Edited by TheFutureOfProgramming

Share this post


Link to post
Share on other sites

Здравейте,

Преди всичко е добре да се знае следното:

Ако вярваме на това, което твърдят от Google то би следвало да не може да се ползва директно java.sql.DriverManager, Connection.

На пръв поглед в това има някаква логика, защото по подразбиране Android поддържа СУБД SQLight. От това следва, че ако искате да използвате база данни в Android e е добре да ползвате SQLLight (така е и в iOS и Windows и къде ли не, но там се ползват други бази).

За Postgres трябва да се разработят сървърно приложение и API-методи, които да комуникират с Android. Звучи много страшно, но дали наистина е така? 🙂

Като начало нека разгледаме един конкретен пример взет от internet:

static final String JDBC_DRIVER = "org.postgresql.Driver";
    static final String DB_URL = "jdbc:postgresql://localhost:5432/user1";

// STEP 1: Database credentials
static final String USER = "root";
static final String PASS = "root";

public static void main(String[] args)
{
    Connection conn = null;
    Statement st = null;

    try{

        // STEP 2: Register JDBC driver
        Class.forName("org.postgresql.Driver");

        // STEP 3: Open a connection
        System.out.println("Connecting to database...");
       

      conn = DriverManager.getConnection("jdbc:postgresql://domain.com:5432/databaseName", "username", "password");

     

        // STEP 4: Execute a query
        System.out.println("Creating statement...");
        st = conn.createStatement();
        String sql;
        sql = "SELECT  first, last FROM Employees";
        ResultSet rs = st.executeQuery(sql);

        // STEP 5: Extract data from result set
        while(rs.next()){
            //Retrieve by column name
            String first = rs.getString("first");
            String last = rs.getString("last");

            //Display values
            System.out.print(", First: " + first);
            System.out.println(", Last: " + last);
        }

        // STEP 6: Clean-up environment
        rs.close();
        st.close();
        conn.close();
    }catch(SQLException se){
        //Handle errors for JDBC
        se.printStackTrace();
    }catch(Exception e){
        //Handle errors for Class.forName
        e.printStackTrace();
    }
    finally
    {
        //finally block used to close resources
        try{
            if(st!=null)
                st.close();
        }catch(SQLException se2){
        }// nothing we can do
        try{
            if(conn!=null)
                conn.close();
        }
        catch(SQLException se){
            se.printStackTrace();
        }//end finally try
    }
}

Обърни специално внимание на текста, който съм маркирал.

Важно е да знаеш, че databaseName е ФИЗИЧЕСКИЯТ адрес, в смисъл не "псевдонима на базата" а името на реалния файл, така както се чете от операционната система (например StupidDB.sql или нещо подобно)

Има и още. Вместо domain.com може да използваш IP адрес. Ако правиш разработка на лаптопа си или на локална станция може спокойно да го замениш с 192.168.1.1 или (ако ползваш Android SDK за да не се тормозиш с различията в хардуера) пишеш 10.0.2.2 или каквото си указал в настройките.

Username и password са потребителското име и паролата за достъп до базата данни.

Този код работи на 100% ако си конфигурирал работната си станция както трябва.

Сега още малко полезни съвети от internet, за любители на Java и други подобни недоразумения. 🙂

Ако искаш да внасяш изменения в потребителския интерфейс е добре да използваш runOnUiThread. 

Ето как някои правят това:

    private void setAsyncText(final TextView text,final String value){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (value == null)
                text.setText("null");
            else
                text.setText(value);
        }
      }
    }

Имай в предвид, че в случая се ползва JDBC, нещо, което лично аз посмъртно не бих направил (както и не бих ползвал Java за подобни цели), но това е мое виждане. Лично аз бих ползвал Datasnap (за да си създам собствен REST сървър) в комбинация с FireDAC, за да получа пълен физически достъп до SUBD без да съм зависим от благоволението на Google или на някой друг. 

И за да завършим темата ... 🙂

Отново малко информация, какво биха направили тези, които са решили да вървят по пътя на индийските програмисти и да ползват Java. 🙂 

Те биха добавили следния код:

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

    pgsqlcon pgcon = new pgsqlcon();
    pgcon.execute();
}

А ти не се притеснявай да питаш. Въпросите тук се насърчават и няма да те наругаем (както се прави в други форуми).

Тук сме възпитани и отзивчиви. 

Ако има нещо, което не си разбрал от това, което съм ти написал виж тук:

https://jdbc.postgresql.org/documentation/head/prepare.html

Бъди здрав и не спирай да се учиш.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.