0

データベースで2つの値を検索し、それらが存在する場合は値を返す関数をJavaで構築しました。

  public List<Conniction> findPath(int one,int two){
    List<Conniction> list = new ArrayList<Conniction>();
    Connection c = null;
    String sql = "SELECT * FROM conniction WHERE oneid="+one+"&& twoid="+two;
    try {
        c = ConnectionHelper.getConnection();
        Statement s = c.createStatement();
        ResultSet rs = s.executeQuery(sql);
        ResultSetMetaData metaData = rs.getMetaData();
        int columncount = metaData.getColumnCount();
        //direct result
        if (columncount > 0) {
            System.out.println("Match one and two found!");
            while (rs.next()) {
                list.add(processRow(rs));
            }
        }
        else{
            String sql2 = "SELECT * FROM conniction WHERE oneid="+one;
            s = c.createStatement();
            rs = s.executeQuery(sql2);
             metaData = rs.getMetaData();
             columncount = metaData.getColumnCount();
                if (columncount > 0) {
                    System.out.println("One Match found!");
                    while (rs.next()) {
                        list.add(processRow(rs));
                    }
                }
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return list;

}

oneid返されたパラメーターの値が何であるかを確認して、との本当に正しい答えかどうかを確認するにはどうすればよいですかtwoid。それはいつも私が送ったものとは違うものを返します。

4

2 に答える 2

0

それが最善の解決策かどうかはわかりませんが、次のことができます。

あなたのメソッドはパラメータとしてリストを取得します:

    public int findPath(List<Conniction> list, int one, int two) {
        ...
        if (columncount > 0) {
            System.out.println("Match one and two found!");
            while (rs.next()) {
                list.add(processRow(rs));
            }
            return 2;
        } else {
            String sql2 = "SELECT * FROM conniction WHERE oneid="+one;
            s = c.createStatement();
            rs = s.executeQuery(sql2);
            metaData = rs.getMetaData();
            columncount = metaData.getColumnCount();
                if (columncount > 0) {
                    System.out.println("One Match found!");
                    while (rs.next()) {
                        list.add(processRow(rs));
                    }
                    return 1;
                } 
        }
    ...

}

コードで、メソッドを呼び出す場所で、戻り値を確認します。

    ...
    List<Conniction> connlist = new ArrayList<Conniction>();
    int foo = findPath(connlist , one, two);
    if (foo == 1) {
        /*One Match found!*/
        // do something with your connlist-Object;
    } else if (foo == 2) {
        /*Match one and two found!*/
        // do something with your connlist-Object;
    }
于 2012-06-26T16:40:11.510 に答える
0

あなたのコードには、動作を妨げる 2 つの深刻な問題があります。

  1. metaData.getColumnCount()(当然のことながら)行数ではなく、数を返します。返される列の数は、クエリで選択された内容に応じて一定です。この場合、あなたはテーブル内の列の数とまったく同じになります。処理するまで、行セットに含まれる行数はわかりませんselect *metaData.getColumnCount()conniction
  2. おそらくandではなく、 orロジックが必要です。
    "SELECT * FROM conniction WHERE oneid="+one+" OR twoid="+two
于 2012-06-26T16:50:18.810 に答える