美文网首页
JDBC进阶3——增删改查操作使用文件相互调用版

JDBC进阶3——增删改查操作使用文件相互调用版

作者: 从0到1的小姐姐 | 来源:发表于2018-05-14 16:10 被阅读0次

趁热打铁,继续学习JDBC,今天早上找了个例子
http://outofmemory.cn/code-snippet/16682/control-project-to-data-library-to
把增删改查的操作在一个例子里面调通了,记录下注意事项:

1.在eclipse中新建三个文件

文件1:Test.java(这个是个主文件)
文件2:Handle.java(Test里面会调用Handle)
文件3:TestConnection.java(Handle里面会调用TestConnection)

image.png
注意:类名和文件名必须保持一致!
代码是根据链接代码修改排除package和import之类问题的代码:
Test.java
package database_20;

import java.util.Scanner;
/**
 * 测试类
 * @author Administrator
 *
 */
public class Test {
    private static Scanner sc;

    public static void main(String[] args) {
        
        System.out.println("欢迎光临:");
    //输出选项
      System.out.println("1:查询    2:更新     3:插入   4:删除   5:退出");
      System.out.println("你想干什么?   请选择:");
      sc = new Scanner(System.in);
      //实例化数据操作类Handle
      Handle hd = new Handle();
 
      int type = sc.nextInt();
      /**
       * 判断用户选择操作的项
       */
      switch(type){
      case 1:
          //调用Handle查询方法
          hd.query();
      System.out.println("查询完成!");
        
          break;
      case 2:
          //更新
          hd.update();
          System.out.println("更新完成!");
          
          break;
      case 3:
          //插入
          hd.insert();
          System.out.println("插入完成!");
 
          break;
      case 4:
          //删除
          hd.delete();
          System.out.println("删除完成!");
            break;
      case 5:
          //退出
          System.out.println("程序退出!");
          System.exit(0);
          break;
      }
 
    }
}

Handle.java

package database_20;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**
 * 数据库操作类
 * @author Administrator
 *
 */
public class Handle {
    TestConnection tc = new TestConnection();
    Scanner sc = new Scanner(System.in);
    /**
     * 查询方法
     */
    public void query() {
        System.out.println("1:查询全部");
        System.out.println("2:根据ID查询");
        System.out.print("选择你要执行选项:");
        // Scanner sc2 = new Scanner(System.in);
        int type2 = sc.nextInt();
        switch (type2) {
 
        case 1:
            String Sql1 = "select ID,Name,Salary,departmentId,email from employee where 1=?";           //表名在这里,这里顺序要和数据库表一致
            Object[] array1 = { 1 };
            List list = tc.getData(Sql1, array1);
            /**
             * 取键值 并打印 即为输出的列名 排列
             */
            Map map2 = (Map) list.get(0);
            // 存键值
            Set set2 = map2.keySet();
            Iterator it2 = set2.iterator();
            while (it2.hasNext()) {
                System.out.print("\t" + it2.next());
            }
 
            System.out.println();
            //循环取出 每个行的数据
 
            for (Object object : list) {
                // list里面是map对象
                Map map = (Map) object;
                // 存键值
                Set set = map.keySet();
                Iterator it = set.iterator();
 
                while (it.hasNext()) {
                    // 取键值
 
                    Object key = it.next();
 
                    // 输出 map里的数据
 
                    System.out.print("\t " + map.get(key));
 
                }
                System.out.println();
            }
 
            break;
        case 2:
            /**
             * 根据用户输入的员工id进行查询
             */
            System.out.println("输入ID:");
            Object object = sc.nextInt();
            Object[] array = { object };
            String Sql2 = "select ID,Name,Salary,departmentId,email from employee where ID =? ";
 
            List list2 = tc.getData(Sql2, array);
           //输出列名
            Map map3 = (Map) list2.get(0);
            // 存键值
            Set set3 = map3.keySet();
            Iterator it3 = set3.iterator();
 
            while (it3.hasNext()) {
                System.out.print("\t" + it3.next());
            }
 
            System.out.println();
            //循环输出数据
            for (Object object2 : list2) {
                // list里面是map对象
                Map map4 = (Map) object2;
                // 存键值
                Set set4 = map4.keySet();
                Iterator it4 = set4.iterator();
 
                while (it4.hasNext()) {
                    // 取键值
 
                    Object key = it4.next();
 
                    // 输出 map里的数据
 
                    System.out.print("\t " + map4.get(key));
                    // System.out.print("\\t"+ map.get(key));
 
                }
                System.out.println();
            }
 
            break;
        }
    }
 
    /**
     * 更新方法
     */
    public void update(){
        System.out.print("请输入ID:");
        Object id = sc.next();
        System.out.print("请输入想更新的薪水值:");
        Object salary = sc.next();
        //根据用户输入的员工号来修改薪水值并判断是否执行成功
        String sql = "update employee set Salary = ? where  ID = ? " ;
        Object [] array =  { salary, id  };
        //使用TestConnection的update方法
        int line =  tc.update(sql, array);
        if(line>0){
            System.out.println("信息更新成功!");
        }
 
    }
    /**
     * 插入方法
     */
    public void insert(){
        System.out.print("请输入ID:");
        Object id = sc.next();
        System.out.print("请输入Name:");
        Object name = sc.next();
        System.out.print("请输入email:");
        Object email = sc.next();
        System.out.print("请输入Salary:");
        Object salary = sc.next();
        System.out.print("请输入dapartmentId:");
        Object dpId = sc.next();
        Object[] array = {id,name,salary,dpId,email};
        //插入用户输入的数据 并判断是否执行成功
        String sql = "insert into employee values(?,?,?,?,?)";
        int line = tc.update(sql, array);
        if(line>0){
            System.out.println("插入成功!");
        }
    }
 
