开发者学堂课程【Java高级编程:PreparedStatement 接口简介】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/438
preparedSratement 操作数据库
为了解决 Statement 接口存在的 SQL 执行问题,所以在 java.sql 包里面又提供有一个Statement 子接口:
PrearedStatement,,这个接口最大的好处是可以编写正常的 SQL(数据不再和 SQL 语法混合在一起),同时利用占位符的形式,在 SQL 正常执行完毕后可以进行数据的设置。
观察 PreparedStatement 接口定义:
Public interface PreparedStatement extends Statement
如果要想获取 PreparedStatement 接口的实例,则依然需要通过 Connection 接口来实现,创建方法:
创建PreparedStatement接口对象:public PreparedStatement
prepareStatement(String sql) throw SQLException;
由于SQL语句已经在创建 PreparedStatement 接口对象的时候提供了,所以在执行数据库操作的时候也要更换方法。
数据库更新:public int executeUpdate() throw SQLException;
数据库查询:public ResultSet executeQuery() throw SQLException。
范例:利用 preparedStatement 解决之前的数据操作问题
package cn . mldn . demo ;
import java . sql . Connection ;
import java .sq1.DriverManager;
import java .sq1.PreparedStatement;
import java .utl1.Date;
public class JDBCDemo {
private statie final String DATABASE _ DRVIER =" oracle . jdbe . driver . OracleDriver ";
private static final String DATABASE _ URL =" jdbc : oracle : thin :@1oca1host:1521:mldn";
private static final String DATAASE _ USER =" scott ”;
private static final String DATABASE _ PASSNORD =" tiger ”;
pub1ie statie void main ( String [] args ) throws Exception {
String title =" MLDN 新闻'老李写的”;
Int read 99;
double price =99.8;
String content =“这个春天有点冷”;
Datel pubdate = new . Date ();
String sql =" INSERT INTo news ( nid , title , read , price , content , pubdate ) VALUES "+"( news _ seq . nextval ,?,?,?,?)";//使用了"?”作为占位符
Connection conn =null;//每一个 Connection 接口对象摺述的就是一个用户连接
Class . forName ( DATABASE _ DRVIER );//向容器之中加载数据岸驱动程序
conn В DriverManager . getConnection ( DATABASE _ URL , DATABASE _ USER , DATABASE _ PASSWORD);
PreparedStatement pstmt = conn . prepareStatement (sql);//创建教据库的操作对象
//在执行具体的数据库操作之前需要为占位符设置内容。按照顺序设置
pstmt , setString (1, title );
pstmt . setInt (2, read );
pstmt . setDouble (3, price );
pstmt . setString (4, content );
pstmt . setDate (5, new java .sq1.Date( pubdate . getTime );
int count = pstmt , executeUpdate ();/返回影响的行数
System , out , println (”更新操作影响的数据行数,"+ count );
conn . close ();//数据库的连接资源有限一定要关闭
}
}
}
在 JDBC 里面不管使用的是 preparedStatement 设置的日期时间还是使用 ResultSet 获取的日期时间实际上都是 java.util,Date 的子类,也就是说现在是如下的对应关系。