JDBC的写法和实例(Java)

目录

①加载数据库驱动类

②获取数据库连接的connection

③获取操作sql语句的Statement对象

1、八股部分:

 获取链接部分:

      删除链接部分:

二、查询:

2、调用executeQuery(sql)的结果集的ResultSet对象并完成遍历

方法1:

方法2:

ResultsetMetaData——获取Result结果集中列相关的信息

getColumnCount()——获取列数

getColumnName()——获取列名

三、增删改

1、executeUpdate(SQL)

例1:增(插入一条记录)

例2:改(更新一条记录)

例3:删除一条记录:

 2、Callable Statement ---------这是用来调用存储过程的对象

①首先在数据库中写入过程my_dept_ins

 四、基于以上结构的拆分:

函数1:获取链接:getSource

函数2:关闭资源:closeSource

函数3:读取并存储(查询语句)

函数4:增删改函数

 类Dept:

 测试函数:把List>类型转成List Dept类型

 补充:map的函数

例1:从数据库中读出数据



删除链接部分:面试必考:手写一个JDBC

①加载数据库驱动类

 Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库的驱动类
     

②获取数据库连接的connection

    Connection conn = DriverManager
                .getConnection("jdbc:oracle:thin:@192.168.77.100:1521:helowin"
                ,"scott","123456");//获取链接

③获取操作sql语句的Statement对象

Statement stat= conn.createStatement();

④如果是查询语句,调用executeQuery(sql)的结果集的ResultSet对象并完成遍历

⑤关闭ResultSet,Statement,connection对象

1、八股部分:

 获取链接部分:

       Connection conn = null;//表示数据库的连接
        Statement stat= null;//用来操作SQL语句的操作
        ResultSet reset =null;//用来接收查询语句返回的结果集
        Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库的驱动类
        conn = DriverManager
                .getConnection("jdbc:oracle:thin:@192.168.77.100:1521:helowin"
                ,"scott","123456");//获取数据库的连接
        stat=conn.createStatement(); //获取statement对象

      删除链接部分:

        if (reset != null) {
            reset.close();
        }
        if (stat != null) {
            stat.close();
        }
        if (conn != null) {
            conn.close();
        }

二、查询:executeQuery(sql)的结果集

方法1:

 String sql="select t.*, t.rowid from DEPT t";//sql保存的是查表语句             
 reset=stat.executeQuery(sql);//执行查询并返回结果集reset

       while (reset.next()){

            int deptno =reset.getInt("DEPTNO");
            String dname =reset.getString("DNAME");
            String loc =reset.getString("LOC");
            System.out.println(deptno + "-------" + dname + "-------" + loc);
}

方法2:

ResultsetMetaData——获取Result结果集中列相关的信息
getColumnCount()——获取列数
getColumnName()——获取列名
 String sql="select t.*, t.rowid from DEPT t";//sql保存的是查表语句
reset = stat.executeQuery(sql);//执行查询并返回结果集
rsmd = reset.getMetaData();
        int columnCount = rsmd.getColumnCount();
        while (reset.next()) {
            for (int i = 1; i <= columnCount; i++) {
                System.out.print(rsmd.getColumnName(i) + 
                            "=" + resset.getObject(i));
            }
            System.out.println();
            }

三、增删改

1、executeUpdate(SQL)

可以进行增删改数组,返回int型的值,表示成功增删改的条数 

例1:增(插入一条记录)

  String sql = "insert into dept values('61','运维部','南京')";
        int i =stat.executeUpdate(sql);
        System.out.println("成功编辑了"+i+"条记录");

例2:改(更新一条记录)

 String sql = "update  dept set dname='测试部',loc='上海'where deptno='53'";
        int i =stat.executeUpdate(sql);
        System.out.println("成功编辑了"+i+"条记录");

例3:删除一条记录:

String sql = "delete from dept where deptno='53'";
        int i =stat.executeUpdate(sql);
        System.out.println("成功编辑了"+i+"条记录");

 2、Callable Statement ---------这是用来调用存储过程的对象

我们使用Connection对象调用prepareCall("{call存储过程名(?,?……)}")

来获取该对象

我们可以使用该对象.SetXxx(序号.参数值)来传参

我们可以使用该对象.execute()来结束对存储过程的调用

①首先在数据库中写入过程my_dept_ins
create or replace procedure my_dept_ins(
v_deptno number,
v_dname dept.dname%type,
v_loc dept.loc%type)
is
begin
  insert into dept values(v_deptno,v_dname,v_loc);
commit;
end;
  
 
  stat = conn.prepareCall("{call my_dept_ins(?,?,?)}");
         stat.setInt(1,62);
        stat.setString(2,"行政部");
        stat.setString(3,"北京");
        stat.execute();       

 四、基于以上结构的拆分:

能够增删改查的函数

函数1:获取链接:getSource

    private  static void getSource() throws SQLException, ClassNotFoundException {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn=         
         DriverManager.getConnection("jdbc:oracle:thin:@192.168.77.100:1521:helowin"
            ,"scott","123456");
        stat=conn.createStatement();
    }

 

函数2:关闭资源:closeSource

    private static void closeSource() throws SQLException {
        if(rest !=null)

        {
            rest.close();
        }
        if(stat !=null)

        {
            stat.close();
        }
        if(conn !=null)

        {
            conn.close();
        }
    }
    

