Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 签入mysql返回的答案等于我发送的参数_Java_Mysql - Fatal编程技术网

Java 签入mysql返回的答案等于我发送的参数

Java 签入mysql返回的答案等于我发送的参数,java,mysql,Java,Mysql,我用java构建了一个函数,在数据库中搜索2个值,如果它们存在,则返回值 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

我用java构建了一个函数,在数据库中搜索2个值,如果它们存在,则返回值

  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;

}
公共列表findPath(int-one,int-two){
列表=新的ArrayList();
连接c=null;
String sql=“从连接中选择*,其中oneid=“+one+”&&twoid=“+two;
试一试{
c=ConnectionHelper.getConnection();
语句s=c.createStatement();
结果集rs=s.executeQuery(sql);
ResultSetMetaData元数据=rs.getMetaData();
int columncount=metaData.getColumnCount();
//直接结果
如果(列数>0){
System.out.println(“找到了匹配的1和2!”);
while(rs.next()){
添加(processRow(rs));
}
}
否则{
字符串sql2=“从连接中选择*,其中oneid=“+one;
s=c.createStatement();
rs=s.executeQuery(sql2);
元数据=rs.getMetaData();
columncount=metaData.getColumnCount();
如果(列数>0){
System.out.println(“找到一个匹配项!”);
while(rs.next()){
添加(processRow(rs));
}
}
}
}捕获(SQLE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
退货清单;
}

如何检查返回的参数值,以检查它是否真的是
oneid
twoid
的正确答案。它总是返回与我发送的内容不同的内容

我不知道这是否是最好的解决方案,但您可以: *为列表对象指定参数 *然后返回一个代码 *检查代码并使用列表

您的方法将列表作为参数获取:

    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;
                } 
        }
    ...
public int findPath(列表、int-one、int-two){
...
如果(列数>0){
System.out.println(“找到了匹配的1和2!”);
while(rs.next()){
添加(processRow(rs));
}
返回2;
}否则{
字符串sql2=“从连接中选择*,其中oneid=“+one;
s=c.createStatement();
rs=s.executeQuery(sql2);
元数据=rs.getMetaData();
columncount=metaData.getColumnCount();
如果(列数>0){
System.out.println(“找到一个匹配项!”);
while(rs.next()){
添加(processRow(rs));
}
返回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;
    }
。。。
List connlist=new ArrayList();
int foo=findPath(connlist,一,二);
如果(foo==1){
/*找到一根火柴*/
//用你的connlist对象做点什么;
}else if(foo==2){
/*找到匹配的1和2*/
//用你的connlist对象做点什么;
}

您的代码存在两个严重问题,无法正常工作:

  • metaData.getColumnCount()
    (毫不奇怪)返回列数,而不是行数。返回的列数是一个常量,具体取决于查询中选择的内容。在本例中,您
    选择*
    ,因此
    元数据。getColumnCount()
    将正好是
    连接表中的列数。在处理行集之前,您不知道行集中有多少行
  • 你可能想要或逻辑,而不是和(即
    “从连接中选择*,其中oneid=“+one+”或twoid=“+two

  • 嗨,我不能发送列表作为参数,我只能发送一个和两个。我需要检查返回ResultSetMetaData metaData=rs.getMetaData()的值是什么;int columncount=metaData.getColumnCount();mybe有一个不同的函数,它可以检索列值?要获取记录集中行的列值,您必须向用户提供。获取…();看doku!或者举个例子:哦,你说得对,我需要找一排!!!抱歉,ResultSet rs=stmt.executeQuery(sql);int rowCount=rs.last()?rs.getRow():0;//结果集中的行数。别忘了将cyrsor设置为beforeFirst()行!:)