
本文旨在解决android应用通过java直接连接postgresql数据库时遇到的常见问题。我们将探讨android模拟器中`127.0.0.1`与`10.0.2.2`的区别,并深入分析为何直接jdbc连接在android环境下并非最佳实践。最终,文章将推荐使用web服务(rest api)作为android应用与postgresql数据库进行安全、高效交互的优选方案,并简要提及gradle构建错误的处理方法。
在Android应用开发中,直接通过Java的JDBC(Java Database Connectivity)接口连接外部关系型数据库(如PostgreSQL)是一个常见的尝试,但往往伴随着一系列挑战和不推荐的实践。本教程将深入分析这些问题,并提供更健壮、安全的解决方案。
当你在Android模拟器中运行应用并尝试连接到与你的开发机器在同一台物理机上运行的PostgreSQL数据库时,使用127.0.0.1作为数据库主机地址是错误的。
修正后的连接字符串示例:
在你的ConnectPG类中,连接URL应修改为:
立即学习“Java免费学习笔记(深入)”;
package com.example.a112new;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException; // 导入SQLException
public class ConnectPG {
Connection connect = null;
public Connection connectBD(){
try{
Class.forName("org.postgresql.Driver");
// 修正后的连接字符串,使用10.0.2.2 连接宿主机器上的PostgreSQL
connect = DriverManager.getConnection( "jdbc:postgresql://10.0.2.2:5432/112", "postgresql", "430890");
System.out.println("数据库连接成功!"); // 添加成功提示
} catch (ClassNotFoundException e) { // 捕获驱动未找到异常
System.err.println("PostgreSQL JDBC 驱动未找到: " + e.getMessage());
} catch (SQLException e) { // 捕获SQL连接异常
System.err.println("数据库连接失败: " + e.getMessage());
}
return connect;
}
protected void disconnection(Connection con) throws SQLException { // 修正异常类型
if (con != null && !con.isClosed()) { // 检查连接是否为空且未关闭
con.close();
System.out.println("数据库连接已关闭。");
}
}
}同样,在InsertRecordExample类中,如果它被设计为在Android环境中运行,也需要进行类似的修改:
// ... (其他导入和类定义)
public class InsertRecordExample {
// localhost 修正为 10.0.2.2
private final String url = "jdbc:postgresql://10.0.2.2:5432/112";
private final String user = "postgres";
private final String password = "111111"; // 假设这是正确的密码
// ... (其他代码)
}尽管修正了IP地址,但直接在Android应用中使用JDBC连接数据库仍然不是推荐的做法,主要原因如下:
连接Android应用与PostgreSQL数据库的最佳实践是引入一个后端Web服务(通常是RESTful API)作为中间层。
工作原理:
Web服务架构优势:
示例(概念性):
假设你有一个Spring Boot后端服务,它暴露一个POST /api/users接口来插入用户数据。
后端Java代码片段 (Spring Boot):
// User entity and repository omitted for brevity
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserRepository userRepository; // Spring Data JPA repository
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
User savedUser = userRepository.save(user);
return new ResponseEntity<>(savedUser, HttpStatus.CREATED);
}
// Other CRUD operations (GET, PUT, DELETE)
}Android应用中调用后端API (使用Retrofit库):
// Retrofit service interface
public interface UserService {
@POST("api/users")
Call<User> createUser(@Body User user);
}
// In your Android Activity/Fragment
public void insertUserViaApi() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://10.0.2.2:8080/") // 后端服务的地址,模拟器访问宿主机器
.addConverterFactory(GsonConverterFactory.create())
.build();
UserService userService = retrofit.create(UserService.class);
User newUser = new User(1, "FFFF", "FFFF", "FFFFF", "2005-01-12", "+79888888888", "test@example.com", "1234567");
Call<User> call = userService.createUser(newUser);
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Call<User> call, Response<User> response) {
if (response.isSuccessful()) {
System.out.println("用户插入成功: " + response.body().getFirstName());
} else {
System.err.println("API调用失败: " + response.code());
}
}
@Override
public void onFailure(Call<User> call, Throwable t) {
System.err.println("网络错误: " + t.getMessage());
}
});
}注意:上述Android代码需要添加Retrofit和Gson依赖,并在AndroidManifest.xml中添加网络权限。
你遇到的Gradle错误 FAILURE: Build failed with an exception. ... Could not create task ':app:InsertRecordExample.main()'. SourceSet with name 'main' not found. 提示了一个常见的误区。
这个错误通常发生在以下情况:
解释: Android模块的main源集(SourceSet)是为Android应用程序的组件(Activity, Service等)构建的,而不是为独立的Java main方法。当你尝试直接运行一个main方法时,Gradle在Android模块的上下文中找不到一个合适的“main”入口点来执行它,因为Android应用是通过其Manifest文件和Activity生命周期启动的。
解决方案:
连接Android应用与PostgreSQL数据库时,应避免直接JDBC连接。优先采用后端Web服务(REST API)作为中间层,以确保应用的安全性、性能、可维护性和可扩展性。同时,对于开发和测试用途的纯Java代码(包含main方法),应将其置于独立的Java模块中,以避免与Android构建系统产生冲突。遵循这些最佳实践,将有助于构建更健壮、更专业的Android应用。
以上就是使用Java和Android连接PostgreSQL数据库:常见问题与最佳实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号