Java实验十四

1、建立一个用户表(数据表和表中的数据列由用户自行创建),表的名称和列的定义都使用键盘输入,并在数据库中创建此表。
在这里插入图片描述
在这里插入图片描述

2、编写一个程序,可以通过此程序完成一个表的创建操作,输入表名称、各个列的名称及类型,输入完成后直接通过 JDBC 创建指定的表。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class Main {
    public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    public static final String DBURL = "jdbc:mysql://localhost:3306/sqldatabase";
    public static final String DBUSER = "root";
    public static final String DBPASS = "mysql1234";
    public static void main(String[] args) throws Exception {
        Connection conn = null;
        Statement stmt = null;
        String sql = "CREATE TABLE table2(" +
                "id INT AUTO_INCREMENT PRIMARY KEY ," +
                "name VARCHAR(30) NOT NULL ," +
                "password VARCHAR(32) NOT NULL ," +
                "age INT NOT NULL ," +
                "sex VARCHAR(2) DEFAULT '男' ," +
                "birthday DATE " +
                ") ";
        Class.forName(DBDRIVER);
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        stmt = conn.createStatement();
        stmt.executeUpdate(sql);
        stmt.close();
        conn.close();
    }

}

在这里插入图片描述

3、使用键盘输入流,接受一段数据,并输入一个图片路径,之后将这些数据保存在数据表中,数据表用户自行创建。
//源代码链接:https://blog.youkuaiyun.com/qq_25345343/article/details/84570558

//源代码链接:https://blog.youkuaiyun.com/qq_25345343/article/details/84570558
import java.io.BufferedReader;  
import java.io.ByteArrayInputStream;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.SQLException;  
import java.sql.Statement;  
  
public class Main {  
    // 定义MySQL的数据库驱动程序  
    public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";  
    // 定义MySQL数据库的连接地址  
    public static final String DBURL = "jdbc:mysql://localhost:3306/sqldatabase";  
    // MySQL数据库的连接用户名  
    public static final String DBUSER = "root";  
    // MySQL数据库的连接密码  
    public static final String DBPASS = "mysql1234";  
  
    class InputData {// 数据输入类  
        BufferedReader buf = null;// 声明BufferedReader对象  
  
        public InputData() {// 通过构造方法初始化对象  
            buf = new BufferedReader(new InputStreamReader(System.in));  
        }  
  
        public String getString(String info) {// 从方法中得到字符串的信息  
            String temp = null;  
            System.out.print(info);  
            try {  
                temp = this.buf.readLine();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            return temp;  
        }  
  
        public File getPhoneDir(String info, String err) {// 得到一个图片路径  
            File file = null;  
            String str = null;  
            boolean flag = true;// 定义一个循环处理的标志  
            while (flag) {  
                str = this.getString(info);  
                file = new File(str);  
                if (file.isFile() && file.toString().matches(".+\\.(jpg|png|jpeg|gif)")) {  
                    flag = false;  
                } else {  
                    System.out.println(err);  
                }  
            }  
            return file;  
        }  
    }  
  
