JDBCUtils
public class JDBCUtils {
/**
* 工具类的构造方法一般写成私有
*/
private JDBCUtils(){}
//静态代码块再类加载的时候执行,且执行一次
static{
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
*
* @return 连接对象
* @throws SQLException
* 注意这里异常要抛出去,使用工具类的地方捕获异常
*/
public static Connection getConnection() throws SQLException {
String url = "jdbc:mysql://localhost:3306/mmm?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false";
String username = "root";
String password = "123456";
return DriverManager.getConnection(url,username,password);
}
/**
*
* @param conn
* @param st
* @param rs
* 注意这里Statement是prepareStatement的父接口使用可以直接这样写
*/
public static void close(Connection conn, Statement st, ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(st != null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
防止sql注入攻击的方式
public class jdbc {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
String sql = "select username,password from wy where username like ?";
ps = conn.prepareStatement(sql);
ps.setString(1,"22%");
rs = ps.executeQuery();
while(rs.next()){
System.out.println(rs.getString("username"));
System.out.println(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(conn,ps,rs);
}
}
}
不防止sql注入攻击的方式
public class jdbc {
public static void main(String[] args) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
String sql = "select * from dept";
st = conn.createStatement();
rs = st.executeQuery(sql);
while(rs.next()){
int deptno = rs.getInt("deptno");
String dename = rs.getString("dname");
String loc = rs.getString("loc");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(conn,st,rs);
}
}
}
JDBC实现的6步
第一步:注册驱动(告诉java程序要连接哪个品牌的数据库)
第二步:获取连接(表示JVM进程和数据库进程之间的通道打开了,进程之间的重量级通信,使用之后要关闭通道)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行sql语句(DDL、DQL…)
第五步:处理查询结果集(只有当第四步执行的是select的语句的时候才有第五步)
第六步:释放资源(使用完资源之后要关闭资源,Java和数据库之间属于进程之间的通信,使用之后要关闭)