创建Statement
Statement用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象只能执行不带参数的简单SQL语句。
通过调用 Connection 对象的 createStatement 方法创建该对象,该对象用于执行静态的 SQL 语句,并且返回执行结果。
Java代码:
Statement statement = connection.createStatement();
1
执行SQL语句
Statement 接口中定义了下列方法用于执行 SQL 语句:
ResultSet excuteQuery(String sql),用于执行查询语句,返回值是查询结果集;
int excuteUpdate(String sql),用于执行包括增删改在内的更新语句,返回值是更新语句影响的行数;
String sql = “update user set name = ‘jackma’ where id = 1”;
int affectedRows = statement.executeUpdate(sql);
1
2
缺点
只支持静态sql语句,只能通过字符串拼接的方式来生成SQL语句,但是这样做存在SQL注入攻击的风险。
javajdbc中的Statement到底是什么,怎么理解
查了些资料
首先,一个连接数据库的,就有一个Connection,然后这个Connection有很多Statement,如果要与请求一次数据库,就要有一个Statement。
还有一个很重要的一个概念,transaction(事务)
因为JDBC默认把auto-commit打开了
所以在connection和statement之间还有一层transaction
一个connection可以进行多个transaction,每个transaction包含多条statement
如果auto-commit打开的话,每个statement都是一个transaction
其次,我们还要要注意关闭的主要是connection,因为它占用底层资源,比如socket
一般来说不建议每次CRUD都建立新的connection,因为非常耗时。但也不建议使用单例,因为一般来说connection不应该在多个线程之间共享(好像JDBC标准规定connection是线程安全的,不过效率会下降,而且具体数据库实现不一定保证线程安全性)。
所以基本上,每个线程应该使用独立的connection,但在该线程之内,该connection是共享的。最简单的做法是为每个新进程创建一个connection,并把引用存放在ThreadLocal变量中,然后在进程结束时关闭connection。好一点的做法是使用连接池。有很多第三方Library。或者使用Java EE server提供的连接池。
实际中直接操作JDBC的机会越来越少了,即使不是有ORM框架(比如hibernate),很多项目也都离不开spring了,spring提供了一整套JDBC优化方案,非常方便。
另外我们为什么要关闭连接(关闭Connection和Statement)
说个形象点的吧 数据库好比一大杯饮料 只给你提供了5根吸管 5个人分别得到一个吸管(getConnection) 然后含着不放(也就是不执行.close())那么第六个人怎么访问数据库呢 为什么双12不好付账 就是因为淘宝这数据库提供的连接有线 被人占用着 你要等到他关闭才能连上