0

如何在 MySQL 表中分别返回两种不同类型的列(int、string)?我曾尝试使用此代码,但我无法弄清楚。请好心人,你能告诉我有什么问题吗?

请注意:::我想返回 keyid_col 和 key_col

这是我的代码:::

 public  void retrieve_keyword () throws SQLException{

    try {
        ResultSet results = statement.executeQuery
                ("SELECT keyword_id,key_words  FROM keywordlist");  
        try {

            while ( results.next() ) {
                int numColumns =
                        results.getMetaData().getColumnCount();
                int keyid_col = results.getInt("keyword_id");
                String key_col = results.getString("key_words");

                if (numColumns == 2) {
                    System.out.println(results.getObject(numColumns));
                }

                for ( int i = 1 ; i <= numColumns ; i++ ) {
                    System.out.println( "COLUMN " + i + " = " + results.getObject(i) );
                }        
            }
        } 

        catch(Exception ew){
            System.out.println( ew );
        }
    }catch(Exception ew){
        System.out.println( ew );
    }
}
4

6 回答 6

2

Java 不支持这个开箱即用。您需要创建一个数据结构并使用它。例如:

 public class retType {
     public retType( int val1, string val2 ) {
           this.val1 = val1; 
           this.val2 = val2;
     }
     public int val1;
     public string val2;
 }

 public retType someFunc()
 {
     int i = 1;
     string j = "example";
     return new retType(i, j);
 }
于 2013-05-17T20:15:52.100 回答
1

你可以使用一个Pair类。

class Pair<T1,T2> {
  private final T1 i1;
  private final T2 i2;

  public Pair(T1 i1, T2 i2) {
    this.i1 = i1;
    this.i2 = i2;
  }

  public T1 getI1() {
    return i1;
  }

  public T2 getI2() {
    return i2;
  }

  public String toString () {
    return "{" + i1 + "," + i2 + "}";
  }

}
于 2013-05-17T21:10:54.147 回答
1

您可以返回一个 Array 或一个 List(或其他面向集合的数据结构),或者您可以返回一个具有两个属性的类型(类或结构)的实例,一个用于您希望返回的每一件事。

Java、Javascript、C# 等语言不允许返回多个项目。您必须返回包含与您相关的任何内容的内容。

于 2013-05-17T20:16:11.433 回答
0

我使用 HashMap 执行此操作:

public Map<String, String> getUser() throws SQLException {
  Map<String, String> users = new HashMap<>();
  ...do query...
  users.put(p_key,username);
  return users; 
}

如果本机集合不为您执行此操作,那么您将需要一个自定义对象来执行此操作。即返回一个类。

于 2013-05-17T21:02:14.337 回答
0

在 Java 和大多数语言中,您不能从一个方法返回两个值。替代方法是传入一个对象,并更改对象中的值,或者将返回值包装为一个对象。或者,您可以返回一些集合,例如 List、Set 或 Map。

于 2013-05-17T20:16:35.113 回答
0

您的选择是定义一个具有您想要的字段的类(如 Skyhawk 船长的示例),或者返回一个 Object[],它可以简单地在其中携带一个 Integer 和一个 String 对象。一个例子是

Object objArrayReturnValue[] = { new Integer(51), "abcd" };
return objArrayReturnValue;

这很容易,但也很“懒惰”,因为大多数人会不鼓励使用它。当您返回一个对象数组时,您将失去(大部分)强类型语言(如 Java)的许多好处。

于 2013-05-17T20:46:30.353 回答