数据库建立连接之后,便可进行SQL语句操作,而Java已经为我们封装好了相关的接口:Statement接口。接下来将总结其两个实现类(Statement,PreparedStatement)的获取和用法区别以及其它SQL语句操作。
获取:
通过连接对象获取:Statement–>createStatement方法
PreparedStatement–>prepareStatement方法
具体代码实现:
Connection con=DriverManager.getConnection("数据库相关信息");
PreparedStatement ps=con.prepareStatement(sql语句);
Statement stmt=con.createStatement();用法区别:
在用法上Statement和PreparedStatement还是有很大区别的,而PreparedStatement类更为常用;其主要是因为PreparedStatement能够防止SQL语句的注入问题。(SQL语句注入:SQL语句编写错误或编写恶意SQL语句会使数据库遭到破坏,这种情况的出现是因为用户不小心或有外部操作恶意破坏数据库造成的。);PreparedStatement能提供Java程序自主设参数功能,从而避免了以上问题。
代码体现:
String sql1="delete from student where id=?";//?表示占位符
String sql2="delete from student where id=2";
PreparedStatement ps=con.prepareStatement(sql1);
Statement stmt=con.createStatement();
ps.setObject(1,2);//将sql1的第一个参数设为2,即id=2
3 执行SQL语句:
以上操作只是在Java程序中准备好了SQL语句,通过Statement实现类的执行方法来执行SQL语句,其执行方法有三个:
execute(sql):判断返回是否有结果集
executeQuery(sql):执行查询操作,并返回查询结果集ResultSet集合
executeUpdate(sql):执行DML语句,返回执行SQL语句后影响的数据库记录条数。
以上执行语句前两种较为常用。
4 查询结果集ResultSet
ResultSet是个Set集合,用于存储所有记录。其遍历方式为迭代器方法 ,通过get###方法获取一条记录的属性值。
代码例如:
ResultSet rs=ps.executeQuery();
while(rs.next()){
Object fieldValue1=rs.getObject(index或者属性名称);
Object fieldValue2=rs.getObject(1);//index为1开始
//查询的每条记录都将会用一个对应的Javabean对象存储
}
5 其它操作:
批处理:在进行SQL语句操作时,可能不止只执行一条语句,执行多条SQL语句则需用到批处理,对于大量的批处理语句,一般使用Statement类而不使用PreparedStatement类(预编译空间可能不够而使程序报错)。
在执行批处理之前需将提交SQL处理方法设为手动提交(先准备好语句,再提交执行嘛):
con.setAutoCommit(false);//将自动提交设为false
for(int i=1;i<5000;i++){
st.addBatch(sql+"values('Aloo"+i+"',"+"22,"+i+")");
}
st.executeBatch();//执行批处理
con.commit();//手动提交
最后注意:在操作完数据库后要关闭数据库相关连接:Connection,Statement实现类,ResultSet结果集。关闭原则:先开后关。
下次继续:事务及Clob和Blob的相关知识总结。