jdbc连接数据库实例详解

 更新时间:2019年02月27日 08:31:23   投稿:laozhang  
在本篇内容里小编给大家分享了关于jdbc如何连接数据库的相关知识点内容,需要的朋友们学习下。

JDBC简介

JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。

JDBC编程步骤

(1)加载驱动程序:

下载驱动包 : http://dev.mysql.com/downloads/connector/j/

解压,得到 jar文件。将该文件复制到Java工程目录Java Resources/Libraries/ 下,→ buildpath 。

(2)获得数据库连接

(3)创建Statement对象:

(4)向数据库发送SQL命令

(5)处理数据库的返回结果(ResultSet类)

package com.baidu.emp.jdbcTest;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 
import com.mysql.jdbc.Driver;
/**
 * 开始使用jdbc连接数据库
 * @author Admin
 *
 */
public class Test001 {
 
  public static void main(String[] args) throws Exception {
 
    /**
     * 加载驱动
     */
    // 方法一:
    /*
     * import java.sql.DriverManager; import com.mysql.jdbc.Driver;
     */
    // Driver driver = new Driver();
    // DriverManager.registerDriver(driver);
 
    // 方法二:(推荐使用)
    Class.forName("com.mysql.jdbc.Driver");
 
    /**
     * 创建链接
     */
    String url = "jdbc:mysql://localhost:3306/testjdbc";
    String user = "root";
    String password = "root";
    Connection connection = DriverManager.getConnection(url, user, password);
 
    // 创建statement对象
    Statement statement = connection.createStatement();
 
    /**
     * 执行SQL,获取结果集
     */
    String sql = "select * from test01";
    ResultSet result = statement.executeQuery(sql);
 
    // 遍历结果集
    while (result.next()) {
      String name = result.getString("name");
      int id = result.getInt("id");
      System.out.println(name + "\t" + id);
    }
 
    /**
     * 关闭链接,释放资源
     */
    result.close();
    statement.close();
    connection.close();
  }
}

防止SQL注入改用prepareStatement

package com.boya.emp.jdbcTest;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
 * SQL注入,使用prepareStatement对象进行预编译
 * @author Admin
 *
 */
public class Test002 {
 
  public static void main(String[] args) throws Exception {
 
    /**
     * 加载驱动
     */
    Class.forName("com.mysql.jdbc.Driver");
 
    /**
     * 创建链接
     */
    String url = "jdbc:mysql://localhost:3306/testjdbc";
    String user = "root";
    String password = "root";
    Connection connection = DriverManager.getConnection(url, user, password);
 
    // 写SQL 
    String sql = "select * from test01 where id = ?";
    //创建statement对象,预编译
    PreparedStatement statement = connection.prepareStatement(sql);
    //设置参数
    statement.setInt(1, 2);
    /**
     * 执行SQL,获取结果集
     */
    ResultSet result = statement.executeQuery();
 
    // 遍历结果集
    while (result.next()) {
      String name = result.getString("name");
      int id = result.getInt("id");
      System.out.println(name + "\t" + id);
    }
 
    /**
     * 关闭链接,释放资源
     */
    result.close();
    statement.close();
    connection.close();
  }
}

进行代码优化,设置配置文件,工具类,实现增删该查

增加配置文件方便修改数据库,用户登录。。。

jdbc.properties(配置文件名)

driverName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testjdbc
userName=root
password=root

注意写配置文件时中间不可以有空格,引号之类的

工具类:增强了代码的复用性

package com.baidu.emp.utils;
 
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
 
import org.junit.Test;
 
 
 
public class JdbcUtils {
 
  static String driverClassName;
  static String url;
  static String user;
  static String password;
 
  static {
    // 创建配置文件对象
    Properties properties = new Properties();
    // 加载配置文件输入流
    InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
    // 重新加载配置文件
    try {
      properties.load(inputStream);
      // 获取配置文件的值
      driverClassName = properties.getProperty("driverName");
      url = properties.getProperty("url");
      user = properties.getProperty("userName");
      password = properties.getProperty("password");
      Class.forName(driverClassName);
 
    } catch (Exception e) {
      // 抛出异常
      throw new RuntimeException(e);
    }
  }
 
  /**
   * 获取连接
   */
  @Test
  public void testName() throws Exception {
     
    System.out.println(driverClassName);
  }
  public static Connection getConnection() {
    Connection connection = null;
    try {
      connection = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
      // 抛出异常
      throw new RuntimeException(e);
    }
    return connection;
  }
 
  /**
   * 关闭链接,释放资源
   */
  public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) {
 
    try {
      if (resultSet != null) {
        resultSet.close();
      }
      resultSet = null; // 垃圾及时清除
      //注意,不要弄成死循环
      close(connection, statement);
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }
 
  }
 
  /**
   * 增删改释放资源
   */
  public static void close(Connection connection, PreparedStatement statement) {
 
    try {
      if (connection != null) {
        connection.close();
      }
         
      connection = null;
      if (statement != null) {
        statement.close();
      }
      statement = null;
 
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }
 
  }
 
}

