JDBC基本操作

JDBC

JDBC驱动程序

数据库连接信息配置

URL:连接数据库系统资源描述符

DriverClass: 数据库系统驱动类名称

UserName:登录数据库系统用户名称

PassWord:登录数据库系统用户密码

Others: 其他信息、

步骤

  1. 加载驱动 Class.forName(“com.mysql.jdbc.Driver”);
  2. 连接数据库 DriverManager.getConnection( ); 返回Connection对象
  3. 执行sql对象 调用creatStatement() 返回statement对象
  4. 调用executeQuery()
public static void main(String[] args) throws ClassNotFoundException, SQLException {
    //1.加载驱动   //固定写法加载驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.用户信息和url
    String url = "jdbc:mysql://localhost:3306/company?useUnicode=true&characterEncoding=utf8&useSSL=true";
    String name = "root";
    String password = "123456";
    //3.连接成功,数据对象   Connection代表数据库
    Connection connection = DriverManager.getConnection(url, name, password);
    //4.执行sql对象
    Statement statement = connection.createStatement();
    //5.执行sql的对象  去  执行sql 可能存在结果,查看返回结果
    String  sql = "select * from employee";
    ResultSet resultSet = statement.executeQuery(sql); // 返回的结果集,结果集中封装了查询的全部资源
    while (resultSet.next()){
        System.out.println("id="+resultSet.getObject("id"));
        System.out.println("name="+resultSet.getObject("name"));
        System.out.println("-----------------------------------------------------");
    }
    //6.释放资源
    resultSet.close();
    statement.close();
    connection.close();

}

创建步骤

  1. 加载驱动 Class.forName(“com.mysql.jdbc.Driver”);
  2. 连接数据库 DriverManager.getConnection( ); 返回Connection对象
  3. 执行sql对象 调用creatStatement() 返回statement对象
  4. 调用executeQuery()

具体步骤

  1. 创建 dbconf.properties文件

    添加数据库属性配置信息

    jdbc_url = jdbc:mysql://localhost:3306/(要操作的数据库名)?useUnicode=true&characterEncoding=utf8&useSSL=true  # 本机链接
    jdbc_driver = com.mysql.jdbc.Driver     # 加载驱动
    jdbc_UserName = root
    jdbc_PassWord = 123456
    
  2. 创建Env类获取dbconf.properties文件中的属性并设为静态常量

  3. 创建数据库管理类,统一管理规范

    getConnection()

    执行sql语句

    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(sql);
    

查询结果的处理

java.sql.ResultSet接口是jdbcAPI 中唯一用来封装查询结果记录行的组件

遍历结果集中数据

  1. boolean next()方法 //往往做为遍历循环条件

  2. getXxx(int index);getXxx(String colum)

 Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
                System.out.println(resultSet.getObject("id"));
                System.out.println(resultSet.getObject("numbers"));
                System.out.println(resultSet.getObject("Gender"));
                System.out.println(resultSet.getObject("Birth"));
                System.out.println(resultSet.getObject("phone"));
                System.out.println(resultSet.getObject("apartment"));
            }
  1. 封装结果集 (使用集合封装)

    while (resultSet.next()) {
        Student student = new Student();
        String id = resultSet.getString("id");
        student.setId(id);
        student.setNumber(resultSet.getString("numbers"));
        student.setName(resultSet.getString("name"));
        student.setBirth(resultSet.getDate("birth"));
        students.add(student);//将对象添加到集合中
    }
    
  2. List<Student> students = new ClassInfoAndStudentsDao().queryStudentList();
    for (Student student : students){
        System.out.println(student.getId()+"\t"+student.getNumber()+"\t"+student.getName()+"\t"+
                student.getGender()+"\t"+student.getBirth()+"\t"+student.getPhone()+"\t");
    }
    

使用map封装

Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
     Map map= new hashMap();
     map.put("id",resultse.getString("id"));
     list.add(map);//将map封装到List集合中
                
            }

