Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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一个支持多查询的函数_Java - Fatal编程技术网

Java一个支持多查询的函数

Java一个支持多查询的函数,java,Java,我想写一个函数来执行不同的查询。我希望它传递表名、select、insert方法和一个值列表​​关于你喜欢的地方。我在php中做过类似的事情,我处理了数组中的所有内容,但不知道如何在Java中求解,可能有一些现成的类 我当前的PHP解决方案: $user = db::getInstance()->update('users', 2, array( 'password' => 'newpassword')); public function update($table

我想写一个函数来执行不同的查询。我希望它传递表名、select、insert方法和一个值列表​​关于你喜欢的地方。我在php中做过类似的事情,我处理了数组中的所有内容,但不知道如何在Java中求解,可能有一些现成的类

我当前的PHP解决方案:

$user = db::getInstance()->update('users', 2, array(
    'password' => 'newpassword'));

    public function update($table, $id, $fields){

        $set = '';
        $x = 1;

        foreach($fields as $name => $value){
            $set .= "{$name} = ?";

            if($x < count($fields)){
                $set .= ', ';       
            }
        }

        $sql = "UPDATE {$table} SET {$set} where id = {$id}";


        if(!$this->query($sql, $fields)->error()){
                    return true;
        }
    }
$user=db::getInstance()->更新('users',2,数组(
“密码”=>“新密码”);
公共函数更新($table,$id,$fields){
$set='';
$x=1;
foreach($name=>$value的字段){
$set.=“{$name}=?”;
如果($x<计数($fields)){
$set.=',';
}
}
$sql=“更新{$table}SET{$SET},其中id={$id}”;
如果(!$this->query($sql,$fields)->error()){
返回true;
}
}

通过使用接口并将该接口的实现作为参数传递,您可以做几乎相同的事情

一个抽象的例子:

接口

public interface MyInterface {
    public void doTheSelect();
}
实施A

public class MyImplementationA implements MyInterface{

    @Override
    public void doTheSelect() {
        // Do some sort of select
    }
}
实施B

public class MyImplementationB implements MyInterface{

    @Override
    public void doTheSelect() {
        // Do some other sort of select
    }
}
你的类与你的函数/方法

public class MyClass{

    public void myFunction(MyInterface implementation) {
        implementation.doTheSelect();
    }

}
“区别”在于,您必须考虑面向对象

这是我的解决方案

  @Override
        public int insert(Map<String, String> valueMap, String table) throws SQLException { 
        // TODO Auto-generated method stub

            Connection conn = Database.getInstance().getConnection();

            String val = "";
            String query = "";
            String question = "";
            Integer mapsize = valueMap.size();
            Integer x = 1;

            for (Map.Entry<String, String> entry : valueMap.entrySet()) {

                val += entry.getKey();
                question += "?";

                if (x < mapsize) {
                    val += ", ";
                    question += ", ";
                }
                mapsize--;
            }

            query = "insert into " + table + "(" + val + ") values ("+question+")";
            PreparedStatement add = conn.prepareStatement(query);

            for(Map.Entry<String, String> entry : valueMap.entrySet()){

                add.setObject(x,entry.getValue());
                x+=1;
            }
            int addtotable = add.executeUpdate();
            add.close();

            return addtotable;
        }
@覆盖
public int insert(映射值映射,字符串表)抛出SQLException{
//TODO自动生成的方法存根
连接连接=数据库.getInstance().getConnection();
字符串val=”“;
字符串查询=”;
字符串问题=”;
整数mapsize=valueMap.size();
整数x=1;
对于(Map.Entry:valueMap.entrySet()){
val+=entry.getKey();
问题+=“?”;
如果(x
我更感兴趣的是,像我在php中使用的那样,将przeazać参数添加到函数中,因为我从您的数据库中获得了一个Java类,不希望任何更改。还有语言设计和限制。在我的回答中,我假设您正在谈论函数指针,请参阅这篇文章:好的,以及如何以类似于“password”=>“newpassword”的方式将数组传递给函数?“key=>value”操作符似乎传递给关联数组。Java中最接近关联数组的数据结构可能是映射