JDBC数据库基本操作

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> JDBC数据库基本操作

点击蓝字“程序员考拉”欢迎关注!

JDBC数据库基本操作

1.什么是JDBC?

在看JDBC的概念之前先来看看什么是数据库驱动。

数据库驱动中驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。

JDBC数据库基本操作

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC(Java Data Base Connectivity)。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。

JDBC数据库基本操作

综上,JDBC是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口,定义了用来访问数据库的标准java类库,使用这个类库可以以一种标准的方法方便地访问数据库资源。JDBC的目标是使程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

2.JDBC API

JDBC API是一系列的接口,它使得应用程序能够进行数据库连接,执行SQL语句,并且得到返回结果。数据库厂商使用的Java.sql.Driver接口是所有JDBC驱动程序需要实现的接口,在java程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类java.sql.DriverManager去调用这些Driver实现。

JDBC数据库基本操作

3.JDBC获取数据库的连接

3.1 使用Driver接口获取数据库的连接


package com.test.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.util.Properties;

import org.junit.Test;
/*
 * 编写一个通用的方法,在不修改源程序的条件下,可以获取任何数据库的连接
 * */

public class JDBCTest {  
  public Connection getConnection() throws Exception{
                //准备连接数据库的4个字符串
    String driverClass=null;
    String jdbcUrl=null;
    String user=null;
    String password=null;
    //获取类路径下的jdbc.properties文件
    InputStream in=getClass().getClassLoader().getResourceAsStream("jdbc.properties");
    Properties properties=new Properties();
    properties.load(in);
    //读取properties文件内容
    driverClass=properties.getProperty("driver");
    jdbcUrl=properties.getProperty("jdbcUrl");
    user=properties.getProperty("user");
    password=properties.getProperty("password");
    //通过反射创建java对象
    Driver driver=(Driver)Class.forName(driverClass).newInstance();
    Properties info=new Properties();
    info.put("user",user);
    info.put("password",password);
    Connection connection=driver.connect(jdbcUrl, info);
    
    return connection;
  }
  @Test
  public void testGetConnection() throws Exception{
    System.out.println(getConnection());
  }
}

 

jdbc.properties


driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3303/extra
user=root
password=0404

3.2 使用DriverManager类获取数据库连接

通过DriverManager连接数据库的基本步骤分为:

①准备连接数据库的4个字符串,driverClass,jdbcUrl,user,password;

1).获取类路径下的jdbc.properties文件

2).读取properties文件内容,获取4个字符串的值

②加载数据库驱动程序;

③通过DriverManager的getConnection()方法获取数据库连接;


package com.test.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;

public class JDBCTest {    
    
    public Connection getConnection() throws Exception{
        //1.准备连接数据库的4个字符串
        String driverClass=null;
        String jdbcUrl=null;
        String user=null;
        String password=null;
        //获取类路径下的jdbc.properties文件
        InputStream in=getClass().getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties=new Properties();
        properties.load(in);
        //读取properties文件内容
        driverClass=properties.getProperty("driver");
        jdbcUrl=properties.getProperty("jdbcUrl");
        user=properties.getProperty("user");
        password=properties.getProperty("password");
        //2.加载数据库驱动程序
        Class.forName(driverClass);
        //3.通过DriverManager的getConnection()方法获取数据库连接
        Connection connection=DriverManager.getConnection(jdbcUrl,user,password);
        return connection;
    }
    @Test
    public void testGetConnection() throws Exception{
        System.out.println(getConnection());
    }
}

使用DriverManager可以注册多个驱动程序,从而使得使用多个jdbcUrl可以连接不同的数据库。

4.通过Statement执行更新操作

Statement是用于执行SQL语句的对象:

①通过Connection的createStament()方法来获取;

②通过executeUpdate(sql)可以执行SQL语句;

③传入的SQL可以是INSERT,UPDATE或DELETE,但不能是SELECT;

④关闭的顺序是先关闭后获取的,即先关闭statement,再关闭connection;


package com.test.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.junit.Test;

/**
 * @author Administrator
 *
 */
public class JDBCTest {  
  @Test
  public void testStatement() throws Exception{
    Connection con=null;
    Statement statement=null;
    try{
      //1.获取数据库连接
      con=getConnection();
      //2.准备插入的SQL连接
      String sql="INSERT INTO TEST VALUES(NULL,'B','bdbs.@koala.com','2018-8-09')";
      //3.执行插入
      //1).获取操作SQL语句的Statement对象,调用Connection的createStatement()方法来获取;
      statement=con.createStatement();
      //2).调用Statement对象的executeUpdate(sql)执行SQL语句进行插入
      statement.executeUpdate(sql);
    }catch(Exception e){
      e.printStackTrace();
      }finally{
        //使用try...catch...是为了确保出现异常也能关闭数据库。
        //4.关闭Statement对象
        try {
          if(statement!=null)
          statement.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }finally{
          //5.关闭数据库连接
          if(con!=null)
              con.close();
        }
    }
  }
  public Connection getConnection() throws Exception{
    //1.准备连接数据库的4个字符串
    String driverClass=null;
    String jdbcUrl=null;
    String user=null;
    String password=null;
    //获取类路径下的jdbc.properties文件
    InputStream in=getClass().getClassLoader().getResourceAsStream("jdbc.properties");
    Properties properties=new Properties();
    properties.load(in);
    //读取properties文件内容
    driverClass=properties.getProperty("driver");
    jdbcUrl=properties.getProperty("jdbcUrl");
    user=properties.getProperty("user");
    password=properties.getProperty("password");
    //2.加载数据库驱动程序
    Class.forName(driverClass);
    //3.通过DriverManager的getConnection()方法获取数据库连接
    Connection connection=DriverManager.getConnection(jdbcUrl,user,password);
    return connection;
  }
  @Test
  public void testGetConnection() throws Exception{
    System.out.println(getConnection());
  }
}

