您好我正在尝试学习JDBC。 这是我的问题: -
在JDBC中使用PreparedStatement
是什么因为我们也可以通过使用createStatement();
来达到同样的效果。
我的意思是如果有这样的查询:
Select * from tbl_name where id = somevalue
然后我们可以通过PreparedStatement
和createStatement()
来实现它。如下:
使用CreateStatement()
:
try {
DataInputStream dis=new DataInputStream(System.in);
System.out.println("Enter id :- ");
int id=Integer.parseInt(dis.readLine());
String q="Select * from tbl_name where id="+id;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(q);
while(rs.next()) {
//fetching part
}
} catch(Exception ex){ ... }
使用PreparedStatement
:
try {
PreparedStatement preStatement=conn.prepareStatement("Select * from tbl_name where id=?");
DataInputStream dis=new DataInputStream(System.in);
System.out.println("Enter id:- ");
int id=Integer.parseInt(dis.readLine());
preStatement.setInt(1, id);
ResultSet result = preStatement.executeQuery();
while(result.next()){
// fetch the data
}
}catch(Exception ex){ ... }
由于这两个程序都能够完成相同的任务。
答案 0 :(得分:5)
准备好的语句概念不是特定于Java,而是数据库概念。预编译语句意味着,当您执行SQL查询时,数据库服务器将在执行实际查询之前准备执行计划,此执行计划将缓存在数据库服务器上以供进一步执行。
准备陈述的好处是:
答案 1 :(得分:1)
使用createStatement时,每次执行语句时,底层数据库都必须解析并编译传递的select查询。这可能会影响性能。您可以在预准备语句中“保存”查询逻辑,并在每次执行语句时传入查询参数,这些参数可能是查询的可变部分。