1. Statement:
它用于访问数据库。语句接口不能接受参数,在运行时使用静态 SQL 语句时很有用。如果只想运行一次 SQL 查询,则此接口优于 PreparedStatement

例子 -

//Creating The Statement Object  
Statement YiibaiDemo = con.createStatement();

//Executing The Statement  
YiibaiDemo.executeUpdate("CREATE TABLE STUDENT(ID NUMBER NOT NULL, NAME VARCHAR)");

2. CallableStatement:
当要使用数据库存储过程时使用它。CallableStatement 可以接受运行时输入参数。

例子 -

//Creating CallableStatement object 
CallableStatement YiibaiDemo = con.prepareCall("{call anyProcedure(?, ?, ?)}");

//Use YiibaiDemo.setter() methods to pass IN parameters

//Use YiibaiDemo.registerOutParameter() method to register OUT parameters

//Executing the CallableStatement
 YiibaiDemo.execute();

//Use YiibaiDemo.getter() methods to retrieve the result

Statement 和 CallableStatement 之间的区别:

Statement CallableStatement
当 SQL 查询只执行一次时使用它。 当要执行存储过程时使用它。
不能在运行时传递参数。 可以在运行时传递参数。
用于 CREATE、ALTER、DROP 语句。 用于执行函数功能。
性能非常低。 性能优于Statement。
用于执行正常的 SQL 查询。 用于调用存储过程。
它是基本接口。 它扩展了 PreparedStatement 接口。
它用于 DDL 语句。 它用于存储过程。
不能使用语句来读取二进制数据.. 可以使用 CallableStatement 来读取二进制数据..