zoukankan      html  css  js  c++  java
  • JDBC的操作步骤

    JDBC的操作步骤

    一、什么是JDBC

    JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成。 其实,JDBC就是一套规范(接口),让各大服务器厂商自己去实现这个规范(实现接口),从而可以使得java编写的程序可以去访问。JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

    img

    二、常用的API

    • Statement接口:

      执行静态SQL语句并返回它所生成结果.

      int executeUpdate(String sql): 执行DDL/DML语句. 若当前SQL是DDL语句,则返回0. 若当前SQL是DML语句,则返回受影响的行数.

      ResultSet executeQuery(String sql):执行DQL语句,返回结果集.

      close():释放资源

    • Connection接口

      Statement createStatement():创建一个静态的语句对象.

      PreparedStatement prepareStatement(String sql):创建一个预编译语句对象. 此时参数sql:表示带有占位符(?)的SQL语句的模板.

      close():释放资源

    • PreparedStatement接口

      是Statemen接口的子接口,表示预编译的 SQL 语句的对象.

      void setXxx(int parameterIndex,Xxx value):设置第几个占位符的真正参数值.

      int executeUpdate():执行DDL/DML语句. 注意:没有参数 若当前SQL是DDL语句,则返回0. 若当前SQL是DML语句,则返回受影响的行数.

      ResultSet executeQuery():执行DQL语句,返回结果集.

      close():释放资源

    • ResultSet接口

      执行SQL语句会返回一个结果集,开始光标位于第一行的前,调用next方法会返回一个boolean类型,判断下一行是否还有结果集并且光标会想下一行移动。

      boolean next():判断当前光标是否能向下移动,如果能向下移动返回true,并同时将光标移动到下一行.

      Xxx getXxx(int columnIndex):取出当前光标所在行的第columnIndex列的数据(columnIndex从1开始算).

      Xxx getXxx(String columnName):取出当前光标所在行的列名为columnName列的数据,columnName可以是别名.

      close():释放资源

      Xxx表示的是数据类型

    三、怎么用JDBC

    有五个铁定的步骤,一个一个来说:

    1.加载注册驱动

    先加载驱动包,驱动包就是服务器厂商实现了JDBC接口的一个jar包,比如mysql的驱动包。先build path ,mysql的jar包。用java加载注册驱动代码:

    Class.forName("驱动类名称");
    

    一些数据库的驱动类名称:

    mysql: com.mysql.jdbc.Driver

    oracle: oracle.jdbc.driver.OracleDriver

    DB2: com.ibm.db2.jcc.DB2Driver

    加载过程就是 把驱动类这一份字节码加载进JVM,会立刻执行类中的静态代码块,而在这些类中的静态代码块就是在注册驱动。

    Java6开始,JDBC4.0有一个新特性,无需加载注册驱动。不提倡,因为JavaWeb也是要手动加载

    2.获取连接对象

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

    url是也是各个数据库不相同:

    mysql的是 jdbc:mysql://主机名:3306/数据库

    username和password是数据库的账号和密码

    3.获取语句对象

    Statement st = conn.createStatement();
    PreparedStatement ps = conn.prepareStatement(sql);
    

    4.执行SQL语句

    在数据库管理系统上执行完sql语句返回结果,DML语句会返回影响的行数,DDL语句不返回,DQL会返回一个结果集

    st.executeUpdate(sql);//DML,DDL
    ResultSet rs = execumentQuery();//DQL
    

    对于DQL语句要进行处理结果集

    while(rs.next){//TODO}
    

    5.释放资源

    正确关闭资源:

    public static void close(Connection conn, Statement st, ResultSet rs){
        try {
            if(rs != null){
                rs.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(st != null){
                    st.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    if(conn != null){
                        conn.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
    
                }
            }
        }
    }
    

    四、JDBC的DML,DDL,DQL操作

    • 创建表

      public void testCreateTab() throws Exception {
          String sql = "CREATE TABLE s_student(id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) NOT NULL UNIQUE,age INT)";
          //1.记载注册驱动/
          Class.forName("com.mysql.jdbc.Driver");
          //2.获取连接对象
          Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", 
                                                        "root", "admin");
          //3.创建语句对象
          Statement st = conn.createStatement();
          //4.执行SQL语句
          st.executeUpdate(sql);
          //5.释放资源
          st.close();
          conn.close();
      }
      
    • 增删改

      public class DMLTest {
      	@Test   //向表中添加行数据
      	public void testInsert() throws Exception {
      		String sql = "INSERT INTO s_student(name,age) VALUES('西门吹雪',18),('王熙凤',19)";
      		//1.加载注册驱动
      		Class.forName("com.mysql.jdbc.Driver");
      		//2.获取连接对象
      		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
      		//3.获取语句对象
      		Statement st = conn.createStatement();
      		//4.执行sql语句
      		int ret = st.executeUpdate(sql);
      		System.out.println("受影响的行数"+ret);
      		//5.关闭资源
      		st.close();
      		conn.close();
      	}
      	@Test
      	public void testDelete() throws Exception {
      		String sql = "DELETE FROM s_student WHERE name = '西门吹雪'";
      		//1.记载注册驱动
      		Class.forName("com.mysql.jdbc.Driver");
      		//2获取连接对象
      		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
      		//3获取语句对象
      		Statement st = conn.createStatement();
      		//4.执行sql语句
      		st.executeUpdate(sql);
      		//5.释放资源
      		st.close();
      		conn.close();
      	}
      	@Test
      	public void testUpdate() throws Exception {
      		String sql = "UPDATE s_student SET age = 99 WHERE id = 3";
      		Class.forName("com.mysql.jdbc.Driver");
      		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
      		Statement st = conn.createStatement();
      		st.executeUpdate(sql);
      		st.close();
      		conn.close();
      	}
      }
      
    • 查询

      public class DQLTest {
      	@Test
      	public void testQuerySigle() throws Exception {
      		String sql = "SELECT * FROM s_student WHERE id = 1";
      		//加载驱动
      		Class.forName("com.mysql.jdbc.Driver");
      		//获取连接对象
      		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo", "root", "admin");
      		//获取语句对象
      		Statement st = conn.createStatement();
      		//执行sql语句
      		ResultSet rs = st.executeQuery(sql);
      		if(rs.next()){
      			long id = rs.getLong("id");
      			long age = rs.getLong("age");
      			String name = rs.getString("name");
      			System.out.println(id + "," + age +"," + name);
      		}
      		rs.close();
      		st.close();
      		conn.close();
      	}
      	
      	@Test
      	public void testAll() throws Exception {
      		String sql = "SELECT * FROM s_student";
      		Class.forName("com.mysql.jdbc.Driver");
      		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo","root","admin");
      		Statement st = conn.createStatement();
      		ResultSet rs = st.executeQuery(sql);
      		while(rs.next()){
      			String name = rs.getString("name");
      			long id = rs.getLong("id");
      			long age = rs.getLong("age");
      			System.out.println(name + "," + id +"," + age);
      		}
      		rs.close();
      		st.close();
      		conn.close();
      	}
      }
      

    五、总结

    JDBC的CUID操作就是严格按照上述步骤完成的,可以发现基本操作都很相同,也很容易理解。

  • 相关阅读:
    状态同步和帧同步
    SVN和Git的使用
    客户端知识点
    客户端性能优化
    H5游戏开发面试经验
    2.0 pomelo-treasure官方demo的使用
    1.0 pomelo环境的搭建和部署
    python 网络编程
    冒泡排序
    面向对象-反射和元类
  • 原文地址:https://www.cnblogs.com/tfper/p/9953629.html
Copyright © 2011-2022 走看看