1、什么是JDBC?
JDBC是一类接口,制定了统一访问各类关系型数据库的api,屏蔽了底层数据库的差异,可以通过JDBC API 方便地实现对各种主流数据库的操作。
2、开发步骤?
访问数据库时,首先要注册和加载数据库驱动,只需加载一次,然后在每次访问数据库时创建一个Connection实例,获取数据库连接,获取连接后,执行需要的SQL语句,最后完成数据库操作时释放与数据库间的连接。
第一步:注册加载数据库驱动
此步骤的目的是告知JVM使用的是哪一个数据库的驱动。Java加载数据库驱动的方法是调用Class类的静态方法forName(),语法格式如下:
Class.forName("com.mysql.jdbc.Driver");
第二步:获得数据库连接
加载完数据库驱动后,就可以建立数据库的连接了,需要使用DriverManager类的静态方法getConnection()方法来实现。代码如下:
1 2 3 4 5 6 | Class.forName( "com.mysql.jdbc.Driver" ); String url = "jdbc:mysql://localhost:3306/database_name" ; String user = "root" ; Strign password = "root" //建立连接 Connection conn = DriverManager.getConnection(url, user, password); |
第三步:获得语句执行对象,然后执行SQL语句,获取执行结果,最后释放资源
建立了连接之后,就可以使用Connection接口的createStatement()方法来获取Statement对象,也可以调用prepareStatement()方法获得PrepareStatement对象,通过executeUpdate()方法来执行SQL语句。
1 2 3 4 | String sql = "insert into user(username, sex, address) values('张三','1','北京市')" ; Statement stmt = conn.createStatement(); //创建一个Statement对象 stms.executeUpdate(sql); //执行SQL语句 conn.close(); |
还可以使用PreparedStatement接口中的executeUpdate()方法,如下:
1 2 3 4 5 6 7 | String sql = "insert into user(username, sex, address) values(?,?,?)" ; PreparedStatement ps = conn.preparedStatement(sql); ps.setString( 1 , "张三" ); //为第一个问号赋值 ps.setInt( 2 , 1 ); //为第二个问号赋值 ps.setString( 3 , "北京市" ); //为第三个问号赋值 ps.executeUpdate(); conn.close(); |
3、PreparedStatement与Statement区别
1.PreparedStatement在使用时只需要编译一次,就可以运行多次,Statement每运行一次就编译一次,所以PreparedStatement的效率更高
2.PreparedStatement的sql语句为用?(占位符)来替换值,Statement的sql语句为字符串拼接
3.PreparedStatement解决了sql注入的问题,Statement没有解决,因为PreparedStatement有一个预编译的过程,就算传入占位符的数据中有sql关键字也都被认为是值。Statement是字符串拼接,传入的整个字符串被默认为sql语句
SQL注入攻击:
举一个简单的例子,假设有一个登录页面,用户需要输入用户名和密码,后台使用 JDBC 执行如下 SQL 语句来验证登录:
SELECT * FROM user WHERE username='xxx' AND password='yyy';
假如攻击者在用户名处输入如下内容:
xxx' OR 1=1; --
那么最终执行的 SQL 语句就会变成:
SELECT * FROM user WHERE username='xxx' OR 1=1; --' AND password='yyy';
其中 --
表示注释掉后面的语句,此时 SQL 语句等价于:
SELECT * FROM user WHERE username='xxx' OR 1=1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY