JDBC复习1
1.什么是JDBC
JDBC是java数据库连接技术的简称(Java DataBase Connectivity)
jdbc是接口,jdbc驱动才是接口的实现,负责连接各种不同的数据库。jdbc的API由Sun公司提供,要遵循其规范
PS:驱动就是比如你买个鼠标,并不能直接用,需要插入电脑并安装驱动程序才可以使用。这里你有个JDBC,但是你得有jdbc驱动才可以和数据库建立连接
2.组成JDBC的类和接口
java.sql
类:DrivaerManager --------由sun公司提供,载入不同的jdbc驱动(由数据库厂商提供)
接口:
Connection(连接数据库)
Statement和PreparedStatement:执行sql语句。要搞清楚两者的用法和区别
ResultSet:
javax.sql
接口:DataSource
3.关于Statement和PreparedStatement的区别与使用
1. 二者都是执行sql语句的载体,PreparedStatement是Statement的一个子接口。使用PreparedStatement可以防止SQL攻击,提高可读性和效率,建议使用
2.Statement执行sql语句提供了以下常用方法:executUpdate(可执行sql中的增删改,还可以用于判断是否数据库更新成功),executeQuery(执行sql语句的查询语句)
3.关于PreparedStatement的使用
1 string sql = "select * from people p where p.id = ? and p.name = ?"; //1.编写sql语句,"?"代表占位符,参数 2 preparedstatement ps = connection.prepareStatement(sql); //2.获取执行sql语句的载体 3 ps.setint(1,id); //3.设置占位符,提供了setInt,setString,setDouble等 4 ps.setstring(2,name); 5 ResultSet rs = ps.executequery();
4.关于statement的使用
1 Statement stmt = connection.createStatement(); //获取Statement 2 string sql = "select * from people p where p.id = 1 and p.name = '张三' "; 3 ResultSet rs = stmt.executeQuery(sql);
5.看了不少资料说了很多,都是建议有一点开发水平的程序员都使用PreparedStatement。
好处有很多,有jdbc模板,方便维护,防止sql注入攻击,预编译处理等等,至于其中的原因,会在后面转载几篇大佬的文章来学习学习
4.关于结果集ResultSet
1 ResultSet.next(); // 将游标由当前位置移动到下一行
2 ResultSet.getString(String columnName); // 获取指定字段的String类型值
3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值
4 ResuleSet.previous(); // 将游标由当前位置移动到上一行
/*
*参数columnIndex表示列的索引,列索引从1开始,而不是0,
*这第一点与数组不同。如果你清楚当前列的数据类型,那么可以使用getInt()之类的方法来获取
*如果你不清楚列的类型,那么你应该使用getObject()方法来获取。
*/
5. 把数据库连接关闭这种重复度很高的代码抽取出来(三种方式)
第一种方式(我用的最多)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * 提供获取连接和释放资源的方法 */ public class JDBCUtils_V1 { /** * 获取连接方法 */ public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08", "root", "root"); } catch (Exception e) { e.printStackTrace(); } return conn; } /* *释放资源 */ public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
第二种方式--通过读取配置文件
在src目录下新建一个db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf8 username=root password=123456
package cn.itheima.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ResourceBundle; /** * 提供获取连接和释放资源的 方法 */ public class JDBCUtils_V2 { private static String driver; private static String url; private static String username; private static String password; /** * 静态代码块加载配置文件信息 */ static{ ResourceBundle bundle = ResourceBundle.getBundle("db"); driver = bundle.getString("driver"); url = bundle.getString("url"); username = bundle.getString("username"); password = bundle.getString("password"); } /** * 获取连接方法 */ public static Connection getConnection() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
第三种方式--也是通过读取配置文件
package cn.itheima.jdbc; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import java.util.ResourceBundle; /** * 提供获取连接和释放资源的 方法*/ public class JDBCUtils_V3 { private static String driver; private static String url; private static String username; private static String password; /** * 静态代码块加载配置文件信息 */ static { try { // 1.通过当前类获取类加载器 ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader(); // 2.通过类加载器的方法获得一个输入流 InputStream is = classLoader.getResourceAsStream("db.properties"); // 3.创建一个properties对象 Properties props = new Properties(); // 4.加载输入流 props.load(is); // 5.获取相关参数的值 driver = props.getProperty("driver"); url = props.getProperty("url"); username = props.getProperty("username"); password = props.getProperty("password"); } catch (IOException e) { e.printStackTrace(); } } /** * 获取连接方法 */ public static Connection getConnection() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步