JDBC总结

来源:互联网 发布:仓库数据流程图 编辑:程序博客网 时间:2024/06/08 00:16

一、JDBC概述:

JDBC:Java Database Connectivity  是SUN公司提供的一套操作数据库的标准规范。

JDBC与数据库驱动的关系:接口与实现的关系。

二、JDBC规范

四个核心对象:

1.DriverManager:用于数据库驱动的注册

2.Connection:表示与数据库创建的连接

3.Statement:操作数据库SQL语句的对象

4.ResultSet:查询语句返回的结果集(相当于一张虚拟表)

三、四个核心对象的具体使用

3.1、DriverManager:驱动注册

方式一:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

方式一不推荐使用:查看源码可知:Driver类其实内部已经做了一次驱动注册,此种方法导致驱动被注册2次。而且强烈依赖数据库的驱动jar

源码:

public class Driver extends NonRegisteringDriver implements java.sql.Driver {     static {        try {            java.sql.DriverManager.registerDriver(new Driver());        } catch (SQLException E) {            throw new RuntimeException("Can't register driver!");        }    }}
方式二:推荐使用

Class.forName("com.mysql.jdbc.Driver");

3.2、Connection:建立连接

方式一:

//getConnection(String url, String user, String password) Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","123456");

方式二:

//getConnection(String url, Properties info)Properties info = new Properties();//因为put()方法传的参数类型是Object,而MySQL中要的是String类型,所以这里用setProperty()info.setProperty("user", "root");info.setProperty("password", "123456");Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1", info);


方式三:

//getConnection(String url)Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1?user=root&password=123456");

3.3、Statement与PreparedStatement:

使用Statement:

这种方法有SQL注入的危险

Statement stmt = conn.createStatement();

使用PreparedStatement:预编译对象, 是Statement对象的子类。

特点:

1.性能要高

2.会把sql语句先编译

3.sql语句中的参数会发生变化,过滤掉用户输入的关键字。


PreparedStatement  pstmt = conn.prepareStatement("SELECT * FROM user WHERE name=? AND password=?");// 给?赋值pstmt.setString(1, "zs");pstmt.setString(2, "123456");

3.4、ResultSet:

ResultSet  rs = pstmt.executeQuery("SELECT * FROM user");while (rs.next()) {System.out.println(rs.getString("name"));System.out.println(rs.getString("password"));}

ResultSet可以使用索引取值,也可以使用字段名来取值,具体方法依情况使用。


四、使用完毕后记得释放资源

if (rs != null) {try {rs.close();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}rs = null;}
if (pstmt != null) {try {pstmt.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}pstmt = null;}
if (conn != null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}conn = null;}