数据库连接池

  1. 添加jar包

  2. 设置 private static ComboPooledDataSource c3p0;

  3. 设置数据源相关属性

     private  static ComboPooledDataSource c3p0;
    
        /**
         * 创建CreateComboPoolDataSource数据源
         *
         */
        private static void  createComboPoolDataSource(){
            if(c3p0 == null){
                c3p0 = new ComboPooledDataSource();
                //设置数据源相关属性
                try {
                    c3p0.setDriverClass(Configuration.JDB_DRIVER);
                    c3p0.setUser(Configuration.JDB_USERNAME);
                    c3p0.setPassword(Configuration.JDB_PASSWORD);
                    c3p0.setJdbcUrl(Configuration.JDB_URL);
                    c3p0.setCheckoutTimeout(3000);
                } catch (PropertyVetoException e) {
                    e.printStackTrace();
                }
            }
        }
        /**
         * 获得连接的通用方法
         *
         * @return {@link Connection}
         */
        public static Connection  getConnection(){
            Connection connection = null;
            createComboPoolDataSource(); //创建数据源
            try {
                connection = c3p0.getConnection(); // 由数据源获取一个打开的连接
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            return connection;
        }
    

    PreparedStatement 是Statement 接口的扩展

    PreparedStatement 更高效

    提供预编译功能,提高数据库访问效率

    支持使用占位符设置sql语句参数

    此接口对象由Connection调用相关方法创建

    设置参数

    • setXxx(int index , Obeject value)

查询分页

由于数据庞大,全部加载到内存比较耗时,效率低下

  1. SQL语句实现分页

    1. LIMIT用法
    LIMIT出现在查询语句的最后,可以使用一个参数或两个参数来限制取出的数据。其中第一个参数代表偏移量:offset(可选参数),第二个参数代表取出的数据条数:rows。
    
    单参数用法
    当指定一个参数时,默认省略了偏移量,即偏移量为0,从第一行数据开始取,一共取rows条。
    
    /* 查询前5条数据 */
    SELECT * FROM Student LIMIT 5;
    复制
    双参数用法
    当指定两个参数时,需要注意偏移量的取值是从0开始的,此时可以有两种写法:
    
    /* 查询第1-10条数据 */
    SELECT * FROM Student LIMIT 0,10;
    /* 查询第11-20条数据 */
    SELECT * FROM Student LIMIT 10 OFFSET 10;
    复制
    2. 分页公式
    总页数计算
    在进行分页之前,我们需要先根据数据总量来得出总页数,这需要用到COUNT函数和向上取整函数CEIL,SQL如下:
    /* 获得数据总条数 */
    SELECT COUNT(*) FROM Student;
    /* 假设每页显示10条,则直接进行除法运算,然后向上取整 */
    SELECT CEIL(COUNT(*) / 10) AS pageTotal FROM Student;
    复制
    核心信息
    当前页:pageNumber
    每页数据量:pageSize
    在实际操作中,我们能够得到的信息有当前所在页以及每页的数据量,同时要注意一下是否超出了最大页数。以每页10条为例,则前三页的数据应为:
    
    第1页:第1~10条,SQL写法:LIMIT 0,10
    第2页:第11~20条,SQL写法:LIMIT 10,10
    第3页:第21~30条,SQL写法:LIMIT 20,10
    据此我们可以总结出,LIMIT所需要的两个参数计算公式如下:
    offset:(pageNumber - 1) * pageSize
    rows:pageSize
    

    分页代码实现

    public  Map  findSalaryPaging(int  pageNum, int  pageSize){
    //计算复合查询条件的总记录数rowcount
    //计算分页总数pageSum
    //当前页记录行数rows
    //返回客户端需要的数据(rowCount,pageSum,rows)
    }
    
  2. 使用map封装,查询信息

JDBC调用存储过程

jdbc调用存储过程实现

优点:执行效率高,提高访问速度

缺点:跟换数据库系统时存储过程不兼容

JDBC API 中 CallableStatement接口是唯一处理数据库系统存储过程的通用组件

在这里插入图片描述

//定义存储过程名称及参数
String  procName ={call pro_hello(?)};



//注册一个输出类型
call.regidterOutParameter(1Types.varchar);

在这里插入图片描述

批处理

在这里插入图片描述

Statement接口批处理方法

void addBatch(String sql) throws  SQLException

int[]  executeBatch()  throws SQLException
    
oid  clearCatch() throws SQLException

void addBatch()  throws SQLException;  

JDBC事务处理

Connection事物处理相关方法

void  setAutoCommit(boolean  autoCommit)  //传入true则自动提交      false关闭自动提交
    
void  commit()  //提交事务
    
void  rollback()   //撤销  出现异常   异常处理中回滚数据
    
SavepointsetSavepoint(String name)  //保存点
    
void  setTransaction(int level) //设置事务与其他事务的隔离级别
    
void rollback(Savepoint  savepoint)
    

Timestamp time = new Times(new Date().getTime()); // 获取系统时间

事务的隔离级别:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小郑在努力ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值