jdbc

what?

jdbc: (Java Database Connectivity),java数据库连接。
:它是一套用于执行sql语句的java API;应用程序可以通过这套API连接到关系型数据库,并使用sql语句完成对数据库的查询,新增,更新和删除等操作。
在这里插入图片描述
:应用程序使用JDBC访问特定的数据库的时候,需要使用不同的数据库驱动进行连接,由于数据库厂商提供的数据库驱动是不同,所以,在提供了访问数据库的API的同时,还需要封装与各种数据库服务器通信的细节。这样才能建立真正的连接。

JDBC的具体过程

: JDBC驱动管理器: 负责注册特定的JDBC驱动器,主要同java.sql.DriverManager类来实现。
: JDBC驱动器API:主要接口是java.sql.Driver。
: JDBC驱动器:实现了JDBC驱动器API,负责与特定的数据库进行连接,以及处理通信细节。

Driver接口

Driver接口时JDBC驱动器必须要实现的接口,该接口提供给数据库厂商使用,需要将jar包加载到项目中。

DriverManager

DriverMananger类用于加载JDBC并且创建于数据库的连接。
方法:
registerDriver(Driver driver) 注册给定的JDBC驱动程序
Connection getConnection(String url,String user,String pwd); 用于建立于数据库的连接,并且返回一个Connection的对象。

Connection接口

Connection接口代表java程序和数据库的连接,获得改连接对象之后才可以访问数据库,并操作数据库。
接口中的方法
: getMetaData() 用于返回数据库中的元数据的DatabaseMetaData对象
: createStatement() 用于创建一个statement对象来将sql语句发送到数据库
: prepareStatement(String sql) 用于创建一个PrepareStatement对象来将参数化的SQL语句发送到数据库
: prepareCall(String sql) 用于表示CallableStatement对象来调用数据库存储过程

Statement接口

Statement接口用于执行静态的SQL的语句,并返回一个结果对象(ResultSet),Statement接口对象可以通过Connection中的createStatement()方法获得,该对象将静态的sql的语句发送到数据库中编译执行,然后返回数据库的处理结果。
方法:
: boolean execute(String sql) 用于执行sql语句,返回一个boolean类型的值,如果返回为true,表示能查到结果,可以通过Statement中的getResultSet()方法得到结果集。
: int executeUpdate(String sql) 用于执行SQL中的insert,update,delete的语句,返回一个int类型的值,表示数据库中受SQL语句影响的语句条数。
: ResultSet executeQuery(String sql) 用于执行SQL中的select的语句,返回一个表示查询到结果的ResultSet对象。

PrepareStatement

prepareStatement是statement的子接口,用于执行预编译的SQL语句,它的扩展时带有参数SQL语句的执行操作,该接口中的SQL语句可以使用?来代替参数,然后使用setXxx()方法为SQL语句的参数赋值。
其中的方法如下:
在这里插入图片描述
: 其中的:setDate()方法可以设置日期内容,Date的类型时java.sql.Date
: 为参数设置值;
在这里插入图片描述

  preparedStatement.setString(1,"34");
  preparedStatement.setString(2,"bo");

ResulstSet接口

用于保存JDBC执行查询时返回的结果集,该结果集封装在一个逻辑表格中,在ResultSet内部有一个指向表格数据行的游标(指针),开始时,游标指向第一行之前,可通过next()方法将游标移动到下一行,通常使用next()方法作为while循环的条件来迭代ResultSet结果集。
方法:
: String getString( int columnIndex) 用于获取指定字段的String类型的值,参数columnIndex代表字段的索引
: String getString(String columnName) 用于获取指定字段的String类型的值,参数columnName代表字段的名称
: String getInt(int columnIndex) 同上
: String getInt(String columnName) 同上
: Date getDate(int columnIndex) 同上
: Date getDate(String columnName) 同上
: boolean next() 向下移动一个游标
: boolean absolute(int Index) 定位到指定的游标
: afterLast()
: beforeFirst()
: previous() 将游标向前移动一个
: last()

实现JDBC

:关闭原则,释放资源: 先出现的后关闭;
: 关闭资源时:将关闭语句放在finally中,是为了无论是否发生异常,它都会执行。
: 注册数据库驱动器,使用Class.forName(“com.mysql.jdbc.Driver”) ,而不用DriverManager中的 registerDriver()方法,是因为这个方法注册了两次。

/*
* 加载并注册数据库驱动
* 通过DriverManager获取数据库连接
* 通过Connection对象获取Statement对象
* 使用Statement执行SQL语句
* 操作ResultSet结果集
* 关闭连接,释放资源
* */
public class jdbc {
    public static void main(String[] args) throws SQLException {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            //1加载并注册数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2通过DriverManager获取数据库连接
            String url = "jdbc:mysql://localhost:3306/yun6";
            String userName = "root";
            String passWord = "root";
             connection = DriverManager.getConnection(url, userName, passWord);
            //通过Connection对象获取Statement对象
             statement = connection.createStatement();
            //使用Statement执行SQL语句
            String sql = "select * from user";
             resultSet = statement.executeQuery(sql);
            //操作ResultSet结果集
            System.out.println("id | name" );
            while (resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println(id + "|" + name);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //关闭连接,释放资源
            if(connection != null){
                connection.close();
            }
            if(statement != null){
                statement.close();
            }
            if(resultSet != null){
                resultSet.close();
            }
        }
    }
}

PrepareStatement对象的使用

/*
加载并注册数据库驱动
* 通过DriverManager获取数据库连接
* 通过Connection对象获取prepardStatement对象,指定要执行的sql的语句,为sql语句中的参数赋值。
* 使用preaprdStatement执行SQL语句
* 操作ResultSet结果集
* 关闭连接,释放资源* */
public class jdbc1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //加载并注册数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        //通过DriverManager获取数据库连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3360/yun6", "root", "root");
        //通过Connection对象获取prepardStatement对象,指定要执行的sql的语句
        String sql = "insert into user (id,name) values (?.?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //为sql语句中的参数赋值。
        preparedStatement.setString(1,"34");
        preparedStatement.setString(2,"biao");
        //使用preaprdStatement执行SQL语句
        int count = preparedStatement.executeUpdate();
        System.out.println("受影响的行数" + count);
        //关闭连接,释放资源
        connection.close();
        preparedStatement.close();
    }
}

ResultSet对象

public class jdbc2 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/yun6";
        String name = "root";
        String passWord = "root";
        Connection connection = DriverManager.getConnection(url, name, passWord);
        String  sql = "select * from user";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet resultSet = preparedStatement.executeQuery();

        //对ResultSet结果集进行定位
        resultSet.absolute(2);
        System.out.print("第二行数据中name属性下的值");
        System.out.println(resultSet.getString("name"));

        resultSet.first();//将它移动到第一行的前面
        resultSet.next();//移动到第一行
        System.out.print("第一行数据中name属性下的值");
        System.out.println(resultSet.getString("name"));

        resultSet.last();//将光标移动到最后一行
        resultSet.previous();//将光标移动一行
        System.out.print("第一行数据中name属性下的值");
        System.out.println(resultSet.getString("name"));


    }
}

Date的使用

:注意:Date()使用的时java.sql.Date
java.sql.Date 是子类 java.util.Date是父类
两种Date之间的转换:
java.util.Date date = new java.sql.Date
java.sql.Date date = new java.sql.Date(new java.util.Date.getString()).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值