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语句的执行过程中发生了例外情况(即错误)。
步骤:
访问MySQL数据库需要用到第三方的类,这些第三方的类,都被压缩在一个.Jar的文件里。
步骤:project右键->build path->configure build path->Libraries->add External JARs
(注意:= =不要以为导包完就可以删掉电脑上保存的包了,这文件还是得留着……不然下次打开myeclipse你会发现惊喜哦)
连接数据库首先需要一个接口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集合中就可以啦!
那么接口的好处是什么呢就是你提供给别人一个接口,他可以拿去用,但不会看到你这个接口是怎么实现的
(=。=或许代码写的乱七八糟的也不会被人发现哟
package com.bao; import java.util.List; import com.pojo.User; public interface UserInterface { //这个方法是查询所有数据 //返回的是很多个user类的list集合 //list中不能放又有字符又有整型的数据,所以把数据放在User类里,然后再把这些类放在list集合里。 public List<User> selectUserAll(); }那么提供了一个接口,必然要实现它呀。
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; } }最后我们来看看结果。
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】
