Android连接Cloud SQL查询成功却无法获取结果的问题求助
问题分析与解决方案
看起来你遇到的核心问题是无法正确获取SELECT NOW()的查询结果,我们来一步步拆解问题并修正:
1. 致命的列索引错误
JDBC的ResultSet列索引是从1开始计数的,你代码里用的resultSet.getString(0)是无效索引,这会直接抛出SQLException,但你的catch块只打印异常消息,可能没看到具体错误。
2. isFirst()的使用场景错误
默认connection.createStatement()生成的ResultSet是**仅向前滚动(FORWARD_ONLY)**的,这类ResultSet不支持isFirst()这类定位操作,调用会直接抛出异常。
3. 正确的结果遍历方式
获取ResultSet结果的标准姿势是用next()方法,它会将游标移动到下一行,返回true表示存在数据,false表示无更多数据。
修正后的完整代码
Connection connection = null; Statement statement = null; ResultSet resultSet = null; String query = "SELECT NOW()"; System.out.println("Connecting..."); try { // JDBC 4.0+ 无需手动加载驱动,DriverManager会自动扫描classpath中的驱动 // Class.forName("com.mysql.jdbc.Driver"); 这行可以移除 connection = DriverManager.getConnection("jdbc:mysql://<IP address>/test", "root", "root"); statement = connection.createStatement(); resultSet = statement.executeQuery(query); String result = "No Result Found"; // 使用next()判断是否有结果行 if (resultSet.next()) { // 列索引从1开始,也可以用列别名:比如SELECT NOW() as current_time,然后getString("current_time") result = resultSet.getString(1); } System.out.println("Result - " + result); } catch (Exception e) { // 打印完整异常栈,不要只打印消息,方便排查问题 e.printStackTrace(); } finally { // 务必在finally块关闭资源,避免连接泄漏 try { if (resultSet != null) resultSet.close(); if (statement != null) statement.close(); if (connection != null) connection.close(); } catch (SQLException e) { e.printStackTrace(); } } System.out.println("Process Terminated.");
额外小贴士
- 建议给查询的列起别名(比如
SELECT NOW() AS current_timestamp),这样用列名获取结果更直观,也避免索引错误。 - 永远记得关闭JDBC资源,放在finally块里能保证无论是否抛出异常都能释放连接。
内容的提问来源于stack exchange,提问作者Shunan
相关产品推荐
相关产品推荐

