您的位置:首页 > 数据库 > Oracle

Oracle-JDBC常用接口,PreparedStatement的使用,PreparedStatement防止SQL注入,JdbcUtil工具类,修改Eclipse编辑器的工作空间编码

2019-01-26 21:29 1011 查看

1.JDBC常用接口

PreparedStatement : 它是Statement接口的子接口,用来执行预编译的SQL语句,它是通过调用Connection对象的prepareStatement方法获取的
PreparedStatement prepareStatement(String sql)throws SQLException;
预编译的SQL:当调用Connection的prepareStatement方法就传入了sql语句,然后将SQL语句发送到服务器端进行编译,在未调用executeQuery()或executeUpdate()方法前就已经编译了。只编译一次,以后可以重复使用该sql,只需要改变sql中的参数就可以了

Statement对象是调用Connection的createStatement()方法获取的,在调用executeQuery()或executeUpdate()方法时才把SQL语句发送给服务器端进行编译,即每次执行SQL语句都要重新发送SQL,重新编译.
Connection对象的三个和事务相关的重要方法
1)setAutoCommit(boolean autoCommit) :设置事务的自动提交模式,默认事务是自动提交的,如果参数为false,表示关闭自动提交,由程序来控制事务何时提交。不调用该方法,事务都是自动提交的
2).commit(): 配合setAutoCommit(false)使用,当需要提交事务时,调用commit()手动提交事务
3).rollback():配合setAutoCommit(false)使用,当需要回滚事务时,调用rollback()手动回滚事务

2.PreparedStatement的使用

步骤如下:
1)创建PreparedStatement的实例
PreparedStatement实例要包含预编译的Sql语句,sql语句特点是为每个输入参数保留一个占位符?

String sql = "insert into dept values(?,?,?)";
PreparedStatement stmt = conn.prepareStatement(sql) ;

2)给SQL语句中的占位符?赋值
调用PreparedStatement对象的setXxx(int index, object value)来给?赋值.Xxx是输入参数的java类型,setXxx()的参数1是输入参数(?)的索引,从1开始,参数2是提供给输入参数的值
例如上面的sql中有3个输入参数(?),第1个?是部门号字段值,它的值是int类型,调用setInt(1, ‘开发部’ )

// 执行sql前要给每个?赋值
stmt.setInt(1, deptno);
stmt.setString(2, dname);
stmt.setString(3, loc);

3)调用executeQuery()或executeUpdate()执行Sql语句,不要再传入sql

int i = stmt.executeUpdate();

3.PreparedStatement防止SQL注入

SQL注入:在sql命令中注入非法的sql语句,从而实现恶意的登录等行为.例如下面的sql:

select *  from t_user where username='xx' and userpassword='bb'  or '1'='1'

上面注入了 or ‘1’='1’这样的非法sql,不管输入什么用户名和密码都能成功登录
使用PreparedStatement对象可以防止SQL注入

String sql = "select *  from t_user where username=? and userpassword=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, userpwd);
// System.out.println(sql);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
System.out.println("登录成功");
} else {
System.out.println("登录失败");
}

4.JdbcUtil工具类

封装了3个方法
1)获取连接 2) 关闭资源 3)通用的增删改executeUpdate()
调用executeUpdate(),只能传入增删改的语句,不能传查询语句

5.修改Eclipse编辑器的工作空间编码

都统一,别人用UTF-8编码的项目导入到你的Eclipse后,就不会有中文乱码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: