老师,作业有点小问题

来源:6-6 自由编程

孬帮手慕小菜

2020-06-06 21:29:17

Main

package com.abdreas.demo;

public class Main {
public static void main(String[] args) {
	course_demo cd  = new course_demo();
	cd.insert();
	cd.selectall();
	cd.selectwhere();
	cd.update();
	cd.delete();
	cd.desc();
}
}

demo

package com.abdreas.demo;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;
import com.abdreas.util.jdbcuutil;

public class course_demo {
	@Test
	/**
	 * 写入数据
	 */
	public void insert() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			// 建立连接
			conn = jdbcuutil.getConnection();
			// 编写sql
			String sql = "INSERT course(name,category,desp,createtime)values(?,?,?,?);";

			for (int i = 1; i <= 3; i++) {
				// 预编译sql
				pstmt = conn.prepareStatement(sql);
				// 设置参数
				switch (i) {
				case 1: {
					pstmt.setString(1, "JAVA零基础");
					pstmt.setString(2, "java");
					pstmt.setString(3, " java基础语法");
					pstmt.setDate(4, new Date(System.currentTimeMillis()));
					// 执行sql
					int msg = pstmt.executeUpdate();
					if (msg > 0) {
						System.out.println("第" + i + "个数据写入成功");
					} else {
						System.out.println("第" + i + "个数据写入失败");
					}
					break;
				}
				case 2: {
					pstmt.setString(1, "JAVAweb");
					pstmt.setString(2, "JAVA");
					pstmt.setString(3, " JSP/SERVLET");
					pstmt.setDate(4, new Date(System.currentTimeMillis()));
					// 执行sql
					int msg = pstmt.executeUpdate();
					if (msg > 0) {
						System.out.println("第" + i + "个数据写入成功");
					} else {
						System.out.println("第" + i + "个数据写入失败");
					}
					break;
				}
				case 3: {
					pstmt.setString(1, "前端小白");
					pstmt.setString(2, "前端");
					pstmt.setString(3, " HTML/CSS/JS");
					pstmt.setDate(4, new Date(System.currentTimeMillis()));
					// 执行sql
					int msg = pstmt.executeUpdate();
					if (msg > 0) {
						System.out.println("第" + i + "个数据写入成功");
					} else {
						System.out.println("第" + i + "个数据写入失败");
					}
					break;
				}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			jdbcuutil.release(pstmt, conn);
		}
	}

	/**
	 * 显示所有数据
	 */
	@Test
	public void selectall() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet res = null;
		try {
			// 建立连接
			conn = jdbcuutil.getConnection();
			// 编写sql语句
			String sql = "select * from ?";
			// 预编译sql
			pstmt = conn.prepareStatement(sql);
			//添加参数
			pstmt.setString(1, "course");
			// 执行sql
			res = pstmt.executeQuery();
			while (res.next()) {
				int id = res.getInt("id");
				String name = res.getString("name");
				String category = res.getString("category");
				String desp = res.getString("desp");
				Date createTime = res.getDate("createTime");
				System.out.println(id + "     " + name + "     " + category + "     " + desp + "     " + createTime);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			jdbcuutil.release(pstmt, conn, res);
		}
	}

	/**
	 * 查询课程名称为Java零基础的数据并显示
	 */
	@Test
	public void selectwhere() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet res = null;
		try {
			// 建立连接
			conn = jdbcuutil.getConnection();
			// 编写sql语句
			String sql = "select * from course where name=?";
			// 预编译sql
			pstmt = conn.prepareStatement(sql);
			// 添加参数
			pstmt.setString(1, "JAVA零基础");
			// 执行sql
			res = pstmt.executeQuery();
			while (res.next()) {
				int id = res.getInt("id");
				String name = res.getString("name");
				String category = res.getString("category");
				String desp = res.getString("desp");
				Date createTime = res.getDate("createTime");
				System.out.println(id + "     " + name + "     " + category + "     " + desp + "     " + createTime);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			jdbcuutil.release(pstmt, conn, res);
		}
	}

	/**
	 * 将Java零基础的课程描述改为Java语法
	 */
	@Test
	public void update() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			// 建立连接
			conn = jdbcuutil.getConnection();
			// 编写sql语句
			String sql = "update course set name=? where name = ?";
			// 预编译sql
			pstmt = conn.prepareStatement(sql);
			//添加参数
			pstmt.setString(1, "Java语法");
			pstmt.setString(2, "JAVA零基础");
			// 执行sql
			int msg = pstmt.executeUpdate();
			if(msg>0) {
				System.out.println("修改成功");
			}else {
				System.out.println("修改失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			jdbcuutil.release(pstmt, conn);
		}
	}

