JDBC:Java Database Connectivity 是SUN公司提供的一套操作数据库的标准规范。
JDBC与数据库驱动的关系:接口与实现的关系。
四个核心对象:
1.DriverManager:用于数据库驱动的注册
2.Connection:表示与数据库创建的连接
3.Statement:操作数据库SQL语句的对象
4.ResultSet:查询语句返回的结果集(相当于一张虚拟表)
方式一:
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");
//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();
特点:
1.性能要高
2.会把sql语句先编译
3.sql语句中的参数会发生变化,过滤掉用户输入的关键字。
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user WHERE name=? AND password=?");
// 给?赋值
pstmt.setString(1, "zs");
pstmt.setString(2, "123456");
ResultSet rs = pstmt.executeQuery("SELECT * FROM user");
while (rs.next()) {
System.out.println(rs.getString("name"));
System.out.println(rs.getString("password"));
}
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;
}