千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:首页 > 关于学院 > 技术论坛  >  正文

Java技术学习之数据库JDBC应用分析

时间:2018-05-09 11:15:49     来源:千锋教育 作者:千锋老师

  一、jdbc概念

  所谓的jdbc,实际是来自于 java database conectivity的缩写,顾名思义是用于实现在java程序中连接数据库,以至于可以对数据库进行操作。实际上,jdbc是java程序与数据库进行通信的一种规范。这种规范(接口)定义在java.sql包下。其四大核心对象:

  · DriverManager: 用于加载数据库驱动

  · Connection:用于连接数据库的

  · Statement: 用于执行sql语句的

  · ResultSet:用于封装从数据库返回的结果集的

  二、jdbc初体验

  //1.注册驱动

  Class.forName("com.mysql.jdbc.Driver");

  //2.获得一个连接对象

  String url= "jdbc:mysql:///db_day07?user=root&password=123";

  Connection connection = DriverManager.getConnection(url);

  //3.获得执行sql语句的statement对象

  Statement stmt = connection.createStatement();

  //4.执行sql语句

  String sql = "select * from user";

  //5.获得结果集对象ResultSet,其中封装着来自于数据库的所有数据

  ResultSet rs = stmt.executeQuery(sql);

  //6.解析结果集

  while(rs.next()){

  System.out.println(rs.getInt(1)+";"+rs.getString(2)+";"+rs.getInt(3)+";"+rs.getString(4));

  }

  //7.释放资源

  rs.close();

  stmt.close();

  connection.close();

  数据库驱动的作用:

  数据库驱动是已经实现了jdbc规范的一个类集。其中封装了实现了jdbc规范的所有的类。

  对于mysql的驱动来说,获得的Connection对象,该对象就能连接mysql数据库,同理,oracle驱动获得的连接对象,就能连接oracle数据库。

  三、四大核心对象的详解

  1.DriverManager:加载驱动

  注册驱动的方式有两种:

  1)DriverManager.registerDriver(new com.mysql.jdbc.Driver());

  这种方式不合适,因为驱动会随着com.mysql.jdbc.Driver类的加载而被注册,此时相当于注册了两次

  2)Class.forName("com.mysql.jdbc.Driver"); 这种方式直接加载com.mysql.jdbc.Driver类,加载类时Driver类的静态代码块就会注册驱动。因此,注册驱动就用这种方式

  2.Connection:连接数据库的

  什么样的数据库的驱动,获得的连接对象就是连接什么样的数据库,比如mysql数据库的驱动,获得的连接对象就是用于连接mysql数据库的。

  获得Connection对象的方式:

  · 方式一:

  String url = "jdbc:mysql://localhost:3306/db_day07";

  String user = "root";

  String password = "123";

  Connection conn = DriverManager.getConnection(url, user, password);

  · 方式二:将用户名和密码存入到Properties属性集对象(map)中

  Properties pro = new Properties();

  pro.setProperty("user", "root");

  pro.setProperty("password", "123");

  Connection conn = DriverManager.getConnection(url, pro);

  · 方式三:将用户名和密码作为url的参数

  String url= "jdbc:mysql:///db_day07?user=root&password=123";

  Connection conn = DriverManager.getConnection(url);

  3.Statement对象:用于执行sql语句的对象

  获得的方式:

  Connection对象的createStatement();

  执行sql语句的方法:

  · 方法一: executeQuery(String sql): 返回值是一个ResultSet对象,该对象中封装着查询的结果。

  对于查询的sql语句来说,使用此方法。因为查询的sql(select)会产生结果集。

  · 方法二:executeUpdate(String sql): 返回值是一个int ,表示受影响的行数。

  对于,不会产生结果的sql语句(insert、update、delete),使用这个方法,该方法的返回值是受影响的行数。

  4.ResultSet对象:用于封装结果集的

  如果statement对象执行executeQuery方法产生了结果,那么该结果集就被封装进ResultSet对象中。

  需要掌握的几个方法:

  · next():第一次调用之前,光标指向第一行之前,第一次调用,指在第一行,第二次调用指在第二行。next方法的返回值,如果该行有数据,则返回true,否则返回false.

  · getInt(int columnindex):通过列的索引找到该列的数据,注意,索引从1开始

  o getInt(String columnname):通过列的名字找到该列的数据。

  o getString()、getObject()...

  四、完善JDBC代码

  封装JDBCUtil工具类,通过工具类来获得Connection对象

  private static String driver = null;

  private static String url = null;

  private static String user = null;

  private static String password = null;

  static{

  //静态代码块是随着类的加载而被加载,且只加载一次。

  Properties p = new Properties();

  try {

  p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("dbinfo.properties"));

  driver = p.getProperty("driver");

  url = p.getProperty("url");

  user = p.getProperty("user");

  password = p.getProperty("password");

  Class.forName(driver);

  } catch (IOException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  } catch (ClassNotFoundException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  }

  }

  public static Connection getConnection() throws SQLException, ClassNotFoundException{

  return DriverManager.getConnection(url,user,password);

  }

  五、案例:完成登录验证

  登录验证的实现

  public User findUser(String username, String password) {

  User user = null;

  Connection conn = null;

  Statement stmt = null;

  ResultSet rs = null;

  try {

  //从工具类中获得一个Connection对象

  conn = JDBCUtil.getConnection();

  stmt = conn.createStatement();

  //select * from user where username='zhangsan' and password='123456'

  String sql = "select * from user where username='"+username

  +"' and password='"+password+"'";

  rs = stmt.executeQuery(sql);

  if(rs.next()){

  //如果用户名和密码正确,那么就能获得一条记录,于是解析该记录并封装进User对象中

  user = new User();

  user.setUid(rs.getString(1));

  user.setUsername(rs.getString(2));

  user.setPassword(rs.getString(3));

  }

  } catch (ClassNotFoundException | SQLException e) {

  // TODO Auto-generated catch block

  e.printStackTrace();

  } finally{

  //释放资源

  JDBCUtil.releaseResource(conn, stmt, rs);

  }

  return user;

  }

  千锋Java培训作为中国IT研发人才一体化服务的开拓者,为学生制定合理有序的学习计划,0学费入学,2周免费试听不满意不收费,与学员签订就业协议,坚持良心面授,从千锋Java培训班出去的学员均已高薪就业。千锋推出的免费java视频教程,让学员能够方面的巩固基础技术能力。

