ImageVerifierCode 换一换
格式:DOCX , 页数:84 ,大小:236.55KB ,
资源ID:6322821      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6322821.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(传智播客李勇Jdbc视频笔记.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

传智播客李勇Jdbc视频笔记.docx

1、传智播客李勇Jdbc视频笔记1、jdbc的理论概述: JDBC(Java Data Base Connectivity,java数据库连接),由一些接口和类构成的API。 J2SE的一部分,由java.sql,javax.sql包组成 2、编写简单的jdbc的例子 3、分析jdbc程序的编写步骤和原理: 代码示例: Java代码 1. staticvoidtest()throwsSQLException,ClassNotFoundException 2. /1.注册驱动 3. DriverManager.registerDriver(newcom.mysql.jdbc.Driver(); 4.

2、 System.setProperty(jdbc.drivers,com.mysql.jdbc.Driver); 5. Class.forName(com.mysql.jdbc.Driver);/推荐方式 6. 7. /2.建立连接 8. Stringurl=jdbc:mysql:/localhost:3306/jdbc; 9. Stringuser=root; 10. Stringpassword=; 11. Connectionconn=DriverManager.getConnection(url,user,password); 12. 13. /3.创建语句 14. Statement

3、st=conn.createStatement(); 15. 16. /4.执行语句 17. ResultSetrs=st.executeQuery(select*fromuser); 18. 19. /5.处理结果 20. while(rs.next() 21. System.out.println(rs.getObject(1)+t+rs.getObject(2)+t22. +rs.getObject(3)+t+rs.getObject(4); 23. 24. 25. /6.释放资源 26. rs.close(); 27. st.close(); 28. conn.close(); 29.

4、 static void test() throws SQLException, ClassNotFoundException / 1.注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver(); System.setProperty(jdbc.drivers, com.mysql.jdbc.Driver); Class.forName(com.mysql.jdbc.Driver);/ 推荐方式 / 2.建立连接 String url = jdbc:mysql:/localhost:3306/jdbc; String user =

5、 root; String password = ; Connection conn = DriverManager.getConnection(url, user, password); / 3.创建语句 Statement st = conn.createStatement(); / 4.执行语句 ResultSet rs = st.executeQuery(select * from user); / 5.处理结果 while (rs.next() System.out.println(rs.getObject(1) + t + rs.getObject(2) + t + rs.getO

6、bject(3) + t + rs.getObject(4); / 6.释放资源 rs.close(); st.close(); conn.close(); 注册驱动的三种方式: Java代码 1. Class.forName(“com.mysql.jdbc.Driver”); 2. 推荐这种方式,不会对具体的驱动类产生依赖。 3. DriverManager.registerDriver(com.mysql.jdbc.Driver); 4. 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。 5. /可以注册多个驱动用冒号分隔 6. System.setPro

7、perty(“jdbc.drivers”,“driver1:driver2”); 7. 虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。Class.forName(“com.mysql.jdbc.Driver”); 推荐这种方式,不会对具体的驱动类产生依赖。 DriverManager.registerDriver(com.mysql.jdbc.Driver); 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。 /可以注册多个驱动用冒号分隔 System.setProperty(“jdbc.drivers”, “driver1:driver2”)

8、; 虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。4、jdbc代码的规范和封装: /封装成Jdbc工具类 Java代码 1. publicfinalclassJdbcUtils 2. privatestaticStringurl=jdbc:mysql:/localhost:3306/jdbc; 3. privatestaticStringuser=root; 4. privatestaticStringpassword=; 5. 6. privateJdbcUtils() 7. 8. 9. /用静态语句块来注册驱动,只注册一次。 10. static 11. try 12. C

9、lass.forName(com.mysql.jdbc.Driver); 13. catch(ClassNotFoundExceptione) 14. thrownewExceptionInInitializerError(e); 15. 16. 17. 18. /得到链接 19. publicstaticConnectiongetConnection()throwsSQLException 20. returnDriverManager.getConnection(url,user,password); 21. 22. 23. /释放链接 24. publicstaticvoidfree(R

10、esultSetrs,Statementst,Connectionconn) 25. try 26. if(rs!=null) 27. rs.close(); 28. catch(SQLExceptione) 29. e.printStackTrace(); 30. finally 31. try 32. if(st!=null) 33. st.close(); 34. catch(SQLExceptione) 35. e.printStackTrace(); 36. finally 37. if(conn!=null) 38. try 39. conn.close(); 40. catch(

11、SQLExceptione) 41. e.printStackTrace(); 42. 43. 44. 45. 46. 47. 48. /在main函数的调用封装 49. staticvoidtemplate()throwsException 50. Connectionconn=null; 51. Statementst=null; 52. ResultSetrs=null; 53. try 54. /2.建立连接 55. conn=JdbcUtils.getConnection(); 56. /conn=JdbcUtilsSing.getInstance().getConnection()

12、; 57. /3.创建语句 58. st=conn.createStatement(); 59. 60. /4.执行语句 61. rs=st.executeQuery(select*fromuser); 62. 63. /5.处理结果 64. while(rs.next() 65. /参数中的1,2,3,4是指sql中的列索引 66. System.out.println(rs.getObject(1)+t+rs.getObject(2) 67. +t+rs.getObject(3)+t+rs.getObject(4); 68. 69. finally 70. JdbcUtils.free(r

13、s,st,conn); 71. 72. 73. public final class JdbcUtils private static String url = jdbc:mysql:/localhost:3306/jdbc; private static String user = root; private static String password = ; private JdbcUtils() /用静态语句块来注册驱动,只注册一次。 static try Class.forName(com.mysql.jdbc.Driver); catch (ClassNotFoundExcepti

14、on e) throw new ExceptionInInitializerError(e); /得到链接 public static Connection getConnection() throws SQLException return DriverManager.getConnection(url, user, password); /释放链接 public static void free(ResultSet rs, Statement st, Connection conn) try if (rs != null) rs.close(); catch (SQLException e

15、) e.printStackTrace(); finally try if (st != null) st.close(); catch (SQLException e) e.printStackTrace(); finally if (conn != null) try conn.close(); catch (SQLException e) e.printStackTrace(); /在main函数的调用封装 static void template() throws Exception Connection conn = null; Statement st = null; Result

16、Set rs = null; try / 2.建立连接 conn = JdbcUtils.getConnection(); / conn = JdbcUtilsSing.getInstance().getConnection(); / 3.创建语句 st = conn.createStatement(); / 4.执行语句 rs = st.executeQuery(select * from user); / 5.处理结果 while (rs.next() / 参数中的1,2,3,4是指sql中的列索引 System.out.println(rs.getObject(1) + t + rs.g

17、etObject(2) + t + rs.getObject(3) + t + rs.getObject(4); finally JdbcUtils.free(rs, st, conn); 总结: 释放ResultSet, Statement,Connection. 数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致 系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放 5、采用单例的方式完成上面的JdbcUtils类:首先把上面类中的static方法都改成不是静态的,然后 对外提供一个获得对象的方法: Jav

18、a代码 1. /privatestaticJdbcUtilsSinginstance=newJdbcUtilsSing(); 2. privatestaticJdbcUtilsSinginstance=null; 3. 4. privateJdbcUtilsSing() 5. 6. 7. publicstaticJdbcUtilsSinggetInstance() 8. /延迟加载:等要调用我这个方法的时候才new一个对象,否则在static时候创建了一个对象, 9. /有可能会用不到。 10. if(instance=null) 11. /解决多线程访问的问题,把这个同步如果加到方法上,那么

19、我们每次的调用都会进行同步会影响性能如果我们按照下面的方法 12. /将同步缩小了范围之后只是会同步一次,下一次有对象了之后instance!=null同步方法就不会执行 13. /为什么要判断两次instance=null:假设有两个线程同时访问这个方法,同时判断到第一个instance=null,然后其中一个线程会 14. /先拿到锁,我们假设没有第二个判断,那么这个时候创建完对象之后,返回对象,而第二个线程有会创建一个实例但此时instance已经 15. /不是null了,所以我们要进行第二次的判断。 16. synchronized(JdbcUtilsSing.class) 17.

20、if(instance=null) 18. instance=newJdbcUtilsSing(); 19. 20. 21. 22. returninstance; 23. / private static JdbcUtilsSing instance = new JdbcUtilsSing(); private static JdbcUtilsSing instance = null; private JdbcUtilsSing() public static JdbcUtilsSing getInstance() /延迟加载:等要调用我这个方法的时候才new一个对象,否则在static时候

21、创建了一个对象, /有可能会用不到。 if (instance = null) /解决多线程访问的问题,把这个同步如果加到方法上,那么我们每次的调用都会进行同步 会影响性能 如果我们按照下面的方法 /将同步缩小了范围之后只是会同步一次,下一次有对象了之后instance != null 同步方法就不会执行 /为什么要判断两次instance = null:假设有两个线程同时访问这个方法,同时判断到第一个instance = null,然后其中一个线程会 /先拿到锁,我们假设没有第二个判断,那么这个时候创建完对象之后,返回对象,而第二个线程有会创建一个实例 但此时instance已经 /不是nu

22、ll了,所以我们要进行第二次的判断。 synchronized (JdbcUtilsSing.class) if (instance = null) instance = new JdbcUtilsSing(); return instance; 6、理解sql注入: /根据我传递的name名称来确定查询哪个字段。 Java代码 1. publicvoidread(Stringname) 2. . 3. Stringsql=select*fromxxxwherename=+name; 4. . 5. . 6. public void read(String name) . String sql

23、 = select * from xxx where name = + name ; . . 在上面这种情况下,如果我的name传值为 or 1 那 sql = select * from xxx where name = or 1 ; 因为or是数据库中的关键字,而在 数据库中1其实表示true ,所以会把所有的数据都会给查询上来。这叫做sql Injection(sql 注入) 7、PerparedStatement的应用: 在上面的例子中,我们看到了在构造sql语句的时候使用拼串的方式会有sql注入的问题,这个时候我们可以用 PreparedStatement 来解决这个问题 Java代码 1. publicvoidread(Stringname) 2. . 3. PreparedStatementps=null; 4. Stringsql=select*fromxxxwherename=?; 5. ps=conn.prepareStatement(sql); 6. ps.setString(1,name); 7. rs=ps.executeQuery(); 8. .

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2