java-JDBC
2021/4/7 22:08:24
本文主要是介绍java-JDBC,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1)JDBC是什么
Java DataBase Connectivity(Java语言连接数据库)
2)JDBC的本质是什么
JDBC的本质是一套接口。(有利于降低耦合度)
思考:为什么SUN制定一套JDBC接口?
因为每一个数据库的底层实现原理不一样。
因此每个数据库厂家都实现了JDBC接口。
3)JDBC编程六步(重点)
第一步:注册驱动 (作用:告诉java程序,即将要连接的是那个品牌的数据库)
第二步:获取连接 (表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,使用完后一定要关闭通道)
第三步:获取数据库操作对象 (专门执行sql语句的对象)
第四步:执行sql语句(DQL、DML…)
第五步:处理结果集(只有当第四步执行的是select语句时,才有这第五步处理查询结果集)
第六步:释放资源(使用完资源后一定要关闭资源)
4)注册驱动的实现
1、Java.sql包下有一个接口Driver
public interface Driver 每个驱动程序类必须实现的接口 每个数据库厂商都有不同的实现类
2、Java.sql包下有一个类DriverManager
java.sql.DriverManager DriverManager类会在尝试加载在“jdbc.drivers”系统属性中引用的驱动程序类
DriverManager类的静态方法
public static void registerDriver(Driver driver) 向DriverManager注册相关的驱动程序。(新加载的驱动类应该调用registerDriver方法) 让DriverManager知道是那个数据库
注册驱动的第一种方法
使用DriverManager加载MySQL驱动程序
//创建Driver接口实例对象 Driver driver=new com.mysql.jdbc.Driver();//多态,父类引用指向子类对象 //使用DriverManager类加载Driver接口的实例对象(注册mysql驱动) DriverManager.registerDriver(driver)
第二种方法
Class.forName("com.mysql.cj.jdbc.Driver);
mysql实现Driver接口代码
public class Driver extends NonRegisteringDriver implements java.sql.Driver { public Driver() throws SQLException { } static { try { DriverManager.registerDriver(new Driver()); } catch (SQLException var1) { throw new RuntimeException("Can't register driver!"); } } }
发现源码中DriverManager.registerDriver(new Driver());代码写在静态代码块中
因此,我们可以通过类加载来实现注册驱动。(类加载时,静态代码块会执行)
5)Java代码实现Jdbc编程六步
public static void main(String[] args) { Connection conn=null; Statement stat=null; ResultSet rs=null; try { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接 String url="jdbc:mysql://localhost:3306/unipue?serverTimezone=UTC"; String user="root"; String password="123"; conn= DriverManager.getConnection(url,user,password); //获取数据操作对象 stat=conn.createStatement(); //执行sql语句 String ln="zhangsan"; String sql="select *from t_user where loginName='"+ln+"'"; rs=stat.executeQuery(sql);//返回结果集 //处理结果集 while(rs.next()){ String loginName=rs.getString("loginName"); String loginPassword=rs.getString("loginPassword"); System.out.println("用户名:"+loginName+",密码:"+loginPassword); } } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 if(rs!=null){ try { rs.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(stat!=null){ try { stat.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
不过上面这种方式会有sql注入问题
6)Statement和PreparedStatement的区别
- Statement存在sql注入问题,PreparedStatement解决了sql注入问题
- Statement是编译一次执行一次,PreparedStatement是编译一次,可执行N次。PreparedStatement执行效率较高
- PreparedStatement会在编译阶段做类型的安全检查。(预编译)
public static void main(String[] args) { Connection conn=null; PreparedStatement ps=null; try { //1.注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接 String url="jdbc:mysql://localhost:3306/unipue?serverTimezone=UTC"; String user="root"; String password="123"; conn= DriverManager.getConnection(url,user,password); //?是占位符 String sql="update t_user set loginPassword=? where loginName=? and loginPassword=?"; //获取数据库预编译对象 ps=conn.prepareStatement(sql); //给占位符(?)赋值,占位符下标从1开始 ps.setString(1,"159357"); ps.setString(2,"zhangsan"); ps.setString(3,"123"); //执行sql语句 //返回一共处理多少条数据 int sum=ps.executeUpdate(); } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 if(ps!=null){ try { ps.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } }
7)什么情况使用Statement?
当业务方面必须支持SQL注入的时候。
凡是业务方面要求需要进行sql语句拼接的,都要使用Statement。
比如:对某个字段进行升序/降序排序。(价格等)
这篇关于java-JDBC的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南