相关文章

  • 北京天丰利校区(总部):北京市海淀区宝盛北里西区28号天丰利商城4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2层、南区服务楼2层
    咨询电话:400-186-9990 010-82790226-801
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、大数据开发培训、VR/AR混合现实培训、Python培训、Linux云计算培训、软件测试培训、Android培训、iOS培训、好程序员
  • 深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷A区B座605-619
    深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋2楼、3楼
    咨询电话:400-186-9990 0755-33582485-801(硅谷)0755-86660670-801(大学城)
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、Android培训、iOS培训
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-186-9990 400-627-7899 021-56166283/56166279
    面授课程:全栈HTML5+培训、UI交互设计培训、JavaEE+云数据培训、Android课程培训、iOS课程培训、好程序员
  • 郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
    咨询电话:400-186-9990 0371-55191750 400-186-9990
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 广州校区地址:广州市天河区元岗路310号智汇park创意园E座5层
    咨询电话:400-186-9990 020-22119207 400-186-9990
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-186-9990 0411-39026086 400-186-9990
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、UI交互设计培训、Android课程培训、iOS课程培训
  • 武汉校区地址:武汉市光谷大道61号智慧园21号楼2层
    咨询电话:400-186-9990 027-65523826
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
    咨询电话:400-186-9990 028-83178771
    面授课程:全栈HTML5+培训、UI交互设计培训、PHP培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:400-186-9990 029-85260160
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训
  • 杭州校区地址:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:400-186-9990 0571-86893632 010-82790226-801
    面授课程:全栈HTML5+培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层
    咨询电话:400-186-9990 0532-80911190 010-82790226-801
    面授课程:全栈HTML5+培训、UI交互设计培训、JavaEE+云数据培训、Android课程培训、iOS课程培训
  • 重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
    咨询电话:400-186-9990 023-68883009
    面授课程:JavaEE+云数据课程培训
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:400-186-9990 400-186-9990
    面授课程:JavaEE+云数据课程培训
  • 哈尔滨校区地址:哈尔滨市松北区创新一路699号科技创新城19号楼五楼
    咨询电话:400-186-9990 15663846969
    面授课程:全栈HTML5+培训
  • 千锋教育服务号

    了解千锋动态
    关注千锋教育服务号

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