You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin直连PostgreSQL数据库可行性及实现方法咨询

在Android平台用Kotlin直接连接PostgreSQL数据库:可行但不推荐

结论先行

可以直接通过Kotlin连接PostgreSQL,但这种做法在生产环境中极度不推荐,存在严重的安全、性能和维护风险。如果只是做本地测试或学习,可按以下步骤实现。

实现步骤

1. 添加JDBC驱动依赖

在你的app/build.gradle(Module级别)的dependencies块中添加PostgreSQL的JDBC驱动:

dependencies {
    // 替换为最新版本的PostgreSQL JDBC驱动
    implementation 'org.postgresql:postgresql:42.6.0'
}

2. 配置网络权限与安全规则

  • 在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  • 针对Android 9及以上版本,默认禁止明文HTTP流量。如果你的数据库服务器用的是HTTP(非HTTPS),需配置网络安全规则:
    1. 在res/xml目录下创建network_security_config.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config>
    
    1. 在AndroidManifest.xml的application标签中引用该配置:
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config">
        ...
    </application>
    

3. 编写数据库连接代码

注意:绝对不能在Android主线程执行数据库操作,需用Kotlin协程或其他后台线程机制实现:

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet

fun connectToPostgres() {
    GlobalScope.launch(Dispatchers.IO) {
        val url = "jdbc:postgresql://你的数据库地址:端口/数据库名"
        val user = "数据库用户名"
        val password = "数据库密码"

        var connection: Connection? = null
        try {
            // 加载驱动(新版JDBC驱动可自动加载,此步可省略)
            Class.forName("org.postgresql.Driver")
            // 建立连接
            connection = DriverManager.getConnection(url, user, password)
            // 执行查询
            val statement = connection.createStatement()
            val resultSet: ResultSet = statement.executeQuery("SELECT * FROM 你的表名")
            
            // 处理查询结果
            while (resultSet.next()) {
                val id = resultSet.getInt("id")
                val name = resultSet.getString("name")
                // 处理数据,比如更新UI需切换到主线程
                launch(Dispatchers.Main) {
                    // 更新UI逻辑
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            // 关闭资源
            connection?.close()
        }
    }
}

为什么不推荐直接连接?

  • 安全风险:客户端代码中的数据库用户名、密码可被反编译获取,攻击者能直接操作你的数据库,导致数据泄露或破坏。
  • 性能与稳定性:移动网络波动大,数据库长连接易中断;直接查询无中间层缓存,响应速度慢,消耗用户流量。
  • 维护成本:业务逻辑硬编码在客户端,修改需重新发版;无法实现限流、权限控制等必要的后端逻辑。

推荐替代方案

正确的做法是搭建后端API(如用Spring Boot、Ktor等),客户端通过API与数据库交互,由后端处理数据库连接、业务逻辑和权限控制。

参考资料

  • PostgreSQL官方JDBC驱动文档:包含驱动版本兼容、配置参数、使用示例等内容
  • Android官方网络权限指南:详细说明网络权限申请和网络安全配置规则
  • Kotlin协程官方文档:讲解如何在Android中安全地执行后台线程任务

内容的提问来源于stack exchange,提问作者Mücahit Genç

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:45:27