JDBC入门操作

JDBC使用步骤:

create database jdbctest;
use jdbctest;
create table user(
id int unsigned auto_increment key,
username varchar(20),
password varchar(20),
name varchar(20)
);
insert into user values(null, 'aaa', '111', '张三'),
(null, 'bbb', '222', '李四'),
(null, 'ccc', '333', '王五');

1、 加载驱动
DriverManager.registerDriver(new Driver());
2、 获得连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "wxhxx520");
3、 创建执行SQL语句的对象,并执行SQL
        a) 创建sql语句,获得statement对象
                String sql = “select * from user”;
                Statement stmt = conn.createStatement();
        b) 执行sql语句
                ResultSet resultSet = stmt.executeQuery(sql);
        while(resultSet.next()){
          //              int id = resultSet.getInt(1);
          //              String username = resultSet.getString(2);
        //                String password = resultSet.getString(3);
        //                String name = resultSet.getString(4);
                            int id = resultSet.getInt("id");
                            String username = resultSet.getString("username");
                            String password = resultSet.getString("password");
                            String name = resultSet.getString("name");
                            System.out.println(id + "   " + username + ":" + password + "   " + name);


            }
4、 释放资源
            resultSet.close();
            statement.close();
            conn.close();
完整程序:
package com.luyue.jdbc;


import com.mysql.jdbc.Driver;
import org.junit.jupiter.api.Test;


import java.sql.*;


public class JDBC_Demo {
    @Test
    public void demo(){
        try {
            //1、加载驱动
            DriverManager.registerDriver(new Driver());
            //2、获得连接
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "wxhxx520");
            //3、创建执行SQL语句的对象,并且执行SQL
                //3.1创建sql语句,获得Statement对象
            String sql = "select * from user";
            Statement statement = conn.createStatement();
                //3.2执行sql语句
            ResultSet resultSet = statement.executeQuery(sql);
            while(resultSet.next()){
//                int id = resultSet.getInt(1);
//                String username = resultSet.getString(2);
//                String password = resultSet.getString(3);
//                String name = resultSet.getString(4);
                int id = resultSet.getInt("id");
                String username = resultSet.getString("username");
                String password = resultSet.getString("password");
                String name = resultSet.getString("name");
                System.out.println(id + "   " + username + ":" + password + "   " + name);


            }
            //4、释放资源
            resultSet.close();
            statement.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

JDBC 的API介绍:
DriverManager:驱动管理类
        a) 注册驱动
        DriverManager.registerDriver(new Driver());//这种方法注册的驱动实质上注册了两次
        源码分析:
         
        静态代码块中调用了DriverManager已经注册了,而静态代码块在类加载时执行,而我们的代码中又手动的调用了一次,实质上注册两次。


          另一种调用方法(实际开发中的注册方法):
Class.forName(“com.mysql.jdbc.Driver”);//加载Driver类,则静态代码块执行,则驱动注册。
        b) 获得连接 
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "wxhxx520");
url写法:jdbc:mysql://localhost:3306/jdbctest
其中jdbc:协议
mysql:子协议
localhost:主机名
3306:端口号
连接本机数据库的另一种写法:
“jdbc:mysql:// /jdbctest”//中间部分省略掉
Connection:连接对象
        a) 创建用来执行sql语句的对象
            Statement  statement = conn.createStatement();  //可以用来执行sql语句,但是有sql注入漏洞存在
            prepareStatement  ps= conn .prepareStatement(String sql)//预编译sql语句,解决sql注入漏洞
            CallableStatement  cs = conn.prepareCall(String sql)//执行sql中存储过程
        b) 进行事务的管理
            setAutoCommit(boolean autoCommit) //设置事务是否自动提交
            commit()//事务提交

            rollback()//事务回滚

Statement:执行sql语句

        a) 执行sql语句
            boolean  execute(String sql)//执行sql,执行select返回true,否则false
            ResultSet executeQuery(String sql)//执行sql中的select语句
      int executeUpdate(String sql) //执行sql中的insert/update/delete语句
        b) 执行批处理操作:
            addBatch(String sql)//将sql语句添加到批处理
            int[] executeBatch()//执行批处理
            clearBatch()//清除批处理
ResultSet:结果集,对select查询结果的一个封装
        a) 常用方法:
            boolean next() //移动光标,一开始的光标在真正数据之前,用来判断下一行是否有数据,如果有则指向下一行
            针对不同类型数据使用getxxx()方法获取数据
             
            Object getObject(String columnLabel)  //通用方法
Eg:
CREATE TABLE goods(
id int unsigned auto_increment key comment '商品编号',
name varchar(20) unique not null comment '商品名称',
price float(7,1) not null default 0.0 comment '商品价格',
desp varchar(100) not null comment '商品描述'
);


insert goods() values(null, '手机', 2000.0, '黑色,存储32G'),
(null, '冰箱', 1500.0, '银色,对开门'),
(null, '洗衣机', 3000.0, '滚动'),
(null, '空调', 4000, '变频空调');


public class JDBC_Demo2_11 {
    //查询价格在3500以下的商品信息,并在控制台打印输出。
    @Test
    public void demo(){
        //1、注册驱动
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获得连接
            Connection conn = DriverManager.getConnection("jdbc:mysql:///jdbctest", "root", "wxhxx520");
            //3、获得statement对象,并执行sql语句
            String sql = "select * from goods where price<=3500";
            Statement statement = conn.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while(resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                float price = resultSet.getFloat("price");
                String desp = resultSet.getString("desp");
                System.out.println(id + "      " + name + "    " + price + "   " + desp);
            }
            //4、释放连接
            resultSet.close();
            statement.close();
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}


JDBC资源释放:
Jdbc程序运行完后,要释放程序在运行过程中创建的那些与数据库交互的对象,通常是:
ResultSet, Statement, Connection
特别是Connection,它是非常稀有的资源,用完后要马上释放,若不及时释放,极易导致系统宕机。使用原则:晚创建,早释放
其中为确保释放的代码能够正常运行,资源释放代码要放在finally语句中
Eg:依旧是上述代码,改变之后的标准释放过程:
public class JDBC_Demo2_11 {
    //查询价格在3500以下的商品信息,并在控制台打印输出。
    @Test
    public void demo(){
        Connection conn = null;
        Statement statement = null;
        ResultSet resultSet = null;
        //1、注册驱动
        try {
            //1、注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2、获得连接
            conn = DriverManager.getConnection("jdbc:mysql:///jdbctest", "root", "wxhxx520");
            //3、获得statement对象,并执行sql语句
            String sql = "select * from goods where price<=3500";
            statement = conn.createStatement();
            resultSet = statement.executeQuery(sql);
            while(resultSet.next()){
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                float price = resultSet.getFloat("price");
                String desp = resultSet.getString("desp");
                System.out.println(id + "      " + name + "    " + price + "   " + desp);
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //4、释放连接
            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 (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                conn = null//多手动设置一次null的原因是为了垃圾回收机制能够更早的回收;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值