一、JDBC的本质
JDBC是java用来操作所有关系型数据库的一套规范,也就是接口,Java中定义了接口,各个数据库软件提供各种的实现类jar包,我们创建接口对象,调用接口中的方法,实际上是调用了实现类中实现的方法,这也是Java多态的一种体现。
程序有很很强的扩展性,假若有新的数据库厂商想要使用java控制数据库,那么他们也只需要实现接口即可,高耦合性!
二、使用Statement类的对象作为执行对象会遇到的问题:SQL注入
所以要使用PreparedStatement来防止SQL注入问题,使用方法:
使用setXxx(index,value)方法来替换sql中的?通配符:
第一个放序号,从1开始,第二个放值。
String sql = "SELECT uname,pwd FROM USER WHERE uname = ? AND pwd =?";
PreparedStatement psttm = conn.prepareStatement(sql);
psttm.setString(1,uname);
psttm.setString(2,password);
三、JDBC事务的控制:
开启事务:conn.setAutoCommit(false);执行SQL之前
提交事务:conn.commit();SQL执行完成之后
回滚事务:conn.rollback();catch语句中回滚
四、封装的JDBC工具类:(注册驱动,创建连接对象,释放资源)
package cn.rin.utils;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driver = null;
static {
try {
Properties prop = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); //读取配置文件
prop.load(is);
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
driver = prop.getProperty("driver");
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取连接对象
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
/**
* 关闭资源
* @param conn
* @param sttm
* @param rs
*/
public static void close(Connection conn, Statement sttm,ResultSet rs){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (sttm != null ){
try {
sttm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(Connection conn, Statement sttm){
if (sttm != null ){
try {
sttm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}