JDBC(java database connectivity)
数据库编程步骤:
1、根据应用程序所用的数据库,选择JDBC驱动程序类型
class.forName("com.mysql.jdbc.Driver");
2、连接到数据库,得到connection对象
Connection con=null;
con=DriverManager.getConnection("url","user","password");
3、通过connection创建Statement对象
Statement state=con.createStatement();
String sql="";
4、使用Statement对象提交sql语句
int row = state.executeUpdate(sql);
ResultSet rs=state.executeQuery(sql);
5、操作结果集
while(rs.next()){
int stuID=rs.getInt("pk_stuid");
}
6、回收数据资源
从小往大关,先关rs、然后state、然后con
url:统一资源定位符——样式:协议://ip地址:端口号/服务
SQL注入攻击
为了防止SQL注入攻击,可以使用PreparedStatement预编译SQL语句。
String sql="select * from t_user where f_username=? and f_pwd=?";
PreparedStatement ps = con.PreparedStatement(sql);
ps.setString(1,name);
ps.setString(2,pwd);
ResultSet rs=ps.executeQuery();
作用:1、可以完全替代statement执行dql语句
2、解决SQL注入问题
3、因为在执行之前就把sql语句绑定了(交给数据库预先编译了),执行时不能再改变sql语句的结构。
注意:1、?是用来替代语句中的数据值的位置,不能替代跟结构相关的任何对象
2、使用?代替字符串值的时候,不能打引号
3、不要滥用预编译,预编译语句过多,会影响数据库性能,当数据值是由外部文本输入的时候才用它。
事务:
复杂业务:由多条sql语句共同组成
事务:
整体性:同时完成、同时失败。
原子性:业务的不可拆分性。
Transcation:事务,sql里面保证多条sql语句的整体性和原子性的技术。
主要控制的是DML语句,需要保证数据的完整性。
事务的操作分为三步:
1、开启事务
2、事务整体提交
3、事务整体回滚
由一个connection对象完成,多条语句必须放到同一个连接中完成。
con.setAutoCommit(false);开启事务——设置自动提交为假
con.commit();整体提交
con.rollback();整体回滚(放到catch块中)只要一条sql语句失败,就要整体回滚。