目录
1.JDBC中的核心API
java.sql.DriverManager
类:数据库驱动的管理类,管理数据库的驱动程序。
java.sql.Connection
接口:表示数据库的连接对象,负责和数据库取得连接。
java.sql.Statment
接口:执行SQL语句的对象,将Java中的SQL语句传递给数据库,让数据库执行SQL语句。
java.sql.ResultSet
接口:表示数据表的查询结构集对象,执行的SQL语句是select,ResultSet就是我们查询的结果强调问题:以上接口的实现类,都是由数据库驱动实现。接口调用这些实现类的方法重写!
2.JDBC工具类使用
1.优化为读取配置文件
//com.mysql.cj.jdbc.Driver 最新的 8.0 //com.mysql.jdbc.Driver 5.0版本 jdbc.driverClassName=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/school jdbc.username=root jdbc.password=333 使用properties作为配置文件使用,存储的就是数据库连接的四大信息,是Key=Value形式。 配置文件必须放在src下面
2.JDBC工具类
public class DBCUtil { static String driver; static String url; static String username; static String password; static { //Properties extends Hashtable<Object,Object> Properties p = new Properties(); InputStream in = DBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"); try { //--2.2加载配置文件 p.load(in); driver = p.getProperty("jdbc.driverClassName"); url = p.getProperty("jdbc.url"); username = p.getProperty("jdbc.username"); password = p.getProperty("jdbc.password"); Class.forName(driver); //inStream.close(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } //连接 public static Connection getConnection() throws SQLException { Connection connection = DriverManager.getConnection(url, username, password); return connection; } //关闭 public static void close(ResultSet resultSet, Connection connection, Statement statement) throws SQLException { if (resultSet != null) { resultSet.close(); } if (connection != null) { connection.close(); } if (statement != null) { statement.close(); } } }
3.SQL注入攻击
java.sql.PreparedStatement接口:继承Statement接口,也是一个执行SQL语句的象。
Prepared Statement接口特性:
将SQL语句预编译并存储,可以反复的高效的执行。
高效执行:必须是同一个查询语句才高效
执行SQL语句,可以有效的防止SQL语句的注入
public void queryUserInfoByNameAndPwd(String name, String password) throws SQLException { Connection connection = JDBCUtils01.getConnection(); //?号是占位符 String sql = "select * from userinfo where username=? and password=?;"; PreparedStatement preparedStatement = connection.prepareStatement(sql); // 索引从1开始 preparedStatement.setObject(1, name); preparedStatement.setObject(2, password); //执行 ResultSet resultSet = preparedStatement.executeQuery(); List<UserInfo> list = new ArrayList<>(); while (resultSet.next()) { UserInfo userInfo = new UserInfo(); userInfo.setId(resultSet.getInt("id")); userInfo.setUsername(resultSet.getString("username")); userInfo.setPassword(resultSet.getString("password")); list.add(userInfo); } JDBCUtils01.close(resultSet,preparedStatement,connection); }
4.JDBC涉及的知识
1.Properties类的用法总结
Properties类的用法总结_源码复兴号的博客-CSDN博客
2.类加载器