Java

Java使用JDBC(中)

上一节创建了一个SelectSql方法,实现了查询。但如果想实现自定义的查询,需要重写自定义JDBC类中的SelectSql方法,首先我们想这样写:

ResultSet SelectSql(String sql){
        Connection connection=null;
        Statement search=null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/test";
            connection = DriverManager.getConnection(url, "root", "1qazxsw2");
            search=connection.createStatement();
            rs = search.executeQuery(sql);
            return rs;
        } catch (Exception throwables) {
            throwables.printStackTrace();
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(search!=null){
                try {
                    search.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }

这个方法返回Result方法,看似没有问题,但实际运行时会报错,因为在执行时,rs已经被关闭了。

使用接口实现

定义一个名为IRowMapper的接口

image 54

在SelectSql中,通过调用接口里的方法实现查询。

image 55

在主方法里写出一个实现接口的类

image 56

之后我们就可以传递接口实例,去实现Select了

image 57

执行结果

image 58

这样就解决了自定义查询的问题!每次把自定义查询的内容写在接口的实例里就好。

改进

把资源释放写成方法,实现代码复用

image 59

为select重载一个close(select里有一个ResultSet)

image 65

调用此方法关闭Statment和connection,ResultSet

image 66

继续优化

可以看到这四行在查询和更新方法中是重复使用的

image 62

创建方法返回connection对象

image 63

在每次连接数据库时,调用此方法即可

image 64

exist方法

写一个exist方法,便于查询数据库中是否已经存入某个数据

image 67

查询失败

image 68

查询成功

image 69

学生管理系统

用以上的知识就可以简单的创建一个学生管理系统,实现方法已经讲解了,这里直接放代码,有兴趣的可以看看

package com.cztcode.student;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

import Test.IRowMapper;
import Test.JDBC;

public class main {

    public static void main(String[] args) {
        System.out.println("*********************************");
        System.out.println("*\t\t\t\t*");
        System.out.println("*\t欢迎使用学生信息管理系统\t*");
        System.out.println("*\t\t\t\t*");
        System.out.println("*********************************");
        while (true) {
            menu();
        }
    }


    static void menu() {
        System.out.println("1、添加学生信息");
        System.out.println("2、删除学生信息");
        System.out.println("3、修改学生信息");
        System.out.println("4、查询学生信息");
        System.out.println("请输入操作,以Enter键结束:");
        Scanner in;
        in = new Scanner(System.in);
        String id, name, sex, address,sql;
        int option = in.nextInt();
        switch (option) {
            case 1:
                System.out.println("输入学生信息: id 姓名 性别 地址 ");
                id = in.next();
                if (check(id)) {
                    System.out.println("已经添加过,重新选择");
                    break;
                }
                name = in.next();
                sex = in.next();
                address = in.next();
                sql = "insert into student (id,name,sex,address)values('"+id+"','"+name+"','"+sex+"','"+address+"')";
                JDBC.UpdateSql(sql);
                break;
            case 2:
                System.out.println("请输入id");
                id=in.next();
                if (!check(id)) {
                    System.out.println("没有此学生");
                    break;
                }
                sql="delete  from student where id='"+id+"'";
                JDBC.UpdateSql(sql);
                System.out.println("已删除");
                break;
            case 3:
                System.out.println("请输入id");
                id=in.next();
                if (!check(id)) {
                    System.out.println("没有此学生");
                    break;
                }
                name = in.next();
                sex = in.next();
                address = in.next();
                sql = "insert into student (id,name,sex,address)values('"+id+"','"+name+"','"+sex+"','"+address+"')";
                JDBC.UpdateSql(sql);
                System.out.println("修改成功");
                break;
            case 4:
                System.out.println("请输入id");
                id=in.next();
                if (!check(id)) {
                    System.out.println("没有此学生");
                    break;
                }
                sql="select * from student where id='"+id+"'";
                JDBC.SelectSql(sql,new RowMapper());
                System.out.println("查询完毕");
                break;
            default:
                System.out.println("I'm Sorry,there is not the " + option + " option,please try again.");
        }
    }

    static boolean check(String id) {
        String sql = "select * from student where id='"+id+"'";
        return JDBC.exist(sql);
    }
}
class RowMapper implements IRowMapper {
    public void rowMapper(ResultSet rs) {
        try {
            while (rs.next()) {
                System.out.print(rs.getString("id") + " ");
                System.out.print(rs.getString("name") + " ");
                System.out.print(rs.getString("sex") + " ");
                System.out.println(rs.getString("address"));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

One thought on “Java使用JDBC(中)

发表评论