15.Statement和PraparedStatement区别

本文对比了使用Statement与PreparedStatement执行SQL语句的方法,并介绍了它们各自的适用场景。PreparedStatement支持参数占位符,可以提高执行效率并防止SQL注入。

获取执行sql语句对象,PraparedStament对象

        通过Connection对象获取Statement或者PraparedStament对象(使用它)处理sql

Statement

Statement st = conn.createStatement();//获取sql语句执行对象

st.excuteUpdate(sql);//执行增删改语句

st.excuteQuery(sql);//执行查询语句      

sql语句必须是完整的。

PraparedStatment

sql语句可以不是完整的,可以将参数用?替代,然后在预编译后加入未知参数

PraparedStatment ps = conn.prapareStatement(sql);//获取sql语句执行对象praparedStatment

          赋值

ps.setInt(Index,value);ps.setString(index,value);//可以设置很多中类型,index1开始,代表sql语句中的第几个未知参数,

ps.excuteUpdate();//执行增删改语句

ps.excuteQuery(sql);//执行查询语句

 

        这两个的区别,常使用的是PraparedStatment对象,因为它可以预编译,效率高,可以设置参数等等优点

 

 

总结:

使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处

 

statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement是预编译得,   preparedstatement支持批处理

 

Code Fragment 1:  

String updateString = "UPDATE COFFEES SET SALES = 75 " + "WHERE COF_NAME LIKE ′Colombian′"; 

stmt.executeUpdate(updateString);  

Code Fragment 2:  

PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ? ");

updateSales.setInt(1, 75); 

updateSales.setString(2, "Colombian"); 

updateSales.executeUpdate(); 

### JSQLParser 中的 Statement 接口 `Statement` 是 `JSQLParser` 库中的核心接口之一,用于表示 SQL 语句的不同部分。该接口定义了一系列方法来解析操作各种类型的 SQL 语句[^1]。 #### 基本功能 通过实现此接口的对象可以访问并修改 SQL 查询的关键组件。例如,可以通过这些对象获取表名、列名以及条件表达式等信息。这使得开发者能够轻松地构建复杂的查询逻辑处理程序[^2]。 #### 使用示例 下面是一个简单的例子展示了如何利用 `JSQLParser` 来解析一条 SELECT 语句,并打印出其中涉及的所有表格名称: ```java import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.Select; public class Example { public static void main(String[] args) throws Exception { String sql = "SELECT * FROM customers WHERE id > 10"; Statement statement = CCJSqlParserUtil.parse(sql); if (statement instanceof Select selectStmt && selectStmt.getSelectBody() instanceof PlainSelect plainSelect){ System.out.println("Tables involved: "); plainSelect.getFromItem().accept(new TableVisitor()); } } private static final class TableVisitor extends AbstractExpressionVisitor implements ItemVisitor { @Override public void visit(Table table) { System.out.println(table.getName()); } } } ``` 这段代码首先导入必要的类,接着创建了一个字符串形式的简单 SQL 查询作为输入给定到 `CCJSqlParserUtil.parse()` 方法中去得到一个实现了 `Statement` 的实例。之后判断这个实例是不是属于 `Select` 类型并且进一步确认其主体是否为 `PlainSelect` 形式的子查询结构;如果是的话,则调用相应的接受者模式函数遍历整个 AST 抽象语法树找到所有的表节点并输出它们的名字[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值