测试增删改查:

package com.baidu.emp.jdbcTest;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
 
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
 
import com.baidu.emp.utils.JdbcUtils;
 
/**
 * 使用jdbcUtils连接数据库进行增删改查
 * 
 * @author Admin
 *
 */
public class Test003 {
 
  // 初始化值
  Connection connection = null;
  PreparedStatement statement = null;
  ResultSet result = null;
 
  @Before
  public void start() throws Exception {
    // 创建链接
    connection = JdbcUtils.getConnection();
    System.out.println("创建链接");
  }
 
  @After
  public void end() throws Exception {
    // 关闭链接
    JdbcUtils.close(connection, statement, result);
    System.out.println("关闭链接");
  }
   
  /**
   *插入数据
   * @throws Exception
   */
  @Test
  public void add() throws Exception {
    String sql = "insert into test01 values(null,?)";
    statement = connection.prepareStatement(sql);
    statement.setString(1, "李四");
    int result = statement.executeUpdate();
    if (result!=0) {
      System.out.println("添加成功");
    }
  }
  /**
   * 删除数据
   * @throws Exception
   */
  @Test
  public void del() throws Exception {
    String sql = "delete from test01 where id =?";
    statement = connection.prepareStatement(sql);
    statement.setInt(1,3);
    int result = statement.executeUpdate();
    if (result!=0) {
      System.out.println("删除成功");
    }
  }
  /**
   * 修改数据
   * @throws Exception
   */
  @Test
  public void change() throws Exception {
    String sql = "update test01 set name = ? where id = ?";
    statement = connection.prepareStatement(sql);
    statement.setString(1, "张飞");
    statement.setInt(2, 2);
    int result = statement.executeUpdate();
    if (result!=0) {
      System.out.println("修改成功");
    }
  }
   
  /**
   * 查询全部数据
   * @throws Exception
   */
  @Test
  public void findAll() throws Exception {
    String sql = "select id , name from test01";
    statement = connection.prepareStatement(sql);
    result = statement.executeQuery();
    if (result.next()) {
      System.out.println("查询成功");
    }
  }
   
  /**
   * 条件查询数据
   * @throws Exception
   */
  @Test
  public void findOne() throws Exception {
    String sql = "select id , name from test01 where id = ?";
    statement = connection.prepareStatement(sql);
    statement.setInt(1, 2);
    result = statement.executeQuery();
    if (result.next()) {
      System.out.println("查询成功");
    }
  }
 
}

以上就是相关知识以及相关代码,感谢大家对脚本之家的支持。

相关文章

  • 七段小代码解决Java程序常见的崩溃场景

    七段小代码解决Java程序常见的崩溃场景

    这篇文章主要为大家介绍了七段小代码解决Java程序常见的崩溃场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • java控制台输入示例分享

    java控制台输入示例分享

    这篇文章主要介绍了java控制台输入示例分享,需要的朋友可以参考下
    2014-03-03
  • Java基于ShardingSphere实现分库分表的实例详解

    Java基于ShardingSphere实现分库分表的实例详解

    ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目, 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景,对ShardingSphere分库分表相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • Java中的Optional类详细解读

    Java中的Optional类详细解读

    这篇文章主要介绍了Java中的Optional类详细解读,Optional是Java中的一个类,它的作用是用于解决空指针异常的问题,它提供了一些有用的方法,可以帮助我们避免显式进行空值检测,需要的朋友可以参考下
    2023-08-08
  • Java Map双列集合使代码更高效

    Java Map双列集合使代码更高效

    这篇文章主要介绍了Java Map双列集合使用,使你的代码更高效,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • swagger2和knife4j的详细使用教程(入门级)

    swagger2和knife4j的详细使用教程(入门级)

    最近项目中用到了Swagger2和knife4j作为接口文档,所以下面这篇文章主要给大家介绍了关于swagger2和knife4j的详细使用教程,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • c语言来实现贪心算法之装箱问题

    c语言来实现贪心算法之装箱问题

    这篇文章主要介绍了c语言来实现贪心算法之装箱问题,需要的朋友可以参考下
    2015-03-03
  • Java String不可变性实现原理解析

    Java String不可变性实现原理解析

    这篇文章主要介绍了Java String不可变性实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java设计模式之装饰模式详解

    Java设计模式之装饰模式详解

    这篇文章主要介绍了Java设计模式之装饰模式详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • 详解Java的线程状态

    详解Java的线程状态

    本文主要为大家详细介绍一下Java的线程状态,文中的示例代码讲解详细,对我们学习有一定的帮助,感兴趣的小伙伴可以跟随小编学习一下
    2022-11-11

最新评论