jdbc的使用(一)--入门案例、Statement 对象

本文详细介绍了JDBC入门,包括驱动注册、数据库连接、Statement对象的使用,以及Junit测试框架的基础应用。讲解了如何执行SQL更新语句、查询语句,并解析ResultSet,同时强调了资源关闭和异常处理的重要性。此外,还提到了JDBC4.0后自动加载驱动的特性,以及代码规范化的方法。
摘要由CSDN通过智能技术生成

1. JDBC入门案例一

导入驱动jar包
在这里插入图片描述
注册驱动
java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());
得到Connection对象
java.sql.DriverManager.getConnection(url,username,password);

username:数据库的用户名
password:数据库的密码
url:连接数据库的“网址” -hlocalhost

url详细解释
url是用来找到要连接数据库“网址”,就好比你要浏览器中查找百度时,也需要提供一个url。例如:http://www.baidu.com
下面是mysql的url:
jdbc:mysql://localhost:3306/mydb1

JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。

  • 第一部分是jdbc,这是固定的;
  • 第二部分是数据库厂商名称,那么连接mysql数据库,第二部分当然是mysql了;
  • 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb1)组成。

下面是获取连接的语句:
Connection con =
DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”,”root”,”1234”);

url参数
还可以在url中提供参数(了解):
jdbc:mysql://localhost:3306/mydb1?useUnicode=true&characterEncoding=UTF8

  • useUnicode参数指定这个连接数据库的过程中,是否使用Unicode字节集;true为使用,false不使用。它通常和characterEncoding参数配合使用
  • characherEncoding参数指定连接数据库的过程中,使用的字节集编码为UTF-8编码;
  • 注意,mysql中指定UTF-8编码是给出的是UTF8,而不是UTF-8。

案例代码

public class JdbcDemo01 {
    public static void main(String[] args) throws SQLException {
        //jdbc入门程序
        //1、导驱动jar包
        //2、注册驱动(java.sql.)
        DriverManager.registerDriver(new Driver());
        //3、获得连接
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/vip03test01", "root", "123456");
        System.out.println(con);//com.mysql.jdbc.JDBC4Connection@446cdf90
    }
}

2. JDBC入门案例二

当驱动类加载进内存的时候,就执行static里面的内容
注册驱动的另一种操作方法!
先来看com.mysql.jdbc.Driver类的源码

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
	static {
		try {
			java.sql.DriverManager.registerDriver(new Driver());
		} catch (SQLException E) {
			throw new RuntimeException("Can't register driver!");
		}
	}
……
}

所以注册驱动只需要把com.mysql.jdbc.Driver.class加载进内存就可以了!!!
那怎么加载呢?
执行下面这句话即可!!!
Class.forName(“com.mysql.jdbc.Driver”) 反射的知识,加载某个类!!!

案例代码

public class JdbcDemo02 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //有加载驱动类嘛?
        Class.forName("com.mysql.jdbc.Driver");//反射的方式加载驱动类
        //注册驱动可以不用自己做了,数据库厂商已经帮你做好了
        //3、获得连接
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/vip03test01", "root", "123456");
        System.out.println(con);//com.mysql.jdbc.JDBC4Connection@446cdf90
    }
}

上面的驱动注册已经很简单了,但其实还有更简单的办法!
更简单的办法就是不用手动注册驱动!而是采用自动加载的方法!
在jdbc4.0之后,每个驱动jar包中,在META-INF/services目录下提供了一个名为java.sql.Driver的文件。文件的内容就是该接口的实现类名称!该名称会被自动扫描,扫描的类会被加载!
也就是说,jdbc4.0之后,mysql的驱动已经不需要手动注册了,我们只需要直接从驱动管理类获取就可以了!!!

// (前面的注册驱动或者加载驱动可以省略!!)通过驱动管理得到连接对象

Connection con = DriverManager.getConnection(
		"jdbc:mysql://localhost:3306/mydb1?", "root", "1234");
System.out.println(con);

3. Statement 对象

获取Statement对象

获取Statement
Statement是用来向数据库发送要执行的SQL语句的!–sql语句发送器

	Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1?", "root", "1234");
    Statement stmt = con.createStatement(); //通过Connection对象来获取Statement对象

发送更新语句(更新:增、删、改)

String sql = “insert into student value(5,’zhangSan’);
int m = stmt.executeUpdate(sql);

其中int类型的返回值表示执行这条SQL语句所影响的行数,我们知道,对insert来说,最后只能影响一行,而update和delete可能会影响0~n行。
如果SQL语句执行失败,那么executeUpdate()会抛出一个SQLException。

