第15篇-JAVA JDBC编程
第15篇-JAVA JDBC编程
- 每篇一句 :对于勇敢者,尝试是一条崭新的生活之路
- 初学心得: 但对于坎坷与泥泞,能以平常之心视之,就非常不容易
- (笔者:JEEP/711)[JAVA笔记 | 时间:2017-05-08| JAVA JDBC编程 ]
1.JDBC概述
- 通过使用JDBC API,Java程序可以非常方便地操作各种主流数据库,这是是Java语言的巨大魅力所在
- 由于Java语言的跨平台特性,所以使用JDBC API所编写的程序不仅可以实现跨数据库,还可以跨平台,具有非常优秀的可移植性
- 程序使用JDBC API以统一的方式来连接不同的数据库,然后通过Statement对象来执行标准SQL语句,并可以获得SQL语句访问数据库的结果
2.JDBC驱动程序类型
- 1.JDBC驱动:称为JDBC–ODBC桥,这种驱动是最早实现的JDBC驱动程序,主要目的是为了快速推广JDBC。这种驱动程序将JDBC API映射到ODBC API。JDBC-ODBC也需要驱动,这种驱动由Sun公司提供实现
- 2.JDBC驱动:直接将JDBC API映射成数据库特定的客户端API。这种驱动程序包含特定数据库的本地代码,用于访问特定数据库的客户端
- 3.JDBC驱动:支持三层结构的JDBC访问方式。主要用于Applet阶段,通过Applet访问数据库
- 4.JDBC驱动:是纯Java的,直接与数据库实例交互。这种驱动是智能的,它知道数据库使用的底层协议,这种驱动是目前最流行的JDBC驱动
3.安装MySQL数据库
- (1)下载MySQL安装文件
- (2)开始安装MySQL后,在出现的对话框中单击“Next”按钮
- (3)单击对话框的“Next”按钮,将出现选择安装组件和安装路径的对话框。
- (4)单击对话框中的“Next”按钮,将可开始安装MySQL数据库系统,安装成功后,系统还要求配置MySQL数据库
- (5)配置数据库时注意选择合适的字符集,并设置密码
4.MySQL的常见命令
1.- 查询数据库:show databases; 2.- 删除数据库:drop database 数据库名; 3.- 进入数据库:use 数据库名 4.- 显示创建库名的所有数据:show tables; 5.- 输出表名:desc 表名 6.SQL语句四大部分 7.- 数据定义语言(DDL):drop、create、alter 8.- 数据操作语言(DML):insert、update、delete 9.- 数据查询语言(DQL):select、from、where、group by 10.- 数据控制语言(DCL):grant、revoke、commit、rollback
5.JDBC常用接口和类
- DriverManager
- Connection
- Statement
- PreparedStatement
- ResultSet
6.JDBC编程步骤
- (1)加载数据库驱动
- (2)通过DriverManager获取数据库连接
- (3)通过Connection对象创建Statement对象
- (4)使用Statement执行SQL语句。所有Statement都有如下三个方法来执行SQL语句
- (5)操作结果集。如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果
7.JDBC执行SQL语句的方式
- 使用executeUpdate执行DDL和DML语句
- 使用execute方法执行SQL语句
- 使用executeQuery方法执行查询语句
8.数据库连接池
数据库连接池的解决方案是:当应用程序启动时,系统主动建立足够的数据库连接,并将这些连接组成一个连接池
每次应用程序请求数据库连接时,无需重新打开连接,而是从池中取出已有的连接使用,使用完后,不再关闭数据库连接,而是直接将该连接归还给连接池。通过使用连接池,将大大提高程序运行效率数据库连接池的常用参数有如下:
- 数据库的初始连接数
- 连接池的最大连接数
- 连接池的最小连接数
- 连接池的每次增加的容量
9.两种开源数据源
- DBCP:是Apache软件基金组织下的开源连接池实现,该连接池依赖该组织下的另一个开源系统:common-pool
- C3P0:数据源性能更胜一筹,Hibernate就推荐使用该连接池
C3P0连接池不仅可自动清理不再使用的Connection,还可以自动清理Statement和ResultSet
10.JDBC连接驱动实例
1.package cn.jdbc; 2.import java.sql.Connection; 3.import java.sql.DriverManager; 4.import java.sql.SQLException; 5./** 6. * 创建初始化并获取 7. */ 8.public class MyJdBc { 9. private static Connection cot = null;//声明 10. //静态代码块 11. static{ 12. try { 13. Class.forName("com.mysql.jdbc.Driver"); 14. //数据库名称,用户名,密码 15. cot = DriverManager.getConnection("jdbc:mysql://localhost:3306/sqltestdb","root","root"); 16. if(!cot.isClosed()){ 17. System.out.println("数据连接成功"); 18. } 19. } catch (ClassNotFoundException e) { 20. e.printStackTrace(); 21. }catch(SQLException e){ 22. e.printStackTrace(); 23. } 24. } 25. public static Connection getInstace(){ 26. return cot;//返回对象 27. } 28.}
1.package cn.jdbc; 2.import java.sql.Connection; 3.import java.sql.ResultSet; 4.import java.sql.SQLException; 5.import java.sql.Statement; 6.import java.text.DateFormat; 7.import java.text.ParseException; 8.import java.text.SimpleDateFormat; 9.import java.util.Date; 10.import com.mysql.jdbc.PreparedStatement; 11./** 12. * JAVA连接JDBC驱动器 13. * @author JEEP-711 14. * 15. */ 16.public class JdBc { 17. @SuppressWarnings("unused") 18. public static void main(String[] args) throws SQLException, ParseException { 19. Connection cot = MyJdBc.getInstace();//连接 20. Statement st = cot.createStatement();//创建Statement类对象,来执行SQL语句 21. String sql = "select * from emp";//要执行的SQL语句 22. ResultSet rs = st.executeQuery(sql);//ResultSet类,用来存放获取结果集 23. System.out.println("-----------------------------------------------"); 24. System.out.println("------------------执行结果如下所示------------------"); 25. System.out.println("-----------------------------------------------"); 26. System.out.println("ID"+"\t"+"姓名"+"\t"+"职称"+"\t"+"\t时期"+"\t"+"资金"); 27. System.out.println("-----------------------------------------------"); 28. /** 29. * 查询 30. */ 31. String job = null;//职位 32. String names = null;//姓名 33. String empon = null;//id号 34. String hiredate = null;//时期 35. String sal = null;//资金 36. while(rs.next()){ 37. job = rs.getString("job");//获取表中过得字段职称st列数据 38. names = rs.getString("ename");//获取姓名数据 39. empon = rs.getString("empon");//获取ID号 40. hiredate = rs.getString("hiredate");//获取时间时期 41. sal = rs.getString("sal");//获取资金 42. System.out.println(empon+"\t"+names+"\t"+job+"\t"+hiredate+"\t"+sal);//输出结果 43. /** 44. * 添加数据 45. */ 46. PreparedStatement pl; 47. ResultSet res; 48. //预处理添加数据,其中有两个参数--"?" 49. pl = (PreparedStatement) cot.prepareStatement("insert into emp (empon,ename,job,hiredate,sal)"+ 50. "values(?,?,?,?,?)"); 51. pl.setInt(1, 3211);//设置参数为1,id为3212 52. pl.setString(2, "王刚");//设置参数为2,name为王刚 53. pl.setString(3, "总裁");//设置参数3,职位为总裁 54. DateFormat df2 = new SimpleDateFormat("yyy-MM-dd"); 55. Date myDate2 = df2.parse("2010-09-13"); 56. pl.setDate(4, new java.sql.Date(myDate2.getTime())); 57. pl.setFloat(5, (float)2000.3); 58. pl.executeUpdate();//实行更新 59. /** 60. * 更新数据 61. */ 62. //PreparedStatement gx; 63. //预处理更新(修改)数据,将王刚的sal修改为5000.00 64. pl = (PreparedStatement) cot.prepareStatement("update emp set sal = ? where ename = ?"); 65. pl.setFloat(1,(float) 5000.00); 66. pl.setString(2, "王刚"); 67. pl.executeUpdate();//实行修改 68. /** 69. * 删除数据 70. */ 71. //PreparedStatement sc; 72. //预处理删除数据 73. pl = (PreparedStatement) cot.prepareStatement("delete from emp where sal > ?"); 74. pl.setFloat(1, 4500); 75. pl.executeUpdate();//实行删除 76. pl.close();//关闭 77. } 78. rs.close();//关闭 79. cot.close();//关闭 80. } catch (ClassNotFoundException e) { 81. System.out.println("数据库驱动异常");//数据库驱动类异常处理 82. e.printStackTrace(); 83. } catch (SQLException e) { 84. System.out.println("数据库连接失败");//数据库连接失败异常处理 85. e.printStackTrace(); 86. } catch (Exception e) { 87. e.printStackTrace(); 88. }finally{ 89. System.out.println("数据库数据成功获取!"); 90. } 91. } 92.}
初学(JAVA JDBC编程 高级阶段) 难点: ★★★★★
希望每一篇文章都能够对读者们提供帮助与提升,这乃是每一位笔者的初衷
感谢您的阅读 欢迎您的留言与建议
- FaceBook:JEEP SevenEleven
- Twitter:@JEEP7ll
- 新浪官方微博: @JEEP-711
- Github博客: https://github.com/jeep711/jeep711.github.io
- Blog Garden:http://www.cnblogs.com/JEEP711/
- W3C/Blog:http://www.w3cschool.cn/jeep711blog/
- CSDN/Blog:http://blog.csdn.net/jeep911
- 51CTO/Blog:http://jeep711.blog.51cto.com/
- 码云:http://git.oschina.net/JEEP711/jeep711.github.io
- 邮箱: jeep711@qq.com,JEEP-711@outlook.com