Java 带有未知参数的准备语句
我正在尝试创建一个函数,在其中我可以连接到数据库并选择一些结果。我想用一个预先准备好的语句来做,但不知道给出了什么类型的参数 假设这是我的测试数据Java 带有未知参数的准备语句,java,mysql,jdbc,prepared-statement,Java,Mysql,Jdbc,Prepared Statement,我正在尝试创建一个函数,在其中我可以连接到数据库并选择一些结果。我想用一个预先准备好的语句来做,但不知道给出了什么类型的参数 假设这是我的测试数据 int id = 5; String name = "John Doe"; 然后我想这样调用我的函数: read("SELECT * FROM users WHERE id=?", id); 或 如图所示,有一个或多个参数作为输入,但当我必须将其设置为问号时,我会被卡住,因为我必须说明它是字符串(setString)还是int(setInt) 我
int id = 5;
String name = "John Doe";
然后我想这样调用我的函数:
read("SELECT * FROM users WHERE id=?", id);
或
如图所示,有一个或多个参数作为输入,但当我必须将其设置为问号时,我会被卡住,因为我必须说明它是字符串(setString
)还是int
(setInt
)
我如何在不知道变量是什么的情况下解决这个问题?(第9行)
1公共无效读取(字符串查询、字符串…参数){
2.试试看{
3.
4 Connection con=DriverManager.getConnection(数据库URL、用户名、密码);
5.
6 PreparedStatement pstmt=con.prepareStatement(查询);
7表示(int i=0;i
由于您正在发送字符串参数,您只需将第9行更改为setString(i+1,args[i])
你也可以使用一个对象。。。参数并调用setObject(i+1,args[i]),如果您知道调用它的类型。不要自己尝试这样做。这个问题已经解决了很多次,例如Spring Framework的JdbcTemplate
类。@Kayaman谢谢你的提示,但我刚刚开始使用java连接到数据库,所以我不会直接使用Spring。我想先学习和理解JDBC
的基础知识。所以我现在最好使用一个普通的语句,然后不要创建这样的泛型方法。相反,编写一个名为getUserById(int-id)
和getUserByIdAndName(int-id,String-name)
的方法。虽然id听起来像主键,这使得它是唯一的,所以用id和名称进行选择是没有意义的。也许getUsersByName(字符串名)
?我与数据库的所有通信都有一个函数。如果我必须为所有不同的表创建一个单独的函数,那么文件将变得越来越大。是的,您将编写更多的代码(和大量的样板文件),但设计将更加健壮。这是你的选择:懒惰,设计拙劣,或者键入更多代码,并有一个良好的定义良好的数据库接口。但是,如果我有一个datetime,我仍然可以使用setString
,如果我正确格式化了它?这取决于数据库JDBC驱动程序。有些人会让你。如果您更改为对象。。。版本中,只需在正确的位置传递一个java.sql.Timestamp()作为参数。
read("SELECT * FROM users WHERE id=? AND name=?",id,name);
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);
}
}