JDBC总结

一、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 block
		e1.printStackTrace();
	}
	rs = null;
}
if (pstmt != null) {
	try {
		pstmt.close();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	pstmt = null;
}
if (conn != null) {
	try {
		conn.close();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	conn = null;
}






你可能感兴趣的:(MySQL,Javaweb)