jdbc连接Mysql数据库详解
-
jdbc连接mysql数据库过程
- 注册驱动(3种注册驱动方式)
- DriverManager.registerDriver(new com.mysql.jdbc.Driver());
- System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);
-
Class.forName(“com.mysql.jdbc.Driver”);
注:第三种实现比前二种实现好
- 建立连接:
- Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/数据库名”,”用户名”,”密码”);
- 创建语句
- Statement st=conn.createStatement();
- 执行语句
- ResultSet rs=st.executeQuery(sql)
- 处理结果
- While(rs.next){}
- 释放资源
- rs.close();
- st.close();
- conn.close();
- 注册驱动(3种注册驱动方式)
-
问题
- 灵活度不够
- 提出来作为变量传入
- 由于注册驱动每个程序中只需要创建一次
- 所以可以把其封装到一个单例类中或者使用final类并使驱动注册改为静态代码块
- 资源释放会出现BUG,出现异常就可能无法释放掉资源。
- try{}finally{}包裹
-
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(sql);sql中无法使用?来代替,传递进来的变量,使用变量时还要解决sql注入的问题- 使用PreparedStatement ps=conn.prepareStatement(sql)来代替
- 灵活度不够
-
修改后的写法
1.JdbcUtilsSing.java(单例类来获取这个封装类)
2.Base.java
关键点:第三步和第四步
无法用?代替的写法:
String sql=”select * from 表名 where id=”+id+””;
Statement st=conn.createStatement();
ResultSet rs=st.executeQuery(sql);
可以用?代替的写法:
String sql=”select * from 表名 where id=?”;
PreparedStatement ps=conn.prepareStatement(sql)
ResultSet rs=st.executeQuery();
ps.set类型(第几个?位置,变量名);
ResultSet rs=st.executeQuery();
区别:Statement执行查询调用方法executeQuery(sql)
执行更删改调用方法executeUpdate(sql)
PreparedStatement执行查询调用方法executeQuery()
执行更删改调动方法executeUpdate()
版权声明:本博客为记录本人自学感悟,内容大多从网上学习与整理所得,若侵权请告知!
https://mp.****.net/postedit/80365677