Android: 5.1.1,targetSdkVersion 22,jdk 1.8,PostgreSql 15
1.权限添加, AndroidManifest:
<uses-permission android:name="android.permission.INTERNET" />
2.依赖包添加:build.gradle dependencies,根据android版本与sdk选择:
或者下载后添加 https://jdbc.postgresql.org/download/
//依赖版本错误可能导致Class not found, Android O minsdk, jdk版本等异常
implementation 'org.postgresql:postgresql:42.1.2'
3.postgresql添加ip访问权限: 在 pg_hba.conf 中添加:
# IPv4 local connections:
host all all 192.168.0.1/24 trust
4.访问时新建线程:
Android访问数据库不能使用主线程,需要额外建立线程
5.示例代码:
//调用 PostgreSqlTest.testQuery() 查询id;
public class PostgreSqlTest {
private static Connection conn;
public static String ip = "192.168.0.10";
public static String port = "5432";
public static String database = "test";
public static String user = "postgres";
public static String pw = "123456";
private static void connectDataBase() {
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
try {
conn = DriverManager.getConnection("jdbc:postgresql://" + ip + ":"+port+"/" + database , user, pw);
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void closeDataBase() {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
public static synchronized void testQuery() {
new Thread(() -> {
connectDataBase();
try {
java.sql.Statement statement = conn.createStatement();
String sql = "select id from company";
System.out.println(sql);
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
System.out.println("select id from company: " +resultSet.getString("id"));
}
statement.close();
conn.commit();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
closeDataBase();
}
}).start();
}
}