Android工作室与postgresql的连接

时间:2017-05-16 08:32:09

标签: android database postgresql android-studio

我是Android的新手并没有太多意识到这一点。我虽然已通过教程,但仍然没有得到任何解决方案。如何将Android Studio与postgressql连接?一步步! 我在MainActitvity.java中编写了这段代码。它是否正确?或者我应该把它写在哪里?

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

//  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://localhost:5432/","root","root");

        //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
    }
}

5 个答案:

答案 0 :(得分:1)

您无法在Android中直接使用java.sql.DriverManger, Connection, etc。 Android支持SQLite DB,如果你想在android中使用DB你必须使用SQLite数据库。对于Postgres,你必须开发服务器端应用程序和api服务,你可以从Android调用

答案 1 :(得分:1)

使用10.0.2.2代替localhost,它适用于我。

答案 2 :(得分:1)

好的,这可能已经过时但对用户仍然有帮助(对我有帮助) 我复制了你的例子并使用它因为我还需要在android上运行postgres。它有效!

  1. conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/","root","root");
  2. 这将导致错误,因为您需要输入数据库名称而不使用斜杠,例如:

    conn = DriverManager.getConnection("jdbc:postgresql://domain.com:5432/databaseName", "username", "password");
    
    1. 必须使用doInBackground()在AsyncTask中完成网络连接(如与数据库的连接)。我在活动中做到了

      public class dbactivity extends AppCompatActivity { //sry code formatting just broke
      
      String message = null;
      String conmsg  = null;
      
      private class pgsqlcon extends AsyncTask<Void, Void, Void>
      {
      
          public pgsqlcon()
          {
              super();
          }
      
          @Override
          protected Void doInBackground(Void... voids) {
              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...");
                  message = "Connecting to database...";
                  conn = DriverManager.getConnection("jdbc:postgresql://serverdomain.com:5432/databasename",
      
           

      “dbusername”,“password”);       //等等

    2. 如果你需要像setText那样进行UI更改,你必须像so()一样使用runOnUiThread:

    3. //using quote because code formatting doesn't work anymore for me xD
          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);
              }
          });
          }
      
      1. 哦是的,最后但并非最不重要的是,因为我在Activiy中写了这个,所以我必须通过在我的Activity的OnCreate()中调用我的asynctask来触发麻烦。

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dbactivity);
        
            pgsqlcon pgcon = new pgsqlcon();
            pgcon.execute();
        }
        

        }

      2. 我不是自己经验丰富的,所以你只能使用它来使用JDBC来连接你的postgresdb。虽然我设法以这种方式获得成功的查询结果。 再次,抱歉错误的代码格式。我做了他们想要的东西(4个空间规则等)并且它没有用。无论如何,我希望你能读懂它,祝你好运。

        如果这一切都没有用,也许你想看看这些小提示:https://jdbc.postgresql.org/documentation/head/prepare.html (我假设你做了那个,因为你做了很多几乎正确的代码)

答案 3 :(得分:0)

我的应用使用PostgreSQL作为后端。使用改造库连接到后端。在我的应用程序后端是用python编写的,它将在数据库中进行查询。这将使前端代码更加流畅和安全。并且可以将更多控件转移到后端。

答案 4 :(得分:0)

您无法直接将数据库与android studio连接, 您必须通过api与您的应用程序和数据库建立连接, 您可以用Java,PHP等编写api。

?php
  $db_connection = pg_connect("host=localhost dbname=record user=postgres password= ''");

  //pg query
?>

这是您的连接查询API。