用Statement查询并解析结果ResultSet

String sql = “select * from student”;
ResultSet rs = stmt.executeQuery(sql);

executeQuery()方法返回的是ResultSet,ResultSet封装了查询结果。

读取结果集中的数据

ResultSet就是一张二维的表格,它内部有一个“行光标”,光标默认的位置在“第一行上方”,我们可以调用rs对象的next()方法把“行光标”向下移动一行,当第一次调用next()方法时,“行光标”就到了第一行记录的位置,这时就可以使用ResultSet提供的getXXX(int col)方法来获取指定列的数据了。

rs.next();//光标移动到第一行
rs.getInt(1);//获取第一行第一列的数据

当使用rs.getInt(1)方法时,你必须可以肯定第1列的数据类型就是int类型,如果你不能肯定,那么最好使用rs.getObject(1)。

在ResultSet类中提供了一系列的getXXX()方法,比较常用的方法有:

  • Object getObject(int col)
  • String getString(int col)
  • int getInt(int col)
  • double getDouble(int col)

关闭

与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。
rs.close();//关闭结果集
stmt.close();//关闭Statement对象
con.close();//关闭连接

案例代码

public class JdbcDemo05 {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        //获得连接
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/vip03test01", "root", "123456");
        System.out.println(con);//com.mysql.jdbc.JDBC4Connection@446cdf90

        //执行查询操作
        //得到statement
        Statement stmt = con.createStatement();
        //发送sql语句
        ResultSet resultSet = stmt.executeQuery("select * from stu");
        //如何遍历结果集
        //提供了一套api遍历
        while(resultSet.next()){
            int sid = resultSet.getInt(1);//索引不是从0开始,是从1开始
//            int sid = resultSet.getInt("sid");
            String sname = resultSet.getString(2);
            int age = resultSet.getInt(3);
            String gender = resultSet.getString(4);
            System.out.println(sid+"\t"+sname+"\t"+age+"\t"+gender);
        }

        resultSet.close();
        stmt.close();
        con.close();
    }
}

4. Junit的简单使用(测试框架)

首先来介绍Junit的简单使用!
Junit是一个测试框架,可以快速的测试、运行程序,而不用总是写main方法。
使用Junit测试框架的时候,需要导入Jar包。
在这里插入图片描述

(有的IDE开发工具已经集成了,如果集成了就不用导)

在方法上方添加注解@Test

    @Test
    public void method2(){
        System.out.println("method2");
    }

5. JDBC的代码规范化

实际上就是加入异常处理
1、把连接获取功能放到一个单独的方法中
2、对数据库的增、删、改、查操作加入异常处理

package com.ruandy.jdbc01;

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JdbcDemo07 {

    //没有异常处理的代码
    @Test
    public void method()throws Exception{
        //获得连接
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/vip03test01", "root", "123456");
        System.out.println(con);//com.mysql.jdbc.JDBC4Connection@446cdf90

        //执行查询操作
        //得到statement
        Statement stmt = con.createStatement();
        //发送sql语句
        ResultSet resultSet = stmt.executeQuery("select * from stu");
        //如何遍历结果集
        //提供了一套api遍历
        while(resultSet.next()){
            int sid = resultSet.getInt(1);//索引不是从0开始,是从1开始
//            int sid = resultSet.getInt("sid");
            String sname = resultSet.getString(2);
            int age = resultSet.getInt(3);
            String gender = resultSet.getString(4);
            System.out.println(sid+"\t"+sname+"\t"+age+"\t"+gender);
        }

        resultSet.close();
        stmt.close();
        con.close();
    }

    //有异常处理的代码
    //规范化的代码
    @Test
    public void method2(){
        Connection connection = null;
        Statement stmt = null;
        ResultSet rst = null;
        try{
            //可能出现异常的代码
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/vip03test0a",
                    "root", "123456");
            stmt = connection.createStatement();
            rst = stmt.executeQuery("select * from stu");
            while(rst.next()){
                int sid = rst.getInt(1);//索引不是从0开始,是从1开始
                String sname = rst.getString(2);
                int age = rst.getInt(3);
                String gender = rst.getString(4);
                System.out.println(sid+"\t"+sname+"\t"+age+"\t"+gender);
            }
        }catch (Exception e){
            //对异常的捕获和处理
            throw new RuntimeException(e);
        }finally {
            //释放资源
            //释放资源的时候也可能出现异常
            try{
                if(rst!=null) rst.close();
                if(stmt!=null) stmt.close();
                if(connection!=null) connection.close();
            }catch (Exception e){
                throw new RuntimeException(e);
            }
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值