JDBC的学习(一)

概念

所谓英文简写的意思是:Java DataBase Connectivity ,即 Java数据库的连接,用Java语言来操作数据库

本质

简单的来说,就是写这个JDBC的公司定义的一套操作关系型数据库的规则,所以由此可知它就像一个接口一样, 然后像MySql或者Oracle这些厂商来提供”实现类“——驱动jar包,这样就可以利用Java来进行操作数据库操作

java.sql:所有与JDBC访问数据库相关的接口和类

javax.sql:数据库扩展包,提供数据库额外的功能。如:连接池

数据库的驱动:由各大数据库厂商提供,需要额外去下载,是对JDBC接口实现的类

步骤

1.导入驱动jar包(在项目中新建一个目录将jar包复制粘贴到该目录下)

2.用java注册驱动(注:从JDBC3开始,目前已经普遍使用的版本。可以不用注册驱动而直接使用。Class.forName这句话可以省略。建议是写上此语句)

  1. Mysql例: Class.forName("com.mysql.jdbc.Driver");
  1. Oracle例:Class.forName("oracle.jdbc.driver.OracleDriver");

3.获取数据库的连接对象

  1. 例: Connection con =DriverManger.getConnection(url:"jdbc:mysql://locallhost:3306/数据库名",user"",password:"")
  2. ***DriverManger是驱动管理对象***
  3. 功能:1.注册驱动 Class.forName("com.mysql.jdbc.Driver");
  4. (其实是根据deregisterDriver这个注册驱动的方法来实现的;且从mysql5之后的驱动jarj会自动进行注册 驱动)
  5. 2.获取数据库连接
  6. .参数:url user password
  7. .mysql语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
  8. ***Connection是数据库连接对象***
  9. 1.获取执行sql的对象
  10. .Statement createStatement()
  11. .PreparedStaement preparStatement(String sql)
  12. 2.管理事务
  13. .开启事务:setAutoCommit(boolean autoCommit): 调用该方法设置参数为false,即开启事务
  14. .提交事务:commit()
  15. .回滚事务:rollback()

4.定义sql语句

  1. 例: String sql =" /*写上你要做的sql语句*/";

5.获取执行sql语句的对象,即Statement

  1. 例: Statement stmt = con.createStatement();
  2. Statement是执行sql的对象

6.执行sql,接受返回结果

  1. 例: int count = stmt.executeUpdate(sql);
  2. /*执行DML语句(常用)、DDL语句*/
  3. boolean execute(String sql):可以执行任意的sql (不常用)
  4. ResultSet excuteQuery(String sql):执行DQL语句;返回结果集对象

7.处理结果

  1. 例: System.out.println(count);//受影响的行数,然后根据受影响的行数来判断DML语句是否执行成功

8.释放资源

  1. 例: stmt.close();
  2. con.close();

9.ResultSet和PreparStatement对象

  1. ResultSet是结果集对象,即封装查询结果的
  2. **boolean next()方法**:游标向下移动一行;返回值为boolean
  3. **getXxx(参数)方法**:获取数据;Xxx代表数据类型;比如:getInt()、getString()、getDouble()
  4. 通过传参可以进行获取相应的数据;比如:int中的数据就是列的编号,String中的数据就是列的名称
  5. 正确的步骤应该是:1.游标向下移动一行
  6. 2,判断是否有数据(利用循环简化判断)
  7. 3.获取数据
  8. PreparStatement是执行sql的对象,功能比父类Statement更为强大

实例代码

以下为菜鸟教程中的代码!

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class DbUtil {
  6. public static final String URL = "jdbc:mysql://localhost:3306/imooc";
  7. public static final String USER = "liulx";
  8. public static final String PASSWORD = "123456";
  9. public static void main(String[] args) throws Exception {
  10. //1.加载驱动程序
  11. Class.forName("com.mysql.jdbc.Driver");
  12. //2. 获得数据库连接
  13. Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
  14. //3.操作数据库,实现增删改查
  15. Statement stmt = conn.createStatement();
  16. ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
  17. //如果有数据,rs.next()返回true
  18. while(rs.next()){
  19. System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
  20. }
  21. }
  22. }

