欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jdbc连接数据库实例详解

程序员文章站 2024-02-17 23:30:40
jdbc简介 jdbc全称为:java data base connectivity (java数据库连接),可以为多种数据库提供填统一的访问。jdbc是sun开发的一套...

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("查询成功");
    }
  }
 
}

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