	/**
	 * 删除Java Web这门课程
	 */
	@Test
	public void delete() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			// 建立连接
			conn = jdbcuutil.getConnection();
			// 编写sql语句
			String sql = "delete from course where name = ?";
			// 预编译sql
			pstmt = conn.prepareStatement(sql);
			//添加参数
			pstmt.setString(1, "JAVAweb");
			// 执行sql
			int msg = pstmt.executeUpdate();
			if(msg>0) {
				System.out.println("删除成功");
			}else {
				System.out.println("删除失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			jdbcuutil.release(pstmt, conn);
		}
	}

	/**
	 * 按创建时间倒序排序显示所有数据
	 */
	@Test
	public void desc() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet res = null;
		try {
			// 建立连接
			conn = jdbcuutil.getConnection();
			// 编写sql语句
			String sql = "select * from course order by ? ?";
			// 预编译sql
			pstmt = conn.prepareStatement(sql);
			//添加参数
			pstmt.setString(1, "createtime");
			pstmt.setString(2, "desc");
			// 执行sql
			res = pstmt.executeQuery();
			while(res.next()) {
				int id = res.getInt("id");
				String name = res.getString("name");
				String category = res.getString("category");
				String desp = res.getString("desp");
				Date createtime = res.getDate("createtime");
				System.out.println(id+"     "+name+"     "+category+"     "+desp+"     "+createtime);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 释放资源
			jdbcuutil.release(pstmt, conn,res);
		}
	}

}

util

package com.abdreas.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class jdbcuutil {
//设置便于修改该的静态变量
	private static final String driverClass;
	private static final String url;
	private static final String username;
	private static final String password;
	/**
	 * 初始化静态数据的静态代代码块
	 */
	static {
		//加载属性文件并解析
		Properties pro = new Properties();
		//获得属性文件的输入流
		InputStream ins = jdbcuutil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		try {
			pro.load(ins);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		driverClass  = pro.getProperty("driverClass");
		url = pro.getProperty("url");
		username = pro.getProperty("username");
		password = pro.getProperty("password");
	}
	/**
	 * 注册驱动的方法
	 * @throws ClassNotFoundException 
	 * @throws SQLException 
	 */
	public static void loadriver() throws ClassNotFoundException{
		Class.forName(driverClass);
	}
	/**
	 * 获得连接的方法
	 * @throws SQLException 
	 */
	
	public static  Connection getConnection() throws Exception {
		loadriver();
		Connection conn = DriverManager.getConnection(url, username, password);
		return conn;
	}
	
	/**
	 * 释放资源的方法
	 */
	public static void release(Statement sta,Connection conn) {
		if(sta != null) {
			try {
				sta.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}sta = null;
		}
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}conn = null;
		}
	}
	public static void release(Statement sta,Connection conn,ResultSet res) {
		if(sta != null) {
			try {
				sta.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}sta = null;
		}
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}conn = null;
		}
		if(res != null) {
			try {
				res.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}res = null;
		}
	}
}

配置文件

driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8&userSSL=false
username=root
password=123456

建表

CREATE TABLE if NOT EXISTS course(
    id int unsigned auto_increment KEY,
    name varchar(20) NOT NULL comment'课程名称',
    category varchar(20) NOT NULL comment'所属方向',
    desp varchar(30) NOT NULL comment'课程描述',
    createtime datetime NOT NULL comment'创建时间'
);

问题:

1.在查询课程名称为Java零基础的数据并显示时候,如果将表名设置为变量时候程序会报错,是因为不能这样写吗?是与程序执行顺序有关吗?

2.请老师给一个批量添加数据的方法,我使用的循环写入代码重复度太高了,我在使用大量?当变量时候程序会报错

3.请老师帮忙看看代码设计缺陷和能改进的地方

写回答

1回答

好帮手慕阿满

2020-06-07

同学的代码完成的不错,关于同学的问题,有如下的解释:

1、不能将表名设置为变量,和执行顺序有关。执行sql语句时,先执行from子句,表示从那张表中获取,如果将表名设置为参数,预编译执行sql时,并不知道从那张表获取,所以报错。

2、可以使用多个?的形式,如:

http://img.mukewang.com/climg/5edc605c0981147c09020587.jpg

需要将问号的个数和添加的参数一致。

另外当学到后边mybatis框架时,会将批量插入数据。

3、代码中还存在一些小问题:命名规范问题,比如类名首字母应该大写,例如jdbcuutil 建议改为JdbcUtil。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~


1

0 学习 · 8016 问题

查看课程