JDBC相关介绍。(实习内容)

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

JDBC API主要位于JDK中的java.sql包中。

  • DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。

  • Driver:驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。

  • Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。

  • Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。

  • PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。

  • CallableStatement:用以调用数据库中的存储过程。

  • SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。

步骤:

1.导入相关包

访问MySQL数据库需要用到第三方的类,这些第三方的类,都被压缩在一个.Jar的文件里。

步骤:project右键->build path->configure build path->Libraries->add External JARs

(注意:= =不要以为导包完就可以删掉电脑上保存的包了,这文件还是得留着……不然下次打开myeclipse你会发现惊喜哦)

2.创建元素URL USERNAME PASSWORD DRIVER 驱动

//这里是封装连接数据库,所以一律设置为private
/*这个URL根据数据库所在位置不同而不同,test是数据库的名字,3306是端口号*/
private static final String URL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";//数据库编码要和Java project编码匹配
/*这里是账号和密码*/
private static final String USERNAME="root";
private static final String PASSWORD="**";
private static final String DRIVER="com.mysql.jdbc.Driver";

3.加载驱动

连接数据库首先需要一个接口Connection。

Class.forName是把这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。

//连接数据库需要的接口,没导包的话就不能用
	private static Connection conn;
	static{
		//加载驱动
		try {
			Class.forName(DRIVER);
			//获取连接权限
			conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
		} catch (Exception e) {//Exception是所有异常的父类
			//try中有可能会出现异常,catch用来捕捉,捕捉的类型就是Exception。
			e.printStackTrace();
		}
	}
	public static Connection getConnetion(){
		//获得连接数据库的权限
		return conn;
	}

最后提供了一个getConnection方法。

接下来小测试一下:

package com.test;

import java.sql.Connection;
import java.sql.*;

//这个是加载驱动所在的那个类包
import com.classone.DBUtil;

public class Test1 {
	public static void main(String[] args) throws Exception{
		//获取数据库连接权限
		Connection conn = DBUtil.getConnetion();
        //打印出来的是数据库的地址
		System.out.println(conn);
		//预编译
		String sql = "select * from users";
		PreparedStatement ps  = conn.prepareStatement(sql);
        //查询数据库时,返回的是一个二维的结果集,我们需要用到ResultSet来遍历结果集,获取每一行的数据。
		ResultSet rs = ps.executeQuery();//查询
        //遍历
		while(rs.next()){
			System.out.println("用户名:"+rs.getString("username")+"年龄:"+rs.getInt("age"));
		}
	}
}

//run:
com.mysql.jdbc.JDBC4Connection@4*bfe*1d
用户名:an年龄:19
用户名:ya年龄:20

现在我们想把每一条数据都存放在一个List集合里,但是集合里不能又放Int类型的又放字符型的数据,所以我们需要创建一个User类,把一条数据存在一个User里,然后把这么多个User再存到List集合中就可以啦!

1.先创建一个User类
package com.pojo;

public class User {
	private Integer id;
	private String username;
	private String password;
	private Integer age;
	
	//快捷键:alt+shift+s
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password="
				+ password + ", age=" + age + "]";
	}
	
}
2.定义一个接口

那么接口的好处是什么呢~就是你提供给别人一个接口,他可以拿去用,但不会看到你这个接口是怎么实现的~

(=。=或许代码写的乱七八糟的也不会被人发现哟

package com.bao;
import java.util.List;
import com.pojo.User;

public interface UserInterface {
	//这个方法是查询所有数据
	//返回的是很多个user类的list集合
	//list中不能放又有字符又有整型的数据,所以把数据放在User类里,然后再把这些类放在list集合里。
	public List<User> selectUserAll();
}
3.实现这个接口

那么提供了一个接口,必然要实现它呀。

package com.Impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
//这些是同一个project下不同的包,一个是专门放接口的,一个是加载驱动的,一个是写有User类的包
import com.bao.UserInterface;
import com.classone.DBUtil;
import com.pojo.User;

public class UserImpl implements UserInterface{
    //首先定义一个User类的集合
	public List<User> list = new ArrayList<User>();

	public List<User> selectUserAll() {
		try{
			//获取数据库连接权限
			Connection conn = DBUtil.getConnetion();
			//System.out.println(conn);
			//预编译
			String sql = "select * from users";
			PreparedStatement ps  = conn.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();//查询
			
			while(rs.next()){
				User user = new User();
				user.setUsername(rs.getString("username"));
				user.setAge(rs.getInt("age"));
				list.add(user);
			}
			/*while(rs.next()){
				System.out.println("用户名:"+rs.getString("username")+"年龄:"+rs.getInt("age"));
			}*/
		}catch(Exception e){
			e.printStackTrace();
		}
        //最后返回的是一个集合
		return list;
	}
}
4.调用

最后我们来看看结果。

package com.test;
import java.sql.Connection;
import java.sql.*;
import com.classone.DBUtil;
import com.Impl.*;

public class Test1 {
	public static void main(String[] args) throws Exception{
        //调用接口-多态 指向实现类
		UserInterface u = new UserImpl();
		System.out.println(u.selectUserAll());
		}
	}

和刚才运行的结果一样哦~

-end-

【部分参考:https://blog.csdn.net/jungle_rao/article/details/81274720】


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

JDBC基本操作-2 上一篇
PTA最大子列和问题(Java) 下一篇