JDBC相关介绍

mac2026-06-05  7

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】

最新回复(0)