• JDBC


     

    一:JDBC编程六步骤:

    1. 注册驱动

    2. 获取连接(表示JVM进程和数据库进程通道打开了,这属于进程之间的通信,重量级,使用完一定要关闭)

    3. 获取数据库操作对象(专门执行sql语句的对象)

    4. 执行SQL语句

    5. 处理查询结果集

    6. 释放资源(千万要记得开启后,一定要关闭)

     

    二:注册驱动,获取连接,获取数据库操作对象:

    注册驱动:有两种方式:

    法1:

    import java.sql.Dirver;
    import java.sql.DirverManager;
    import java.sql.SQLException;
    ​
    Driver dirver=new com.mysql.jdbc.Driver();//多态,夫类型引用指向子类型的对象,这里的driver不是java当中的,而是mysql实现类包中的,所以需要写上包名来区分
    DriverManager.registerDriver(dirver);//这是注册驱动的方法,必须要死记住,后面的dirver是mysql当中的方法类dirver,java.sql包中的dirver是一个接口,而不能直接new一个。

    法2:十分常用

    //类加载机制,当加载类的时候,静态代码块会执行
    Class.forName("com.mysql.jdbc.Driver");
    //为什么这种方法常用:因为括号里面是个字符串,字符串可以写到文件当中

    注意:需要抛出异常,放在try,catch块当中

     

    获取连接:getconnection,需要抛出异常

    String url="jdbc:mysql://localhost:3306/hanxiao";//固定格式,localhost可以写成127.0.0.1,后面的hanxiao时数据库的名字,通信协议+Ip地址+服务器上的端口+服务器上某个资源名
    String user="root";
    String password="";
    Connection conn=DirverManager.getConnection(url,user,passowrd);

     

    获取数据库操作对象:获取statement对象:

    //statement专门执行SQL语句的
    Statement stmt=conn.createStatement();//create statement对象
    //专门执行DML语句
    String sql="insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
    ​
    //返回值是“影响数据库中的记录条数”,只能进行
    int count=stmt.executeUpdate(sql);

    重点:只能进行增删改,若想进行查询操作,看接下来的笔记

     

    释放资源:

    //为了保证资源一定释放,在finally语句快中关闭
    //并且遵循资源从小到大依次关闭
    //分别对其try,catch
    try{
        if(stmt!=null){
            stmt.close();
        }
    }catch(SQLexception e){
        e.printStackTrace();
    }
    try{
        if(conn!=null){
            conn.close();
        }
    }catch(SQLexception e){
        e.printStackTrace();
    }

     

    上述写成的代码:

    package cc.bb.aa;
    import java.sql.*;
    ​
    ​
    public class TwoTest {
        public static void main(String[] args) {
            
            Connection conn = null;
            Statement stmt = null;
            
            try {
                //1.注册
                DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
                String url="jdbc:mysql://localhost:3306/hanxiao";
                String user="root";
                String password="";
                //2.获取连接
                conn=DriverManager.getConnection(url,user,password);
                
                //statement专门执行SQL语句的
                //3.获取数据库对象
                stmt=conn.createStatement();//create statement对象
    //专门执行DML语句
                String sql="insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
    ​
                //返回值是“影响数据库中的记录条数”,只能执行增删该,不能进行查询数据
                int count=stmt.executeUpdate(sql);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {//这里关闭数据,释放资源
                try{
                    if(stmt!=null){
                        stmt.close();
                    }
                }catch(SQLException e){
                    e.printStackTrace();
                }
                try{
                    if(conn!=null){
                        conn.close();
                    }
                }catch(SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }

     

     

    三:处理查询结果集:

    Connection conn=null;
    Statement stmt=null;
    ResultSet rs=null;//这是一个接口,到时候查询的对象就是rs,而且最后finally释放对象的时候,从下往上依次释放
    try{
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
      conn=DriverManager.getConnection("jdbc:mysql//localhost:3306/hanxiao","root","");
        //3.获取数据库操作对象
        stmt=conn.createStatement();
        //4.执行sql语句
        String sql="select empno,ename,sal from emp";
        //注意,这里变化了
        //int excuyeUpdate(insert/delete/update);//返回int
        //ResultSet excuteQuery(sql);//返回值是ResultSet
        rs=stmt.excuteQuery(sql);
        
        
        
        //处理查询结果集:这些都是可以是使用的
         //使用next方法来控制下标的位置,是按照行来的
        //使用getstring()方法来获取相对应的列
        //使用while方法来循环遍历
        while(rs.next()){
            String empno=rs.getString(1/empno);//1代表第一列
            String ename=rs.getString(2/ename);//2代表第二列
            String sal=rs.getString(3/sal);//3代表第二列
            
        }
    }

     

  • 相关阅读:
    Linux Shell系列教程之(十七) Shell文件包含
    Linux Shell系列教程之(十六) Shell输入输出重定向
    Linux Shell系列教程之(十五) Shell函数简介
    Linux Shell系列教程之(十四) Shell Select教程
    Linux Shell系列教程之(十三)Shell分支语句case … esac教程
    Linux Shell系列教程之(十二)Shell until循环
    Linux Shell系列教程
    算法系列:链表
    C++ 系列:Boost Thread 编程指南
    C++:多线程002
  • 原文地址:https://www.cnblogs.com/instead-everyone/p/13619883.html
Copyright © 2020-2023  润新知