    public static void main(String[] args) {  
        Connection conn = null;// 数据库连接  
        try {  
            Class.forName(DBDRIVER);// 加载驱动程序  
            // 连接MySQL数据库时,要写上连接的用户名和密码  
            conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);  
            createTable(conn);// 创建表格  
            setInformation(conn);// 插入信息  
        } catch (ClassNotFoundException | SQLException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                conn.close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
  
    private static void setInformation(Connection conn) throws SQLException {  
        PreparedStatement pstmt = null;// 数据库操作  
        Main e3 = new Main();  
        while (true) {  
            String text = e3.new InputData().getString("请输入文本信息:");  
            File f = e3.new InputData().getPhoneDir("请输入图片的路径:", "输入的路径不正确!");  
            String sql = "insert into info(note,phone) values (?,?)";  
            pstmt = conn.prepareStatement(sql);// 实例化PreparedStatement  
            InputStream input = null;  
            try {  
                byte[] b = text.getBytes();// 将字符串转换为字节数组  
                input = new ByteArrayInputStream(b);// 将String转换为输入流  
                pstmt.setAsciiStream(1, input, b.length);  
                input = new FileInputStream(f);  
                pstmt.setBinaryStream(2, input, f.length());  
                pstmt.executeUpdate();  
                pstmt.close();  
                String temp = e3.new InputData().getString("是否继续添加?N取消:");  
                if ("N".equals(temp) || "n".equals(temp)) {  
                    break;  
                }  
            } catch (IOException e) {  
                e.printStackTrace();  
            } finally {  
                if (input != null) {  
                    try {  
                        input.close();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
    }  
  
    private static void createTable(Connection conn) throws SQLException {// 创建数据表  
        Statement stmt = null;// 数据库操作  
        stmt = conn.createStatement();  
        String sql = "create table if not exists info (id int auto_increment primary key,note longtext,phone longblob)";  
        stmt.execute(sql);  
    }  
  
}

可以看出多了一个info数据表:
在这里插入图片描述
查看数据表:
在这里插入图片描述

4、建立一张雇员表(雇员编号、姓名、工作、雇佣日期、基本工资、部门名称),在命令窗口下将表中的全部数据列出。
//源代码链接:https://blog.youkuaiyun.com/qq_43776450/article/details/98469367

//源代码链接:https://blog.youkuaiyun.com/qq_43776450/article/details/98469367
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;


public class Main {
    // 定义MySQL的数据库驱动程序
    public static final String DBDRIVER = "com.mysql.cj.jdbc.Driver";
    // 定义MySQL数据库的连接地址
    public static final String DBURL = "jdbc:mysql://localhost:3306/sqldatabase";
    // MySQL数据库的连接用户名
    public static final String DBUSER = "root";
    // MySQL数据库的连接密码
    public static final String DBPASS = "mysql1234";

    public static void main(String[] args) {
        Connection conn = null;// 数据库连接
        try {
            Class.forName(DBDRIVER);
            conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
            createTable(conn);// 创建雇员表
            insertInfo(conn);// 插入数据
            query(conn);// 查询信息
        } catch (ClassNotFoundException | SQLException | ParseException e) {
            e.printStackTrace();
        }

    }

    private static void query(Connection conn) throws SQLException {
        PreparedStatement pstmt = null;// 数据库操作
        ResultSet rs = null;// 保存查询结果
        String sql = "select eid,name,work,hiredate,basicwage,dept "
                + "from employe";
        pstmt = conn.prepareStatement(sql);
        rs = pstmt.executeQuery();// 实例化ResultSet对象
        System.out.println("查询结果如下:");
        System.out.println("雇员编号\t姓名\t工作\t雇佣日期\t\t基本工资\t\t部门名称");
        while (rs.next()) {
            int eid = rs.getInt(1);
            String name = rs.getString(2);
            String work = rs.getString(3);
            java.util.Date hiredate = rs.getDate(4);
            Float basicwage = rs.getFloat(5);
            String dept = rs.getString(6);
            System.out.print(eid + "\t");
            System.out.print(name + "\t");
            System.out.print(work + "\t");
            System.out.print(hiredate + "\t");
            System.out.print(basicwage + "\t\t");
            System.out.println(dept);
        }
    }

    private static void insertInfo(Connection conn) throws SQLException, ParseException {// 向表中插入数据
        PreparedStatement pstmt = null;// 数据库操作
        java.util.Date temp = null;
        String sql = "insert into employe(name,work,hiredate,basicwage,dept) values(?,?,?,?,?)";
        pstmt = conn.prepareStatement(sql);// 实例化PreparedStatement对象
        String[] employe1 = {"张三", "程序员", "2001-04-15", "8000", "搜索部"};
        String[] employe2 = {"李四", "程序员", "2004-06-01", "6000", "游戏测试部"};
        String[] employe3 = {"王五", "项目经理", "2011-02-04", "12000", "搜索部"};
        String[] employe4 = {"赵六", "董事长", "1999-08-30", "20000", "董事会"};
        String[] employe5 = {"钱七", "项目助理", "2016-08-07", "7000", "财务部"};
        String[] employe6 = {"孙八", "销售", "2017-05-21", "6000", "销售部"};
        String[][] allEmploye = {employe1, employe2, employe3, employe4, employe5, employe6};
        for (int i = 0; i < allEmploye.length; i++) {
            for (int j = 0; j < allEmploye[i].length; j++) {

                if (j == 2) {
                    // 通过SimpleDateFormat类将字符串转换为java.util.Date类型
                    temp = new SimpleDateFormat("yyyy-MM-dd").parse(allEmploye[i][j]);
                    // 通过java.util.Date取出具体的日期数,并将其变为java.sql.Date类型
                    java.sql.Date date = new java.sql.Date(temp.getTime());
                    pstmt.setDate(j + 1, date);
                } else if (j == 3) {
                    Float number = Float.valueOf(allEmploye[i][j]);
                    pstmt.setFloat(j + 1, number);
                } else {
                    pstmt.setString(j + 1, allEmploye[i][j]);
                }
            }

            pstmt.addBatch();
        }
        int num[] = pstmt.executeBatch();
        System.out.println("更新了" + num.length + "条数据。");
        pstmt.close();
    }

    private static void createTable(Connection conn) throws SQLException {
        PreparedStatement pstmt = null;
        String sql = "create table if not exists employe(eid int auto_increment primary key,name varchar(20) not null,"
                + "work varchar(30) not null,hiredate date not null,basicwage float not null,dept varchar(40))";
        pstmt = conn.prepareStatement(sql);
        pstmt.execute();
        pstmt.close();
    }
}

在这里插入图片描述
命令窗口下查看表中数据:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Re:从零开始的代码生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值