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

本文介绍了Java中使用JDBC进行数据库操作的基本概念和技术细节,包括核心对象的使用方法及登录验证案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  一、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视频教程,让学员能够方面的巩固基础技术能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值