返璞归真--重拾JDBC

Jdbc简介:

JDBC 就是使用Java语言操作关系型数据库的一套API.全称是Java DataBase Connectivity.就是java数据库连接.

Jdbc使用 

1.注册驱动

Class.forName("com.mysql.jdbc.Driver");

2.获取数据库连接

Connection conn = DriverManager.getConnection(url, username, password);

 3.编写sql语句

String sql =  “update…” ;

4.获取执行sql语句的对象

Statement stmt = conn.createStatement();

5.执行sql语句,并接收结果

stmt.executeUpdate(sql);  

6.处理结果

7.释放资源

示例:

public class JdbcTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动.  用到了java的spi机制.
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取数据库的连接.
        String url = "jdbc:mysql://127.0.0.1/db8";
        String userName = "root";
        String password = "1234";
        //3.获取数据库连接.
        Connection connection = DriverManager.getConnection(url, userName, password);
        //4.编写sql语句.
        String sql = "UPDATE account SET money=1000 WHERE id=1";
        //5.获取执行sql语句的对象
        Statement statement = connection.createStatement();
        //6.执行sql语句,并接受结果.
        int result = statement.executeUpdate(sql);
        //7.处理结果.
        System.out.println(result);
        //8.释放资源.
        statement.close();
        connection.close();
    }
}

Connection(连接对象)

作用1:获取执行的sql语句的对象.

  • 获取普通的执行sql语句对象(存在注入攻击)

    • Statement createStatement();

  • 获取预编译的执行sql语句对象(安全)

    • PreparedStatement prepareStatement(sql);

  • 获取执行存储过程的对象

    • CallableStatement prepareCall(sql);

作用2:管理事务

  • 开启事务:setAutoCommit(boolean autoCommit):true为自动提交事务;false为手动提交事务

  • 提交事务:commit();

  • 回滚事务:rollback();

示例:

public class JdbcTranTest {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 2.获取数据库连接
        String url = "jdbc:mysql://127.0.0.1/db6?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url, username, password);

        // 3.编写sql语句
        String sql1 = "UPDATE account SET money=money+500 WHERE name='李四'";
        String sql2 = "UPDATE account SET money=money-500 WHERE name='张三'";

        // 4.获取执行sql语句的对象
        Statement stmt = conn.createStatement();

        try {
            //开启事务
            conn.setAutoCommit(false);

            //执行第一条sql语句
            int result1 = stmt.executeUpdate(sql1);
            System.out.println(result1);

            // System.out.println(2/0);   // 模拟异常

            //执行第二条sql语句
            int result2 = stmt.executeUpdate(sql2);
            System.out.println(result2);

            //如果到达此处,说明都执行成功了,则提交事务
            conn.commit();

        } catch (Exception e) {
            //如果进到catch,说明出问题了,则回滚事务
            conn.rollback();
            e.printStackTrace();
        }

        // 7.释放资源
        stmt.close();
        conn.close();
    }
}

Statement(执行者对象) 

作用:用于执行sql语句,并返回结果 

执行DML DDL语句

int  executeUpdate(sql);

  • 参数:要执行的sql语句

  • 返回值:影响的行数。

执行DQL语句

ResultSet  executeQuery(sql);

  • 参数:要执行的sql语句

  • 返回值:查询出的结果集

Result结果集对象

1.作用:用于封装查询出的数据结果

  • boolean next(); 判断是否还有数据

  • xxx getXxx(参数) 获取数据

    • xxx:数据类型;如:int getInt(参数) ; String getString(参数)

    • 参数

      • int:列的编号,从1开始

      • String:列的名称

示例

public class JdbcTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动.  用到了java的spi机制.
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取数据库的连接.
        String url = "jdbc:mysql://127.0.0.1/db8";
        String userName = "root";
        String password = "1234";
        //3.获取数据库连接.
        Connection connection = DriverManager.getConnection(url, userName, password);
        //4.编写sql语句.
//        String sql = "UPDATE account SET money=1000 WHERE id=1";
        String sql = "SELECT * FROM account";
        //5.获取执行sql语句的对象
        Statement statement = connection.createStatement();
        //6.执行sql语句,并接受结果.
//        int result = statement.executeUpdate(sql);
        ResultSet resultSet = statement.executeQuery(sql);
        // 6.处理结果集
        if (resultSet.next()) {
            //根据编号获取.
            System.out.println(resultSet.getInt(1) + "," + resultSet.getString(2));
            //根据列名获取(推荐)
            System.out.println(resultSet.getInt("id") + "," + resultSet.getString("name") + "," + resultSet.getInt("money"));
        }
        //7.处理结果.
//        System.out.println(result);
        //8.释放资源.
        statement.close();
        connection.close();
    }
}

PreparedStatement

1.作用:将sql语句进行预编译,可以避免sql注入攻击

2.使用步骤:sql语句中的参数,使用?占位。例如:

String sql = "select * from user where username = ? and password = ?"

 示例

 

public class PreparedStatementTest {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取数据库连接
        String url = "jdbc:mysql://127.0.0.1/db8?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url, username, password);
        String user = "zhangsan";
        String pwd = "123";
        String pwd2 = "hhh' or '1' = '1";
        // 3.编写sql语句,参数使用?占位符
        String sql = "SELECT * FROM tb_user WHERE username=? AND password=?";
        System.out.println(sql);
        PreparedStatement statement = conn.prepareStatement(sql);
        //给占位符赋值.
        statement.setString(1,user);
        statement.setString(2,pwd);
        //执行sql语句.
        ResultSet resultSet = statement.executeQuery();
        // 6.处理结果集
        if(resultSet.next()) {
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }

        // 7.释放资源
        resultSet.close();
        statement.close();
        conn.close();
    }
}

数据库连接池-Druid使用

连接步骤

1:导入jar包(maven项目导入对应依赖)

2:定义配置文件

3:加载配置文件

4:获取数据库连接池对象

5:获取连接

6:执行操作

 示例

 

public class DruidTest {
    public static void main(String[] args) throws Exception {
        //加载配置文件.
        InputStream inputStream = DruidTest.class.getClassLoader().getResourceAsStream("druid.properties");
        Properties properties = new Properties();
        properties.load(inputStream);

        //获取数据库连接对象.
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();

        //编写sql语句.
        String sql = "SELECT * FROM account";
        //获取预编译执行对象.
        PreparedStatement statement = connection.prepareStatement(sql);
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()) {
            System.out.println(resultSet.getInt("id") + "," + resultSet.getString("name") + "," + resultSet.getInt("money"));
        }
        //释放资源
        resultSet.close();
        statement.close();
        //注意:不是关闭连接,而是将连接归还连接池中
        connection.close();   
    }
}

以上就是简单的介绍了关于数据库连接的介绍.如有不足或不对的地方还希望大家多多指教.

2025年了,祝福虽然会迟到,但是那颗奔赴的心在路上.祝大家新年快乐.万事顺遂,追逐的路上一鹿平安.

如果大家喜欢我的分享的话.可以关注我的微信公众号

心有九月星辰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值