第15篇-JAVA JDBC编程

2022-03-11 11:31 更新
  • 每篇一句 :对于勇敢者,尝试是一条崭新的生活之路
  • 初学心得: 但对于坎坷与泥泞,能以平常之心视之,就非常不容易
  • (笔者: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. <br> - 查询数据库:show databases;
  2. <br> - 删除数据库:drop database 数据库名;
  3. <br> - 进入数据库:use 数据库名
  4. <br> - 显示创建库名的所有数据:show tables;
  5. <br> - 输出表名:desc 表名
  6. <br> SQL语句四大部分
  7. <br> - 数据定义语言(DDL):drop、create、alter
  8. <br> - 数据操作语言(DML):insert、update、delete
  9. <br> - 数据查询语言(DQL):selectfromwheregroup by
  10. <br> - 数据控制语言(DCL):grant、revoke、commit、rollback
  11. <br> ```

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. <br> package cn.jdbc;
  2. <br> import java.sql.Connection;
  3. <br> import java.sql.DriverManager;
  4. <br> import java.sql.SQLException;
  5. <br> /**
  6. <br> * 创建初始化并获取
  7. <br> */
  8. <br> public class MyJdBc {
  9. <br> private static Connection cot = null;//声明
  10. <br> //静态代码块
  11. <br> static{
  12. <br> try {
  13. <br> Class.forName("com.mysql.jdbc.Driver");
  14. <br> //数据库名称,用户名,密码
  15. <br> cot = DriverManager.getConnection("jdbc:mysql://localhost:3306/sqltestdb","root","root");
  16. <br> if(!cot.isClosed()){
  17. <br> System.out.println("数据连接成功");
  18. <br> }
  19. <br> } catch (ClassNotFoundException e) {
  20. <br> e.printStackTrace();
  21. <br> }catch(SQLException e){
  22. <br> e.printStackTrace();
  23. <br> }
  24. <br> }
  25. <br> public static Connection getInstace(){
  26. <br> return cot;//返回对象
  27. <br> }
  28. <br> }
  29. <br> ```
  30. <br> ```
  31. <br> package cn.jdbc;
  32. <br> import java.sql.Connection;
  33. <br> import java.sql.ResultSet;
  34. <br> import java.sql.SQLException;
  35. <br> import java.sql.Statement;
  36. <br> import java.text.DateFormat;
  37. <br> import java.text.ParseException;
  38. <br> import java.text.SimpleDateFormat;
  39. <br> import java.util.Date;
  40. <br> import com.mysql.jdbc.PreparedStatement;
  41. <br> /**
  42. <br> * JAVA连接JDBC驱动器
  43. <br> * @author JEEP-711
  44. <br> *
  45. <br> */
  46. <br> public class JdBc {
  47. <br> @SuppressWarnings("unused")
  48. <br> public static void main(String[] args) throws SQLException, ParseException {
  49. <br> Connection cot = MyJdBc.getInstace();//连接
  50. <br> Statement st = cot.createStatement();//创建Statement类对象,来执行SQL语句
  51. <br> String sql = "select * from emp";//要执行的SQL语句
  52. <br> ResultSet rs = st.executeQuery(sql);//ResultSet类,用来存放获取结果集
  53. <br> System.out.println("-----------------------------------------------");
  54. <br> System.out.println("------------------执行结果如下所示------------------");
  55. <br> System.out.println("-----------------------------------------------");
  56. <br> System.out.println("ID"+"\t"+"姓名"+"\t"+"职称"+"\t"+"\t时期"+"\t"+"资金");
  57. <br> System.out.println("-----------------------------------------------");
  58. <br> /**
  59. <br> * 查询
  60. <br> */
  61. <br> String job = null;//职位
  62. <br> String names = null;//姓名
  63. <br> String empon = null;//id号
  64. <br> String hiredate = null;//时期
  65. <br> String sal = null;//资金
  66. <br> while(rs.next()){
  67. <br> job = rs.getString("job");//获取表中过得字段职称st列数据
  68. <br> names = rs.getString("ename");//获取姓名数据
  69. <br> empon = rs.getString("empon");//获取ID号
  70. <br> hiredate = rs.getString("hiredate");//获取时间时期
  71. <br> sal = rs.getString("sal");//获取资金
  72. <br> System.out.println(empon+"\t"+names+"\t"+job+"\t"+hiredate+"\t"+sal);//输出结果
  73. <br> /**
  74. <br> * 添加数据
  75. <br> */
  76. <br> PreparedStatement pl;
  77. <br> ResultSet res;
  78. <br> //预处理添加数据,其中有两个参数--"?"
  79. <br> pl = (PreparedStatement) cot.prepareStatement("insert into emp (empon,ename,job,hiredate,sal)"+
  80. <br> "values(?,?,?,?,?)");
  81. <br> pl.setInt(1, 3211);//设置参数为1,id为3212
  82. <br> pl.setString(2, "王刚");//设置参数为2,name为王刚
  83. <br> pl.setString(3, "总裁");//设置参数3,职位为总裁
  84. <br> DateFormat df2 = new SimpleDateFormat("yyy-MM-dd");
  85. <br> Date myDate2 = df2.parse("2010-09-13");
  86. <br> pl.setDate(4, new java.sql.Date(myDate2.getTime()));
  87. <br> pl.setFloat(5, (float)2000.3);
  88. <br> pl.executeUpdate();//实行更新
  89. <br> /**
  90. <br> * 更新数据
  91. <br> */
  92. <br> //PreparedStatement gx;
  93. <br> //预处理更新(修改)数据,将王刚的sal修改为5000.00
  94. <br> pl = (PreparedStatement) cot.prepareStatement("update emp set sal = ? where ename = ?");
  95. <br> pl.setFloat(1,(float) 5000.00);
  96. <br> pl.setString(2, "王刚");
  97. <br> pl.executeUpdate();//实行修改
  98. <br> /**
  99. <br> * 删除数据
  100. <br> */
  101. <br> //PreparedStatement sc;
  102. <br> //预处理删除数据
  103. <br> pl = (PreparedStatement) cot.prepareStatement("delete from emp where sal & ?");
  104. <br> pl.setFloat(1, 4500);
  105. <br> pl.executeUpdate();//实行删除
  106. <br> pl.close();//关闭
  107. <br> }
  108. <br> rs.close();//关闭
  109. <br> cot.close();//关闭
  110. <br> } catch (ClassNotFoundException e) {
  111. <br> System.out.println("数据库驱动异常");//数据库驱动类异常处理
  112. <br> e.printStackTrace();
  113. <br> } catch (SQLException e) {
  114. <br> System.out.println("数据库连接失败");//数据库连接失败异常处理
  115. <br> e.printStackTrace();
  116. <br> } catch (Exception e) {
  117. <br> e.printStackTrace();
  118. <br> }finally{
  119. <br> System.out.println("数据库数据成功获取!");
  120. <br> }
  121. <br> }
  122. <br> }
  123. <br> ```

初学(JAVA JDBC编程 高级阶段) 难点: ★★★★★

希望每一篇文章都能够对读者们提供帮助与提升,这乃是每一位笔者的初衷

感谢您的阅读 欢迎您的留言与建议

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号