进行增删改查

  1. public class DbUtil {
  2. public static final String URL = "jdbc:mysql://localhost:3306/imooc";
  3. public static final String USER = "liulx";
  4. public static final String PASSWORD = "123456";
  5. private static Connection conn = null;
  6. static{
  7. try {
  8. //1.加载驱动程序
  9. Class.forName("com.mysql.jdbc.Driver");
  10. //2. 获得数据库连接
  11. conn = DriverManager.getConnection(URL, USER, PASSWORD);
  12. } catch (ClassNotFoundException e) {
  13. e.printStackTrace();
  14. } catch (SQLException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. public static Connection getConnection(){
  19. return conn;
  20. }
  21. }
  22. //模型
  23. package liulx.model;
  24. import java.util.Date;
  25. public class Goddess {
  26. private Integer id;
  27. private String user_name;
  28. private Integer sex;
  29. private Integer age;
  30. private Date birthday; //注意用的是java.util.Date
  31. private String email;
  32. private String mobile;
  33. private String create_user;
  34. private String update_user;
  35. private Date create_date;
  36. private Date update_date;
  37. private Integer isDel;
  38. //getter setter方法。。。
  39. }
  40. //---------dao层--------------
  41. package liulx.dao;
  42. import liulx.db.DbUtil;
  43. import liulx.model.Goddess;
  44. import java.sql.Connection;
  45. import java.sql.ResultSet;
  46. import java.sql.SQLException;
  47. import java.sql.Statement;
  48. import java.util.ArrayList;
  49. import java.util.List;
  50. public class GoddessDao {
  51. //增加
  52. public void addGoddess(Goddess g) throws SQLException {
  53. //获取连接
  54. Connection conn = DbUtil.getConnection();
  55. //sql
  56. String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+
  57. "create_user, create_date, update_user, update_date, isdel)"
  58. +"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)";
  59. //预编译
  60. PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行
  61. //传参
  62. ptmt.setString(1, g.getUser_name());
  63. ptmt.setInt(2, g.getSex());
  64. ptmt.setInt(3, g.getAge());
  65. ptmt.setDate(4, new Date(g.getBirthday().getTime()));
  66. ptmt.setString(5, g.getEmail());
  67. ptmt.setString(6, g.getMobile());
  68. ptmt.setString(7, g.getCreate_user());
  69. ptmt.setString(8, g.getUpdate_user());
  70. ptmt.setInt(9, g.getIsDel());
  71. //执行
  72. ptmt.execute();
  73. }
  74. public void updateGoddess(){
  75. //获取连接
  76. Connection conn = DbUtil.getConnection();
  77. //sql, 每行加空格
  78. String sql = "UPDATE imooc_goddess" +
  79. " set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+
  80. " update_user=?, update_date=CURRENT_DATE(), isdel=? "+
  81. " where id=?";
  82. //预编译
  83. PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行
  84. //传参
  85. ptmt.setString(1, g.getUser_name());
  86. ptmt.setInt(2, g.getSex());
  87. ptmt.setInt(3, g.getAge());
  88. ptmt.setDate(4, new Date(g.getBirthday().getTime()));
  89. ptmt.setString(5, g.getEmail());
  90. ptmt.setString(6, g.getMobile());
  91. ptmt.setString(7, g.getUpdate_user());
  92. ptmt.setInt(8, g.getIsDel());
  93. ptmt.setInt(9, g.getId());
  94. //执行
  95. ptmt.execute();
  96. }
  97. public void delGoddess(){
  98. //获取连接
  99. Connection conn = DbUtil.getConnection();
  100. //sql, 每行加空格
  101. String sql = "delete from imooc_goddess where id=?";
  102. //预编译SQL,减少sql执行
  103. PreparedStatement ptmt = conn.prepareStatement(sql);
  104. //传参
  105. ptmt.setInt(1, id);
  106. //执行
  107. ptmt.execute();
  108. }
  109. public List<Goddess> query() throws SQLException {
  110. Connection conn = DbUtil.getConnection();
  111. Statement stmt = conn.createStatement();
  112. ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
  113. List<Goddess> gs = new ArrayList<Goddess>();
  114. Goddess g = null;
  115. while(rs.next()){
  116. g = new Goddess();
  117. g.setUser_name(rs.getString("user_name"));
  118. g.setAge(rs.getInt("age"));
  119. gs.add(g);
  120. }
  121. return gs;
  122. }
  123. public Goddess get(){
  124. Goddess g = null;
  125. //获取连接
  126. Connection conn = DbUtil.getConnection();
  127. //sql, 每行加空格
  128. String sql = "select * from imooc_goddess where id=?";
  129. //预编译SQL,减少sql执行
  130. PreparedStatement ptmt = conn.prepareStatement(sql);
  131. //传参
  132. ptmt.setInt(1, id);
  133. //执行
  134. ResultSet rs = ptmt.executeQuery();
  135. while(rs.next()){
  136. g = new Goddess();
  137. g.setId(rs.getInt("id"));
  138. g.setUser_name(rs.getString("user_name"));
  139. g.setAge(rs.getInt("age"));
  140. g.setSex(rs.getInt("sex"));
  141. g.setBirthday(rs.getDate("birthday"));
  142. g.setEmail(rs.getString("email"));
  143. g.setMobile(rs.getString("mobile"));
  144. g.setCreate_date(rs.getDate("create_date"));
  145. g.setCreate_user(rs.getString("create_user"));
  146. g.setUpdate_date(rs.getDate("update_date"));
  147. g.setUpdate_user(rs.getString("update_user"));
  148. g.setIsDel(rs.getInt("isdel"));
  149. }
  150. return g;
  151. }
  152. }

关于PreparedStatement

PreparedSatement的好处

1.prepareStatement()会先将SQL语句发送给数据库预编译。PreparedStatement会引用着预编译后的结果。可以多次传入不同的参数给PreparedStatement对象并执行。减少SQL编译次数,提高效率。

2.安全性更高,没有SQL注入的隐患。

3.提高了程序的可读性

使用PreparedStatement的步骤:

1)编写SQL语句,未知内容使用?占位:"SELECT * FROM user WHERE name=? AND password=?";

2)获得PreparedStatement对象

