JDBC初级实现

JDBC接口的介绍
1.使用JDBC接口技术,操作mysql数据库,将用户名都获取到Java程序中
   JDBC是一套接口,接口不能直接使用,要通过它的实现类,这个实现类由mysql数据库厂商提供(驱动Jar包)
   
2.若想数据库与java程序建立连接,首先必须先将mysql的驱动jar包导入工程.lib中
JDBC四个核心对象:
*       1.DriverManager:用于注册驱动(java程序与mysql数据格式统一就可以通信)
                   注册方式:
                            //DriverManager.registerDriver(new Driver());   
                                    首先该注册方式有两个问题:第一,注册了两次;第二,过分依赖了mysql的驱动类,扩展性不高

                             //解决注册2次的问题,那么做到只让Driver类加载一次即可
                              1.new Driver();
                              2.Class.forname("全类名");我们可以将全类名抽取到配置文件中,动态地修改数据库连接操作,而不用修改Java代码
                        
*       2.Connection:表示java程序与数据库之间创建的连接,只有拿到Connection才能操作数据库
*       3.Statement:执行sql语句的对象
*       4.ResultSet:结果集或一张虚拟表
JDBC访问数据库的步骤:
*       1.由DriverManager注册驱动程序
*       2.创建连接对象Connection
*       3.由客户端发送sql语句给服务器执行,sql语句封装成statement对象
*       4.查询到的结果集封装成ResultSet对象
*       5.在客户端可以从ResultSet中取出数据
*       6.释放资源,关闭连接对象
* statement接口的常用api:
*   boolean execute(String sql)
*   此方法可以执行任意sql语句,返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,
*   且有返回结果时返回true,其它语句都返回false;
*
*   int executeUpdate(String sql)
*   根据执行的DML(Insert,update,delete)语句,返回受影响的行数
*
*   ResultSet executeQuery(String sql)
*   根据查询语句返回结果集,只能执行select语句

数据记录的增删改查:
增删改:内存中的数据保存到硬盘,输出流
查:硬盘上的数据读取到内存中,输入流

具体实现代码如下:

/*Statement的API介绍
        1.boolean execute(String sql)
   此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;
   true:表示sql是查询操作,返回结果集,statement.getResultSet();
   false:表示sql是DML操作,返回受影响的行数,statement.getUpdateCount();
        2. int executeUpdate(String sql)
   根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数
        3. ResultSet executeQuery(String sql)
   根据查询语句返回结果集,只能执行SELECT语句
    > 注意:在MySQL中,只要不是查询就是修改。
    > executeUpdate:用于执行增删改
    > executeQuery:用于执行查询
 */

import org.junit.Test;

import java.sql.*;

public class Demo03 {
    //    1.boolean execute(String sql)
    @Test
    public void execute() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql:///JDBC", "root", "root");
        Statement statement = connection.createStatement();
//        String sql = "INSERT INTO user VALUES (NULL ,'zhaoliu',321)";
//        String sql = "UPDATE user set password = '123456' where username = 'zhaoliu'";
        String sql = "select * from user ;";
        boolean execute = statement.execute(sql);
        if(execute){
            //true:select查询语句
            ResultSet resultSet = statement.getResultSet();
            while (resultSet.next()){
                String username = resultSet.getString("username");
                System.out.println(username);
            }
            resultSet.close();
        }else{
            //false:增删改语句
            int i = statement.getUpdateCount();
            System.out.println(i);
        }
        //6.释放资源
        statement.close();
        connection.close();
    }

    //    2. int executeUpdate(String sql)
    @Test
    public void executeUpdateTest() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql:///JDBC", "root", "root");
        Statement statement = connection.createStatement();
//        String sql = "INSERT INTO user VALUES (NULL ,'zhaoliu',321)";
        String sql = "UPDATE user set password = '12345678' where username = 'zhaoliu'";
        int i = statement.executeUpdate(sql);
        System.out.println(i);
        //6.释放资源
        statement.close();
        connection.close();
    }

//      3. ResultSet executeQuery(String sql)
    @Test
    public void executeQueryTest() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql:///JDBC", "root", "root");
        Statement statement = connection.createStatement();
        String sql = "SELECT *from user ";
        ResultSet resultSet = statement.executeQuery(sql);
        //        5.获取数据
        while (resultSet.next()){
            String username = resultSet.getString("username");
            System.out.println(username);
        }
        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}
ResultSet接口:
结果集的遍历,数据的获取
1.A ResultSet对象维护指向其当前数据行的光标。最初,光标位于第一行之前
2.next方法将光标移动到下一行,如果有数据返回true,如果没有数据返回false
3.因此可以在while循环中使用循环来遍历结果集
while(resultSet.next()){
    获取光标所指向的当前行的数据记录
}
4.我们可以通过getXXX(name|index)
  XXX:对应字段的java中 的数据类型
  name:列名
  index:列索引
import org.junit.Test;

import java.sql.*;

public class Demo04 {
    public static void main(String[] args)  {
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql:///JDBC", "root", "root");
            statement = connection.createStatement();

            String sql = "select *from user";
            resultSet = statement.executeQuery(sql);

            while(resultSet.next()){
                //getXXX(name|index)
                int id = resultSet.getInt("id");
                String username = resultSet.getString("username");
                String password = resultSet.getString("password");

                //indx: java 0基 sql 1基
                int id1 = resultSet.getInt(1);
                String username1 = resultSet.getString(2);
                String password1 = resultSet.getString(3);

                System.out.println(id+"--------"+id1);
                System.out.println(username+"---------"+username1);
                System.out.println(password+"---------"+password1);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

                resultSet = null;//避免内存泄漏
            }

            if(statement!=null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }

                statement = null;//避免内存泄漏
            }

            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                connection = null;//避免内存泄漏
            }
        }
    }
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值