5.一个通用的更新数据库的方法,包括INSERT,UPDATE,DELETE。

首先将数据库的连接和释放的方法封装到工具类中:


package com.test.jdbc;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.junit.Test;
/*
 * 操作JDBC的工具类,其中封装了一些工具方法。
 */
public class JDBCTools {
  //获取连接的方法
  public static Connection getConnection() throws Exception{
    //1.准备连接数据库的4个字符串
    String driverClass=null;
    String jdbcUrl=null;
    String user=null;
    String password=null;
    //获取类路径下的jdbc.properties文件
    InputStream in=JDBCTools.class.getResourceAsStream("jdbc.properties");
    Properties properties=new Properties();
    properties.load(in);
    //读取properties文件内容
    driverClass=properties.getProperty("driver");
    jdbcUrl=properties.getProperty("jdbcUrl");
    user=properties.getProperty("user");
    password=properties.getProperty("password");
    //2.加载数据库驱动程序
    Class.forName(driverClass);
    //3.通过DriverManager的getConnection()方法获取数据库连接
    Connection connection=DriverManager.getConnection(jdbcUrl,user,password);
    return connection;
  }
  @Test
  public void testGetConnection() throws Exception{
    System.out.println(getConnection());
  }
  //释放连接的方法
  public static void release(Statement statement,Connection connection){
    //使用try...catch...是为了确保出现异常也能关闭数据库。
    //4.关闭Statement对象
    if(statement!=null){
    try {
      statement.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
    }
    if(connection!=null){
    try {
      //5.关闭数据库连接
      connection.close();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
  }
}

通用的更新方法,包括INSERT,UPDATE,DELETE:


package com.test.jdbc;

import java.sql.Connection;
import java.sql.Statement;
import org.junit.Test;
import com.test.jdbc.JDBCTools;

public class JDBCTest {  
  public void update(String sql){
    Connection con=null;
    Statement statement=null;
    try{
      con=JDBCTools.getConnection();
      statement=con.createStatement();
      statement.executeUpdate(sql);
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      JDBCTools.release(statement, con);
    }
  }
}

6.通过ResultSet执行查询操作

ResultSet结果集,封装了使用JDBC进行查询的结果。

①调用Statement对象的executeQuery(sql)可以得到结果集;

②ResultSet返回的实际上是一张数据表,有一个指针指向数据表的第一行的前面。可以调用next()方法检测下一行是否有效,若有效该方法返回true,且指针下移,相当于Iterator对象的hasNext()和next()方法的结合体;

③当指针对位到一行时,可以通过getXxx(index)或getXxx(columnName)获取每一列的值,例如:getInt(1),getString(“name”);

④ResultSet也需要关闭。

数据表如下,获取所有信息并打印。

JDBC数据库基本操作

 


package com.test.jdbc;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import com.test.jdbc.JDBCTools;

public class JDBCTest {  
  @Test
  public void testResultSet() throws Exception{
    //1.获取connection
    Connection con=null;
    Statement statement=null;
    ResultSet resultset=null;
    try{
      JDBCTools tool=new JDBCTools();
      con=tool.getConnection();
      //2.获取statement
      statement=con.createStatement();
      //3.准备SQL
      String sql="SELECT ID,NAME,EMAIL,BIRTH FROM TEST";
      //4.执行查询,得到resultset
      resultset=statement.executeQuery(sql);
      //5.处理ResultSet
      while(resultset.next()){
        int ID=Integer.parseInt(resultset.getString(1));
        String NAME=resultset.getString("NAME");
        String EMAIL=resultset.getString(3);
        Date date=resultset.getDate(4);
        
        System.out.println(ID);
        System.out.println(NAME);
        System.out.println(EMAIL);
        System.out.println(date);
      }
    }catch(Exception e){
      e.printStackTrace();
    }finally{
      //6.关闭数据库资源
      JDBCTools.release(statement,con,resultset);
    }
  }
}

运行结果:

JDBC数据库基本操作

 

JDBC数据库基本操作
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> JDBC数据库基本操作


 上一篇
SELECT语句(三) SELECT语句(三)
点击蓝字“程序员考拉”欢迎关注! 一.HAVING子句 一个选择语句块的HAVING子句和WHERE子句的目的相同,WHERE子句用来在FROM子句处理之后选择一行,而HAVING子句用来在GROUP BY子句处理之后选择一行。一
下一篇 
以面向对象的思想实现数据表的添加和查询,JDBC代码超详细 以面向对象的思想实现数据表的添加和查询,JDBC代码超详细
点击蓝字“程序员考拉”欢迎关注! 以面向对象的思想编写JDBC程序,实现使用java程序向数据表中添加学生信息,并且可以实现给定身份证号查询学生信息或给定准考证号查询学生信息。 创建的数据表如下: CREATE TABLE EX