目录:
简介 常用组件 DriverManager Driver Connection Statement CallableStatment PreparedStatmenet ResultSet ResultSetMetaData SQLException
简介
JDBC是Java提供给用户来处理数据库业务的API。
jdbc是一种规范,他提供了一套接口,允许以一种可移植的方式访问数据库底层。只能操作关系型数据库。
常用组件
用来管理数据库驱动,可以在项目加载的驱动列表中读取最近的一条驱动程序(可以在项目中多次去使用 Class.forName来驱动,如果Class.forName加载的是同一个驱动,DriverManager会使用最后一次加载的驱动)
Class.forName 只需要执行一次就可以。
所以可以用Java中静态代码块的特性来加载驱动。
static{
Class.forName("com.mysql.cj.jdbc.Driver");
}
以下加载驱动方式不推荐:
Class clazz = Class.forName("");
常用方法:(第一行为返回值)
是由第三方数据库厂商提供,一般直接由DriverManager管理,每个驱动程序类必须实现的接口。
用于获取java和数据库会话的连接信息。
与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。 Connection对象的数据库能够提供数据表所支持的 SQL 语法、存储过程、此连接功能等等的信息。
方法:
用于执行静态 SQL 语句并返回它所生成结果的对象。
注意:SQL语句只能为静态SQL语句,包含java中字符串拼接都属于静态SQL
方法:
静态SQL语句存在SQL注入漏洞,可利用字符串拼接来影响登录的密码正确性判断。
如:(以下SQL代码中用户名随意都可以通过没密码验证,成功登录)
String upwd="'or'a'='a";//利用sql静态注入漏洞
String sql="select * from t_user where username='"+user+"'and pwd='"+upwd+"'";
解决上面静态SQL语句注入漏洞。
用于执行存储过程,{call 存储过程名称 (?,?)},参数必须使用占位符,因为对于有返回值的存储过程我们需要通过占位符来注册返回值。
完整代码实例:
表示预编译的 SQL 语句的对象。动态SQL,在静态SQL的基础上增加?作为占位符,占位符的复制,包含了数据类型,如果是String类型的,会自动拼接单引号。
方法:
表示数据库查询结果集的数据表(二维表)。既保持了查询结果的各行的数据,同时还保持了查询结构的表结构(每列的列名和列的类型)
ResultSet对象具有指向其当前数据行的光标。
最初,光标被置于第一行之前,next方法将光标移动到下一行;
因为该方法在 ResultSet 对象没有下一行时返回 false ,
所以可以在while循环中使用它来迭代结果集。
可以在while循环中的rs为当前行的数据。
常常被用在用户登陆或者注册时,查找数据库中是否有该数据。
Boolean b=false;
while(rs.next()) {
b=true;//查询数据库中是否有这个元素
}
方法:
可用于获取关于 ResultSet 对象中列的类型和属性信息的对象。
方法:
提供关于数据库访问错误或其他错误信息的异常。
常常在编写关于处理数据库语句是时抛出异常。