JDBC(2):核心类、接口以及实现简单连接

JDBC核心类、接口

重要包名:java.sql.* 和 javax.sql.*

Driver接口

  • 使用:表示java驱动程序接口,所有具体的数据库厂商要来实现此接口。
  • 重要方法:
  • 字段含义:
    URL语法: jdbc协议:数据库子协议://主机:端口/数据库
    user: 数据库的用户名
    password: 数据库用户密码

DriverManager类

  • 使用:驱动管理器类,用于管理所有注册的驱动程序
  • 重要方法:
    1. registerDriver(。driver) : 注册驱动类对象
    2. Connection getConnection(url,user,password); 获取连接对象

Connection接口

  • 使用:驱动管理器类,用于管理所有注册的驱动程序
  • 重要方法:
    1. Statement createStatement() : 创建Statement对象
    2. PreparedStatement prepareStatement(String sql) : 创建PreparedStatement对象
    3. CallableStatement prepareCall(Str
    4. ing sql) :创建CallableStatement对象

Statement接口

  • 使用:用于执行静态的sql语句
  • 重要方法:
    1. int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML)
    2. ResultSet executeQuery(String sql) :执行的静态的查询sql语句(DQL)

PreparedStatement接口

  • 使用:继承Statement接口,用于执行预编译的sql语句
  • 重要方法:
    1. int executeUpdate(String sql) : 执行预编译的更新sql语句(DDL,DML)
    2. ResultSet executeQuery(String sql) :执行预编译的的查询sql语句(DQL)

CallableStatement接口

  • 使用:继承Statement接口,用于执行存储过程的sql语句(call xxx)
  • 重要方法:
    1. ResultSet executeQuery() : 调用存储过程的方法

ResultSet接口

  • 使用:用于执行预编译的sql语句
  • 重要方法:
    1. boolean next() : 将光标移动到下一行
    2. getXX() : 获取列的值

简单连接

注册驱动

代码:Class.forName("com.mysql.jdbc.Driver");
解释: DriverManager类的registerDriver()方法的参数是java.sql.Driver,但java.sql.Driver是一个接口,实现类由mysql驱动来提供,mysql驱动中的java.sql.Driver接口的实现类为com.mysql.jdbc.Driver。那么注册驱动的代码如下:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
上面代码虽然可以注册驱动,但是出现硬编码(代码依赖mysql驱动jar包),如果将来想连接Oracle数据库,那么必须要修改代码的。并且其实这种注册驱动的方式是注册了两次驱动
JDBC中规定,驱动类在被加载时,需要自己“主动”把自己注册到DriverManger中。
mysql驱动包com.mysql.jdbc.Driver类中对此实现为:

package com.mysql.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;
// Referenced classes of package com.mysql.jdbc:
//            NonRegisteringDriver
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }
    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

com.mysql.jdbc.Driver类中的static块会创建本类对象,并注册到DriverManager中。这说明只要去加载com.mysql.jdbc.Driver类,那么就会执行这个static块,从而也就会把com.mysql.jdbc.Driver注册到DriverManager中,所以可以把注册驱动类的代码修改为加载驱动类。

获取连接

方式一(不推荐):

    @Test
    public void testConnection() throws SQLException {
        // 1.创建驱动程序类对象
        Driver driver = new com.mysql.jdbc.Driver(); //不推荐直接new,多次new浪费内存
        String url = "jdbc:mysql://127.0.0.1:3306/address";
        String user = "root"; 
        String password = "password";
        Properties prop = new Properties();
        prop.setProperty("user", user);
        prop.setProperty("password", password);
        // 2.连接数据库
        Connection conn = (Connection) driver.connect(url, prop);
        // 3.输出连接信息
        System.out.println(conn);      
    }

方式二(推荐):

    @Test
    public void testConnection2() throws SQLException {
        String driver = "com.mysql.jdbc.Driver";
         String url = "jdbc:mysql://127.0.0.1:3306/address";    
         String username = "root";   
         String password = "password";
         Connection conn = null;
         try {
             Class.forName(driver);
             // 注册驱动程序(可以注册多个驱动程序)
             // DriverManager.registerDriver(driver);//有了Class.forName这里可以省略
             conn = (Connection) DriverManager.getConnection(url, username, password);
             System.out.println(conn);
         } catch (Exception e) {
             e.printStackTrace();
         }

    } 

结果:

com.mysql.jdbc.JDBC4Connection@39477a84

参考:

http://www.importnew.com/16799.html
http://blog.csdn.net/xieyuooo/article/details/8502585
http://blog.csdn.net/u014726937/article/details/52836305
http://blog.csdn.net/qq_26676207/article/details/52953664#t1
http://www.cnblogs.com/gaojing/archive/2012/03/23/2413638.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值