java - 带有未知参数的准备好的语句

标签 java mysql jdbc prepared-statement

我正在尝试创建一个可以连接到数据库并选择一些结果的函数。我想用准备好的语句来做到这一点,但不知道给出什么类型的参数。

可以说这是我的测试数据

int id = 5;
String name = "John Doe";

然后我想这样调用我的函数:

read("SELECT * FROM users WHERE id=?", id);

read("SELECT * FROM users WHERE id=? AND name=?",id,name);

如图所示,我得到一个或多个参数作为输入,但是当我必须将其设置为问号时,我陷入困境,因为我必须说它是否是一个 String(setString) 或 int(setInt)。

在不知道变量是什么的情况下如何解决这个问题? (第 9 行)

1 public void read(String query, String... args){
2   try{
3       
4       Connection con = DriverManager.getConnection(databaseURL, username, password);
5       
6       PreparedStatement pstmt = con.prepareStatement(query);
7       for(int i = 0; i < args.length;i++){
8           //What do I put here?
9           pstmt.setValue(i,args[i]);
10      }


        String select = "use datapersistentie;";
        pstmt.executeQuery(select);

        ResultSet rs = pstmt.executeQuery(query); 

        while (rs.next()) {   
          // do something with the result
        }

        stmt.close();
        con.close();
    } catch (Exception e){
        System.out.println(e);
    }
}

最佳答案

由于您要发送字符串参数,因此只需将第 9 行更改为 setString(i+1,args[i])

如果您知道调用它的类型,您还可以使用 Object... 参数并调用 setObject(i+1,args[i]) 。

关于java - 带有未知参数的准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524458/

相关文章:

java - twitter4j:搜索 api 未给出最近 7 天的结果

java - 线程安全/发布

java - HikariCP - 在连接 checkin 和从连接池 checkout 时动态设置连接的数据库

java - 使用 MVC 和 DAO 模式在 JSP 页面中的 HTML 中显示 JDBC 结果集

java - 如何在 for 循环中使用 invalidate()

java - 找不到 JSF2.0 标签

mysql - SQL 中 ifnull() 的混淆行为

MySQL读关系代数?

mysql - 如何从 C++/WinRT UWP 应用连接到 SQL Server?

java - 如何使一台 PC 上的 Oracle 11g 数据库可供另一台 PC 使用