jdbc :java 数据库连接 ,用java语言操作数据的唯一技术,由于jdbc只是一组接口,具体的实现 是由数据库各个厂商来实现的,数据库厂商不可能丢下java这块肥肉,所以我们需要操作某一款数据库,需要导入各个数据库厂商具体的实现
jdbc连接oracle数据库的驱动类和url
oracle
driverClass:oracle.jdbc.driver.OracleDriver
url:jdbc:oracle:thin:@127.0.0.1:1521:dbname
jdbc连接mysql数据库的驱动类和url
mysql
driverClass:com.mysql.jdbc.Driver
url:jdbc:mysql://localhost:3306/mydb
jdbc中的核心类:DriverManager、Connection、Statement,和ResultSet!
DriverManger(驱动管理器)的作用有两个:
l 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
l 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:
l Connection最为重要的一个方法就是用来获取Statement对象;
l Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句
l void executeUpdate(String sql):执行更新操作(insert、update、delete等);
l ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;
ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:
l boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;
l XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。
Statement 和 PreparedStatement之间的关系和区别.
关系:PreparedStatement继承自Statement,都是接口
区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高 , SQL 语句被预编译并存储PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。Statement用于执行静态 SQL 语句并返回它所生成结果的对象。从数据库安全的角度:PreparedStatement可防止SQL注入
SQL注入情况如下所示:
假如数据库的记录如下:
我们通过playName去查询指定的人
String nameRight = “Lebron James”; //模拟用户输入正确的名称
sql:SELECT * FROM tb_player where playName=‘Lebron James’
1条记录
sql:com.mysql.jdbc.JDBC4PreparedStatement@2ef1e4fa: SELECT * FROM tb_player where playName= ‘Lebron James’
1条记录
String fakeName = "Lebron Jamesxxx’ or '1 = 1 "; //模拟用户输入错误的名称
sql:SELECT * FROM tb_player where playName=‘Lebron Jamesxxx’ or '1 = 1 ’ //会有 3条记录
sql:com.mysql.jdbc.JDBC4PreparedStatement@5ce65a89: SELECT * FROM tb_player where playName= ‘Lebron Jamesxxx’ or '1 = 1 ’ //会有0条记录
总之口水话理解下 预编译就是提前把语法结构给固定了 ,及时你传的参数你面有数据库能识别的关键字它也不会再当成关键字处理了