函数3:读取并存储(查询语句)

 public static List<Map<String, Object>> queryBySQL(String sql) throws SQLException, ClassNotFoundException {//输入String类型的sql语句
        List<Map<String, Object>> list = new ArrayList<>();
        getSource();//获取链接
        rest = stat.executeQuery(sql);
        ResultSetMetaData rsmd = rest.getMetaData();
        int columnCount = rsmd.getColumnCount();

        while (rest.next()) {
            Map<String, Object> map = new HashMap<>();
            for (int i = 1; i <= columnCount ; i++) {
                String columnName = rsmd.getColumnName(i);
                Object columnValue = rest.getObject(i);
                map.put(columnName, columnValue);
            }
            list.add(map);
        }closeSource();
return list;

 

函数4:增删改函数

public static int updateBySql(String sql) throws SQLException, ClassNotFoundException {
        getSource();
        int res=0;
        res =stat.executeUpdate(sql);
        closeSource();
        return "成功编辑了"+res+"条记录";

    }

 类Dept:

import java.math.BigDecimal;

public class Dept {
    BigDecimal deptno;
    String dname;
    String loc;

    public Dept(BigDecimal deptno, String dname, String loc) {
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }

    public Dept() {
    }

    public BigDecimal getDeptno() {
        return deptno;
    }

    public void setDeptno(BigDecimal deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + '\'' +
                ", loc='" + loc + '\'' +
                '}';
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }
}

 测试函数:把List<Map<String,Object>>类型转成List Dept类型

public static void main(String[] args) throws SQLException, ClassNotFoundException {
               String sql ="select * from Dept";
                List<Map<String, Object>> list =JDBCUtill.queryBySQL(sql);
               List<Dept> depts =new ArrayList<>();
               for(Map<String,Object> map:list){
                   BigDecimal deptno =(BigDecimal) map.get("DEPTNO");//转类型
                   String dname=(String) map.get("DNAME");
                   String loc=(String) map.get("LOC");
                   Dept dept =new Dept(deptno,dname,loc);
                   depts.add(dept);
               }
               for (Dept d:depts){
                   System.out.println(d);
               }

               }




    }

list里面存的元素是一个个小map,遍历这个List并且通过函数把它读到新的这个以Dept集合为元素的新的list中,然后,再遍历,(注意这边要重写dept的方法) 

 补充:map的函数

Map类的实例名.get(键名) 可以得到键值

例1:从数据库中读出数据
import javax.xml.transform.Result;
import java.sql.*;
import javax.xml.transform.Result;
import java.sql.*;

public class Test1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection conn = null;//表示数据库的连接
        Statement stat= null;//用来操作SQL语句的操作
        ResultSet reset =null;//用来接收查询语句返回的结果集

        Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库的驱动类
       
        //获取数据库的连接
        conn = DriverManager
                .getConnection("jdbc:oracle:thin:@192.168.77.100:1521:helowin"
                ,"scott","123456");//驱动管家 scott 数据库的管理员 123456密码


        stat=conn.createStatement(); //获取statement对象

        String sql="select t.*, t.rowid from DEPT t";//sql保存的是查表语句

        reset=stat.executeQuery(sql);//执行查询并返回结果集reset

        while (reset.next()){

            int deptno =reset.getInt("DEPTNO");
            String dname =reset.getString("DNAME");
            String loc =reset.getString("LOC");
            System.out.println(deptno + "-------" + dname + "-------" + loc);}
        if (reset != null) {
            reset.close();
        }
        if (stat != null) {
            stat.close();
        }
        if (conn != null) {
            conn.close();
        }

    }
}

    }
}
import javax.xml.transform.Result;
import java.sql.*;

public class Test1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Connection conn = null;//表示数据库的连接
        Statement stat = null;//用来操作SQL语句的操作
        ResultSet resset = null;//用来接收查询语句返回的结果集
        ResultSetMetaData rsmd = null;

        Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库的驱动类
        //获取数据库的连接
        conn = DriverManager
                .getConnection("jdbc:oracle:thin:@192.168.77.100:1521:helowin"
                        , "scott", "123456");//驱动管家
        //获取statement对象
        stat = conn.createStatement();
        String sql = "select t.*, t.rowid from DEPT t";
        resset = stat.executeQuery(sql);//执行查询并返回结果集
        rsmd = resset.getMetaData();
        int columnCount = rsmd.getColumnCount();
        while (resset.next()) {
            for (int i = 1; i <= columnCount; i++) {
                System.out.print(rsmd.getColumnName(i) + "=" + resset.getObject(i));
            }
            System.out.println();
            }
    
        if(resset !=null)

    {
        resset.close();
    }
        if(stat !=null)

    {
        stat.close();
    }
        if(conn !=null)

    {
        conn.close();
    }


}
}

删除记录

import javax.xml.transform.Result;
import java.sql.*;

public class Test6 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        Connection conn = null;//表示数据库的连接
        Statement stat = null;//用来操作SQL语句的操作
        Class.forName("oracle.jdbc.driver.OracleDriver");//加载oracle数据库的驱动类
        //获取数据库的连接
        conn = DriverManager
                .getConnection("jdbc:oracle:thin:@192.168.77.100:1521:helowin"
                        , "scott", "123456");//驱动管家
        //获取statement对象
        stat = conn.createStatement();
        String sql = "delete from dept where deptno='53'";
        int i =stat.executeUpdate(sql);
        System.out.println("成功编辑了"+i+"条记录");
        if(stat !=null)

        {
            stat.close();
        }
        if(conn !=null)

        {
            conn.close();
        }


    }
}

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值