JDBC基础

1.注册驱动,用来让虚拟机和数据库进行交流,jdbc中会有一个池,里面存放所有的驱动,但是默认池中是空的,所以需要先注册一个关于oracle的驱动放置到池中,然后才能得到这个驱动来完成虚拟机与数据库的交流,注册驱动有三种方法:

a,在oracle.jdbc.driver.OracleDriver
 静态代码块 能完成注册驱动

Class.forName("oracle.jdbc.driver.OracleDriver");
b,在这个类中的构造器中也完成了注册驱动的代码
  所以也可以调用构造器完成注册驱动

new oracle.jdbc.driver.OracleDriver();
 c,会从一个Properties
   key是jdbc.driver
    拿到value后 通过value的值注册驱动
System.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");

我对这三种方式的理解是第三种是基层的方式,即第一种第二种都是在内部调用了这种方式,将关于oracle的驱动成功放到了jdbc放置驱动的池中
2.获取Connection
当第一步成功注册了驱动,就可以成功从池中获取这个驱动,并写入你的数据库的url和账号密码,与数据库建立连接。
url的形式为:协议:子协议:别名:@ip:端口号(port):数据库名
我的数据库是oracle的,数据库名为orcl,端口为1521,所以我的url为jdbc:oracle:thin:@localhost:1521:orcl,具体方式为下

String url ="jdbc:oracle:thin:@localhost:1521:orcl";
String user ="user";
String password ="password";
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", user, password);

可以使用System.out.println(conn);来测试连接是否成功,只要连接对象部位空就代表数据库连接成功了
3.获得Statement对象,用来执行sql语句
Statement对象分为Statement,PrepareStatement, CallableStatement。目前我只学到了前两种,所以也只会记录前两种的用法。
其中Statement对象直接创建,然后直接执行sql语句
而PrepareStatement是一种支持缓冲的statement对象,需要先创建sql语句,将想要变换的属性或列名设为?,然后设置每个?,最后执行sql语句
形式如下

     //获取普通statement对象
     Statement sta =conn.createStatement();
     //建立String形的sql语句
      String sql ="insert into emp1(id,last_name) values(101,'Tom')";
      //执行sql语句,执行后会返回一个布尔类型的值,提示是否执行成功了
      boolean flag =sta.execute(sql);

     //对于prapareStatement要先建立sql语句
     String sql ="insert into emp1(id,last_name) values(?,?)";
      //获取PrepareStatement对象
      PreparedStatement prepareStatement = conn.prepareStatement(sql);
      //设置sql语句中的?值,来得到我们想要的效果,对于?的设置从开始,且要与数据库中表的要求格式相符
      prepareStatement.setInt(1, 999);
      prepareStatement.setString(2, "Jack");
      //执行sql语句,注意不需要在execute中添加参数,因为在建立PreparedStatement时已经将sql语句缓存到了对象中。
      prepareStatement.execute();

PreparedStatement:
* 优点:大批量同构语句速度快
* 1.预处理sql(可变的sql)
* 使用?号代替值,然后通过set添加数据,从而实现所想要的sql语句
* 2.批处理sql
* oracle数据库支持批处理
* mySQL不支持批处理,使用批处理与逐行插入效果一样

4.如果有返回结果集,对结果集进行处理,比如select时

String sql = "select id,last_name,start_date from s_emp";
       ResultSet rs = stat.executeQuery(sql);
       while(rs.next()){
           int id = rs.getInt("id");
           String name = rs.getString("last_name");
           try {
            Date date = rs.getDate("start_date");
               SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
               //format方法需要util.date类型的参数
               //由于sql.date是util.date的子类,所以可以直接传入到format方法中
               simpleDateFormat.format(date);
               //通过下标取值,从1开始
//         int id = rs.getInt(1);
//         String name = rs.getString(2);
//         Date date = rs.getDate(3);
               System.out.println(id+"   "+name+"   "+date);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       }

5.关闭资源
sta.close();
conn.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值