我是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
}
}
答案 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。它有效!
conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/","root","root");
这将导致错误,因为您需要输入数据库名称而不使用斜杠,例如:
conn = DriverManager.getConnection("jdbc:postgresql://domain.com:5432/databaseName", "username", "password");
必须使用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”); //等等
如果你需要像setText那样进行UI更改,你必须像so()一样使用runOnUiThread:
//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); } }); }
哦是的,最后但并非最不重要的是,因为我在Activiy中写了这个,所以我必须通过在我的Activity的OnCreate()中调用我的asynctask来触发麻烦。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dbactivity);
pgsqlcon pgcon = new pgsqlcon();
pgcon.execute();
}
}
我不是自己经验丰富的,所以你只能使用它来使用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。