在上一篇文章里我们讲了怎么创建 JavaBean,此时我们还不需要用到这些 Beans,我们还要学会工具类的使用,后期这两个都会用得上…
什么是工具类?
工具类和 JavaBean 一样,并不是特性或者功能,只是程序员们根据自己编程的经验总结,大家在一起约定俗成的规范之一,接下来就让我们看一个例子,这是一个简单的读取数据库字段方法:
import java.sql.*;
import com.personal.teachmanager.Beans.dataUsers;
public class noDBUtils {
private static String url="jdbc:mysql://localhost:3333/xxxxx";
private static String user="user1";
private static String password="123456";
private static Connection conn;
public static void main(String[] args) {
try {
String sid = "2021103001";
dataUsers u = new dataUsers();
u.setStudentID(sid);
conn = DriverManager.getConnection(url,user,password);
Class.forName("com.mysql.jdbc.Driver");
PreparedStatement ps = conn.prepareStatement("... where Sid=?");
ps.setString(1, u.getStudentID());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String stuid = rs.getString("Sid");
String sname = rs.getString("Sname");
String clname = rs.getString("CLname");
String sage = rs.getString("Sage");
String stele = rs.getString("Stele");
String semail = rs.getString("Semail");
System.out.println("姓名:" + sname + "。班级:" + clname + "。年龄:" + sage + "。电话:" + stele + "。邮箱:" + semail + "\n");
}
ps.close();
rs.close();
conn.close();
} catch (ClassNotFoundException | SQLException e){
e.printStackTrace();
}
try {
String tid = "10001";
dataUsers u = new dataUsers();
u.setTeacherID(tid);
conn = DriverManager.getConnection(url,user,password);
Class.forName("com.mysql.jdbc.Driver");
PreparedStatement ps = conn.prepareStatement("... where Tid=?");
ps.setString(1, u.getTeacherID());
ResultSet rs = ps.executeQuery();
while (rs.next()) {
String teaid = rs.getString("Tid");
String tname = rs.getString("Tname");
String dname = rs.getString("Dname");
String tvalue = rs.getString("TLvalue");
String tage = rs.getString("Tage");
String isvalue = rs.getString("ISvalue");
String ttele = rs.getString("Ttele");
String temail = rs.getString("Temail");
System.out.println("姓名:" + tname + "。院系:" + dname + "。职称:" + tvalue + "。年龄:" + tage + "。性别:" + isvalue + "。电话:" + ttele + "。邮箱:" + temail);
}
ps.close();
rs.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
让我们运行一下,它的输出结果会是这样的:
姓名:李四。班级:网络工程。年龄:21。电话:15554444566。邮箱:1264@qq.com
姓名:彰武。院系:计算机科学学院。职称:教授。年龄:29。性别:男。电话:12354154125。邮箱:1233211@qq.com
嗯,结果是没问题,但是如果你仔细看这段代码,你会不会觉得,有点冗余?在这段代码里,我们调用了两次
conn = DriverManager.getConnection(url,user,password);
Class.forName("com.mysql.jdbc.Driver");
除此之外,我们用了两次 try… catch,两次 close,这实在是太浪费了!
那我们有没有什么好的方法呢?工具类就应运而生啦!
我们可以将连接数据库的方法写进这个类里,封装成一个工具类,然后我们在其它类里直接去调用这个工具类,不仅对功能的调用会减少,同时代码也会更简洁美观。
我该如何去写一个工具类?
和 JavaBean 一样,我们只需要正常的创建一个类就好,然后直接就在这个类里写。
等等!这么直接的吗??当然不是,对类的命名就要注意,一般情况下,我们对工具类的命名都会是:
XXUtils
如果是数据库操作类,我们会写DBUtils
以此类推…等等
总结出来规律,它都一定会是Utils结尾,告诉大家这是个工具类,不要随便修改哟~
现在我们以数据库连接类为例,写一个实战开发。
想想我们需要写哪些方法
- 数据库连接,我们必须要做的就是加载驱动。
- 加载完了后,按照业务逻辑,当然就是连接数据库了,这跟我们正常写数据库连接是一样的。
- 写好数据库连接后,我们也能想到,在操作完数据库后,我们肯定是要断开连接的,否则会出一些乱七八糟的安全问题。
现在可以开始写了
想好以后,我们就可以直接开始写了,能想到这里你一定会是文思泉涌的!能行云流水的写出相关的实现。
测试你的工具类
写好以后,我们就来测试一下,我们可以用JUnit测试,也可以手动测试,在这里我们手动测试就好~测试代码如下:
private static Connection conn = null;
public static void main(String[] args) {
int flag = 0;
conn = dbUtils.getConnection();
if (conn!=null) {
while (flag != 1) {
System.out.println("关闭请输入1:");
Scanner sc = new Scanner(System.in);
flag = sc.nextInt();
}
dbUtils.closeConnection();
}
}
它的运行结果会是这样的:
数据库连接成功
关闭请输入1:
1
数据库断开成功
Process finished with exit code 0
当整个测试程序按照你的实现逻辑去运行,就说明你的工具类已经创建成功啦~
JUnit 进行测试如下:
现在你可以依靠工具类去编写一开始讲的例子了,快来试试吧!
完整代码
dbUtils.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class dbUtils {
private static Connection conn=null;
private static String url="jdbc:mysql://localhost:3333/xxxxx";
private static String user="user1";
private static String password="123456";
//private static String url = "jdbc:odbc:JDBC-x64";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
conn = DriverManager.getConnection(url,user,password);
System.out.println("数据库连接成功");
//Connection con = DriverManager.getConnection(url);
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据库连接失败,请检查错误信息!");
}
return conn;
}
public static Connection closeConnection() {
if(conn != null) {
try {
conn.close();
System.out.println("数据库断开成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
}
testConn.java
import com.personal.teachmanager.DBUtils.dbUtils;
import java.sql.Connection;
import java.util.Scanner;
public class testConn {
private static Connection conn = null;
public static void main(String[] args) {
int flag = 0;
conn = dbUtils.getConnection();
if (conn!=null) {
while (flag != 1) {
System.out.println("关闭请输入1:");
Scanner sc = new Scanner(System.in);
flag = sc.nextInt();
}
dbUtils.closeConnection();
}
}
}
想一想
在上一篇文章中我们讲到了如何创建 JavaBean,但是当我们需要创建多个 Bean 的时候,手动生成是非常繁琐的。在这里我们学到工具类的操作后,我们不妨想想,如何使用工具类来自动生成 JavaBean 呢?
如果有那个闲心我就写一下。。