    /**
     * 删除方法
     */
    public void delete(){
        System.out.print("请输入想删除的员工号:");
        Object id = sc.next();
        Object [] array = {id};
        //删除用户输入 的员工号的数据并判断是否执行成功
        String sql = "delete from employee where ID = ? ";
        int line =  tc.update(sql, array);
            if(line>0){
                System.out.println("删除成功!");
            }
    }
 
}

TestConnection.java

package database_20;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class TestConnection {
 
    /**
     * 定义链接需要的字符串
     */
    private static final String str1 = "com.mysql.jdbc.Driver";
    private static final String url = "jdbc:mysql://localhost/test?useSSL=false";  //这里是数据库名
    private static final String user = "root";
    private static final String password = "12345678";
    Connection conn;
    PreparedStatement st;
    ResultSet rs;
 
    /**
     * 加载驱动类
     */
    static {
 
        try {
            Class.forName(str1);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
    /**
     * 建立链接的方法
     *
     * @return
     */
    private Connection getConnection() {
 
        try {
            conn = DriverManager.getConnection(url, user, password);
 
        } catch (Exception e) {
            // TODO: handle exception
        }
        return conn;
 
    }
 
    /**
     * 使用prepareStatement来预编译查询语句 然后传参数的值来作为条件查询数据库 返回list
     *
     * @param id
     * @return
     */
    public List getData(String sql, Object[] array) {
        // SQL语句
        List list = new ArrayList();
        conn = this.getConnection();
        try {
            // 预编译
            st = conn.prepareStatement(sql);
            // 利用方法传入参数
            for (int i = 0; i < array.length; i++) {
                st.setObject(i + 1, array[i]);
            }
            // 执行查询
            rs = st.executeQuery();
            while (rs.next()) {
                Map map = new HashMap();
 
                ResultSetMetaData rsmd = rs.getMetaData();
                // 以列名为键 存储每一行数据进map
                for (int i = 1; i <= rsmd.getColumnCount(); i++) {
 
                    map.put(rsmd.getColumnName(i), rs.getObject(i));
 
                }
                // 将每一个map加入list 这样list的到就是每一行
                list.add(map);
 
            }
 
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 关闭连接
            this.close();
        }
        return list;
 
    }
 
    /**
     * 更新数据的方法
     *
     * @param sql
     * @param array
     * @return
     */
    public int update(String sql, Object array[]) {
        conn = this.getConnection();
        int line = 0;
        try {
 
            st = conn.prepareStatement(sql);
            // 传参数
            for (int i = 0; i < array.length; i++) {
                st.setObject(i + 1, array[i]);
            }
 
            line = st.executeUpdate();
            // 判断是否修改成功
            if (line > 0) {
                return line;
 
            } else {
 
                System.out.println("更新失败");
            }
 
        } catch (SQLException e) {
 
            e.printStackTrace();
        } finally {
            // 关闭连接
            this.close();
        }
        return 0;
    }
 
    /**
     * 关闭连接
     */
    private void close() {
 
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
 
            try {
                if (st != null) {
                    st.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
 
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

private static final String url = "jdbc:mysql://localhost/test?useSSL=false";  
private static final String user = "root";
private static final String password = "12345678";

这里test是数据库名, user是用户名,password是密码,都要换成自己的

2.在MYSQL中新建数据库和表,插入数据

show datebases;
create database test;
use test;
show tables;
create table employee(ID int(20) primary key auto_increment,Name varchar(20),Salary int(10),departmentId int(10),email varchar(20));
desc employee;
1.png

注意2:数据库中建表的字段顺序要和java中Handle.java
String Sql1 = "select ID,Name,Salary,departmentId,email from employee where 1=?";
这里面字段顺序要保持一致
然后向表中插入数据,如下,插入一些数据
insert into employee(ID,Name,Salary,departmentId,email) values(3,'jack',300,333,'3333@qq.com');

image.png

3.运行java中主程序

确定程序无误之后,运行Test.java,程序正确的话会发现结果如下



但是会发现这个程序存在一个问题,运行一次就自动停止了,不能持续循环多个操作

4.改进——查询直至外部停止

int index = 0; do{ 源程序} while(index != 5);
在源程序外面加上个while循环和index一直到输入中止条件

package database_20;

import java.util.Scanner;
/**
 * 测试类
 * @author Administrator
 *
 */
public class Test {
    private static Scanner sc;

    public static void main(String[] args) {
        int index = 0;    //新增
        System.out.println("欢迎光临:");
    //输出选项
      do{                //新增
      System.out.println("1:查询    2:更新     3:插入   4:删除   5:退出");
      System.out.println("你想干什么?   请选择:");
      sc = new Scanner(System.in);
      //实例化数据操作类Handle
      Handle hd = new Handle();
 
      int type = sc.nextInt();
      /**
       * 判断用户选择操作的项
       */
      switch(type){
      case 1:
          //调用Handle查询方法
          hd.query();
      System.out.println("查询完成!");
          index = type;              //新增
          break;
      case 2:
          //更新
          hd.update();
          System.out.println("更新完成!");
          index = type;
          break;
      case 3:
          //插入
          hd.insert();
          System.out.println("插入完成!");
          index = type;
          break;
      case 4:
          //删除
          hd.delete();
          System.out.println("删除完成!");
          index = type;
          break;
      case 5:
          //退出
          System.out.println("程序退出!");
          System.exit(0);
          break;
      }
 
    }while(index != 5);        //新增
    }
}

相关文章

网友评论

      本文标题:JDBC进阶3——增删改查操作使用文件相互调用版

      本文链接:https://www.haomeiwen.com/subject/docjdftx.html