【问题标题】:java how retrieve data from databasejava如何从数据库中检索数据
【发布时间】:2013-10-31 03:31:41
【问题描述】:

我有代码

public static String getData(String query) {
        String output = "";
        try {
            String connectionUrl = "jdbc:sqlserver://localhost:1234;databaseName=123;user=123;password=123";
            Connection con = null;
            Statement stmt = null;
            ResultSet rs = null;
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                con = DriverManager.getConnection(connectionUrl);
                String SQL = "select smth from tableName where smth";
                stmt = con.createStatement();
                rs = stmt.executeQuery(query);
                while (rs.next()) {
                    output =  (String) rs.getObject(1);
                }
                rs.close();
        }
        catch (Exception e) {

            return "ERROR while retrieving data: " + e.getMessage();
        }
        return output;
    }

如果 value 是字符串,它可以工作。但如果是整数呢?还是布尔值?如何修改此方法使其通用,无论我得到什么类型的数据,我仍然将它作为字符串返回?

【问题讨论】:

  • 使用 rs.getInt(0) 如果它抛出异常然后 rs.getString(0) 等等......基本上你会知道数据库中的数据类型......
  • 如果不获取列类型,您实际上无法编写准确的通用检索机制。看我的回答。

标签: java sql-server object jdbc return


【解决方案1】:

首先在 ResultSet rs 中检索结果, 然后你可以编写如下代码。

您可以检查对象的实例,然后分配值。


String str;

Object obj = (Object)rs.getObject(1);

if(obj instanceof String){
   //do you work here for string like below
     str=(String)obj;
}
else if (obj instanceof Integer){
   //do your work for Integer
}

// 其他类型也可以这样做


【讨论】:

    【解决方案2】:

    在这一行

    output =  (String) rs.getObject(1);
    

    如果 字符串 则使用

    output =   rs.getString(1);
    

    如果 int

    output =   rs.getInt(1);
    

    点击oracle了解更多信息

    【讨论】:

      【解决方案3】:

      如果不使用ResultSetMetaData 类来获取列类型,您将无法准确地做到这一点。

      根据列的类型获取列数据。

      【讨论】:

      • Downvoter,这是处理任何 JDBC 数据类型的唯一可靠方法。根据查询,其他一切最终都会在运行时失败。
      【解决方案4】:

      您从结果集中获取值,假设它始终是一个 String 并尝试对 Object 实例进行类型转换。您应该根据类型使用检索方法。大多数情况下,我们将知道重试数据的列值的数据类型。您可以根据列的类型编写程序。这就是 ResultSet API 对每种数据类型都有一个方法的原因。

      For String
      
      rs.getString(1);
      
      For Int
      
      rs.getInt(1)
      

      请阅读ResultSet的文档

      【讨论】:

        【解决方案5】:
         while (rs.next()) 
         {
               String[] data;
               data = new String[100];
               data[i] = rs.getString("smth");
               i = i + 1;
        
          }
        

        试试这个,你的数据在数组中。使用数组而不是对象。

        【讨论】:

          【解决方案6】:

          toString() 呢?

          while (rs.next()) {
            output = rs.getObject(1).toString();
          }
          

          【讨论】:

            猜你喜欢
            • 2017-04-07
            • 2021-10-26
            • 2016-11-27
            • 2016-03-17
            • 2015-12-03
            • 1970-01-01
            • 1970-01-01
            • 2021-07-02
            • 2023-04-04
            相关资源
            最近更新 更多