JDBC 简介和基本使用

最近复习javaWeb相关的一些东西,今天看JDBC连接数据库的一些操作。回头来重新学习一次数据的东西。

1.什么是JDBC?

JDBC 全称是java database Connectivity 就是java数据库连接。

JDBC 连接数据库步骤:

1.导入jar包

2.加载驱动类:Class.forName("类名");

3.给出url,username,password

4.使用DriverManager 类得到Connection

在导入包后写出来代码:

try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/mydb3";
			String username = "root";
			String password = "123456";
			Connection con = DriverManager.getConnection(url,username,password);
			System.out.println("conn:"+con);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
正常情况下就可以获取到数据库的连接。

JDBC原理:

早期SUN公司为各大数据库厂商提供了一种数据库标准,给所有的数据库厂商来实现,从而达到让数据库连接统一起来的目的。这样从而有了JDBC这套接口标准。其他数据库厂商分别实现对不同的数据库的操作,从而方便用户的操作。(mysql、oralce等的驱动就是这套接口的实现)

Class.forName("com.mysql.jdbc.Driver");
这句话用来加载mysql数据库的驱动。(注册驱动类)
Connection con = DriverManager.getConnection(url,username,password);
这句话获取连接。上述两个语句实现了数据库的连接,但是上述两个语句没有相互的关系?

其实上述两个语句是有关系的:

在DriverManager 类中有个方法:registerDriver();

我们可以通过注册的方法来加载驱动(和上述的方式一样):

com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver()';
DrvierManager.registerDriver(driver);
Connection con = DriverManager.getConnection("","","");
这样我们就可以看到他们之前有了关系。那么为什么上述方式可以达到同样的效果呢?以为我们在Class.forName("com.mysql.jdbc.Driver");这个类的时候执行了一些静态代码块,静态代码块已经帮我们完成了注册(我们在com.mysql.jdbc.Driver这个类中发现)

 static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
可以看出上述代码完成了注册。其实其他实现了JDBC接口Driver的数据库的厂商都是这种做法。

注意:jdbc4.0后在每个驱动的jar包中,在META-INF目录下的services目录下提供了一个名为Driver的文件,文件的内容就是这个接口的实现。所以对于jdbc4.0以后的jar也可以不写Class.forName("com.mysql.jdbc.Driver");这句。
如图:

我们为了代码的兼容性,我们以后自己要是写代码,最好加上上述加载Driver驱动的代码。这样就可以获得连接Connection的连接。这个连接是JDBC的一个接口,我们获取到这个实现就可以做其他的数据库操作了。


jdbc协议

jdbc:厂商的名称:子协议(厂商自己规定)---> 如:jdbc:mysql://localhost:3306/mydb

对于mysql子协议的规定格式://主机:端口号/数据库名称。

有些数据库的URL后边还有一些其他的东西,是设置数据库连接的一些参数。


数据库的增删改

上面我们知道了数据库的连接,下面在了解一个Statement,这个类用来对数据库进行一些操作。

1.通过Connection 获取一个Statement对象

2.调用他的方法executeUpsate(String sql);这个方式可以执行数据库操作的DML、DDL、语句。

这样就完成了数据库的一次操作:

try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/mydb3";
			String username = "root";
			String password = "liuxiaolong";
			Connection con = DriverManager.getConnection(url,username,password);
			System.out.println("conn:"+con);
			Statement stmt = con.createStatement();
			String sql = "insert into teacher values('7','heihei','计算机科学技术','24')";
			int count = stmt.executeUpdate(sql);
			System.out.println("count:"+count);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
结果表示插入了一个行到数据库中:
count:1
stmt.executeUpdate(String sql); 这个方式可以执行insert,update,delete等sql语句。这样就可以完成增删改。

查询语句执行(查询道理上应该是返回一个数据的表,和数据库的表类似的一个东西。):

stmt.executeQuery(String);
String sql =  "select * from teacher”;

ResultSet rs = stmt.executeQuery(sql);

上述就可以完成我们一次查询,最后我们处理查询的结果。ResultSet提供了一些列的方法用来操作查询到的数据库表。如next(),方法用来让这个结果的值向下移动一行,一系列的getXxx();方法用来获取不同数据值。


查询:

try {
			Class.forName("com.mysql.jdbc.Driver");
			String url = "jdbc:mysql://localhost:3306/mydb3";
			String username = "root";
			String password = "liuxiaolong";
			Connection con = DriverManager.getConnection(url,username,password);
			System.out.println("conn:"+con);
			Statement stmt = con.createStatement();
			String sql3 = "select * from teacher";
			ResultSet rs = stmt.executeQuery(sql3);
			while(rs.next()){
				int no = rs.getInt("t_id");
				String name = rs.getString("name");
				String expert = rs.getString("expert");
				System.out.println(no+"-"+name+"-"+expert);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
查询结果:

这样就完成了查询操作。

最后的操作:

关闭的数据的连接,一般的服务器和数据库不在一个电脑上,有一个网络连接,最后我们要关闭连接。关闭资源的技巧,到关:先打开的后关闭,注意:Connection这个连接一定要关闭。这个东西不关闭时间长了就会耗费大量资源,导致出问题。

如上的操作,关闭则这样:
rs.close();

stmt.close();

con.close();



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值