3)设置实际参数:setXxx(占位符的位置, 真实的值)

4)执行参数化SQL语句

5)关闭资源

JDBC的学习(一)的更多相关文章

  1. JDBC的学习 3-1

    JDBC的学习 3-1 JDBC基本概念 快速入门 对JDBC中各个接口和类详解 JDBC : 概念 :Java DateBase Connectivity java数据库连接,Java语言操作数据库 ...

  2. Java的JDBC原生态学习以及连接池的用法

    JDBC是什么 JDBC(Java Data Base Connectivity)是Java访问数据库的桥梁,但它只是接口规范,具体实现是各数据库厂商提供的驱动程序(Driver). 应用程序.JDB ...

  3. JDBC 接口学习

    说明:文章所有内容皆选自实验楼教程[JDBC 入门教程],想要学习更多JDBC,可以点击教程进行学习~ JDBC 简介 JDBC 的全称是 Java Database Connectivity,叫做 ...

  4. 【JDBC】学习路径1-JDBC背景知识

    学习完本系列JDBC课程后,你就可以愉快使用Java操作我们的MySQL数据库了. 各种数据分析都不在话下了. 第一章:废话 JDBC编程,就是写Java的时候,调用了数据库. Java Databa ...

  5. JDBC入门学习

    Introduction What's JDBC JDBC stands for Java Database Connectivity, which is a standard Java API fo ...

  6. Java JDBC基础学习小结

    JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作.JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver.Connection.Statement.Re ...

  7. mysql的jdbc入门学习小结

    转自:专注JavaWeb开发 http://www.javaweb1024.com/data/MySQL/2015/04/25/618.html 一.jdbc基本概念jdbc : Java Datab ...

  8. JDBC第一次学习

     JDBC(Java Data Base Connectivity,java数据库连接),由一些类和接口构成的API,它是J2SE的一部分,由java.sql,javax.sql包组成. 应用程序.J ...

  9. JDBC基础学习(六)—数据库连接池

    一.数据库连接池介绍 1.数据库连接池的缘由      对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什 ...

随机推荐

  1. Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183)

    Nginx升级加固SSL/TLS协议信息泄露漏洞(CVE-2016-2183) 漏洞说明 // 基于Nginx的https网站被扫描出SSL/TLS协议信息泄露漏洞(CVE-2016-2183),该漏 ...

  2. cmd运行SpringBoot的jar中文乱码

    问题: 通过以下命令启动springBoot项目后,在项目中查看日志,发现中文乱码 java -jar projectName.jar 解决 启动时添加参数-Dfile.encoding=UTF-8即 ...

  3. Mysql 多表连查 xml写法 非注解形式

    1.xml写法 <!-- 联查用户users表 --> <resultMap type="nanh.entity.Tasks" id="selectTa ...

  4. PyCharm2020.2.1激活方法

    本人亲测有效!直接看图! 安装准备 一.百度网盘链接:https://pan.baidu.com/s/151vnrZG2V4eMPW8RYqse3w   提取码:z5k0 至于Pycharm的安装在这 ...

  5. 几个概念讲解Xaas

    saas:software as a service  SaaS平台是运营saas软件的平台.SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件.硬件运作平台,并负责所有前期的实施.后期的维 ...

  6. springboot:druid 404

    druid配置是在servlet中添加,所以需要servlet扫描 aplication里添加@ServletComponentScan("com")

  7. Laravel Exception结合自定义Log服务的使用

    Laravel Exception结合自定义Log服务的使用 第一部分:laravel关于错误和异常的部分源码 第二部分:自定义异常的使用(结合serviceprovider monolog elas ...

  8. 利用glog打印日志

    glog出自互联网豪门google,质量有保证,轻量级,入门简单,功能较全,线程安全.有关glog的打印细节本篇文章不再赘述,网上一大堆的资料,参考:glog日志库使用笔记. glog的托管地址:gi ...

  9. java工作三年应具备的技能

    LZ常常思考自己的未来,也从自己的思考中总结出了一些东西,作为第一部分来谈谈.LZ认为一名程序员应该有几个阶段(以下时间都算上实习期). 第一阶段:三年 我认为三年对于程序员来说是第一个门槛,这个阶段 ...

  10. python-igraph

    linux安装python-igraph: $ sudo apt-get install -y libigraph0-dev $ pip install python-igraph ------for ...