你控制台要输入内容
已经解决了
第一,根据前端,你要设计你的数据库和表。第二,做jdbc 和数据库的connect。第三写 sql 语句,使用java执行的函数,得到结果集合,传给前端显示
当删除有外键的属性的数据时,需要先把该外键值关联的数据删除掉。这是外键约束的要求。
也就是说删除student表的数据时,必须先把courcse表中通过sno关联的数据删除掉。
老师的代码是有在action中赋值的
包有没有其实都一样的,包只是为了让代码分层分工更加清晰。
每个类之间并没有关系,因为既没有继承也没有实现接口。类和类非要说有什么关系那就是调用关系,比如GoddessDao dao=new GoddessDao(),新建一个GoddessDao的对象,然后就可以调用这个对象的方法。
request对象是发送一次请求后,它是会销毁的。你可以用session来保存,然后用session来获取,这样子,只有当你关了服务器的时候,这个对象才会被销毁。还有疑问可以继续讨论。
望采纳,谢谢。
空指针异常,尝试抛出或者捕获下试试
分成2个步骤去完成啊 像上面的add方法里面的一样
java.util包里的data类型不是可以直接插数据库吗?
package view; import java.sql.SQLException; import java.util.List; import java.util.Scanner; import control.*; import model.*; public class Test { public static Scanner in = new Scanner(System.in); private static Control test = new Control(); /** * 1.循环执行输入exit才退出 * 2.执行内容 * 增删改查数据表 * 3.细节展示 * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { //外层循环 System.out.println("***********************************"); System.out.println("欢迎来到禁区!"); System.out.println("***********************************"); System.out.println("【exit】\t退出"); System.out.println("【query】\t查询女神信息"); System.out.println("【get】\t查询女神详细信息"); System.out.println("【add】\t增加女神"); System.out.println("【delete】\t删除女神"); System.out.println("【clear】\t删除所有女神信息"); System.out.println("【edit】\t修改女神信息"); String select = "null"; //创建对象 Test it = new Test(); String[] s = {"query", "get", "add", "delete", "clear", "edit"}; do { System.out.println("***********************************"); if (select.equals(s[0])) { it.query(); } else if (select.equals(s[1])) { it.get(); } else if (select.equals(s[2])) { it.add(); } else if (select.equals(s[3])) { it.delete(); } else if (select.equals(s[4])) { it.clear(); } else if (select.equals(s[5])) { it.edit(); } else { } System.out.println("***********************************"); } while (!(select = in.next()).equals("exit")); System.out.println("退出!"); } public void delete() throws SQLException { System.out.println("请输入要删除女神的ID:"); int id = in.nextInt(); test.delete(id); System.out.println("删除成功!"); } public void clear() throws SQLException { test.deleteAll(); System.out.println("所有女神信息已清除!"); } public void get() throws SQLException { System.out.println("请输入要查询女神的编号:"); int id = in.nextInt(); Goddess g = test.getQuery(id); System.out.println("ID:" + g.getId() + "\nName:" + g.getName() + "\nAge:" + g.getAge() + "\nPhone:" + g.getPhone()); } public void query() throws SQLException { List<Goddess> gList = test.getQuery(); for (Goddess goddess : gList) { System.out.println("ID:" + goddess.getId() + "\tName:" + goddess.getName() ); } } public void add() throws SQLException { System.out.println("请输入要添加女神基本信息[ID][Name][Age][Phonenumber]:"); int id = in.nextInt(); String name = in.next(); int age = in.nextInt(); String number = in.next(); Goddess g = new Goddess(id, age, name, number); test.add(g); } public void edit() throws SQLException { System.out.println("请输入要修改女神的基本信息[ID][Name][Age][Phonenumber]:"); int id = in.nextInt(); String name = in.next(); int age = in.nextInt(); String number = in.next(); Goddess g = new Goddess(id, age, name, number); test.undates(id, g); System.out.println("修改成功!"); } }
可以执行完所有再关闭Connection,老师为了演示方便没有立马关闭。
这里有讨论:http://bbs.csdn.net/topics/390869796
一条SQL语句后连接数据库的Connection必须要关闭吗?
可以批处理sql语句,流程走完后关闭连接。
建议执行完一次数据库操作,就关闭数据库资源;
频繁的话,可以考虑数据库连接池,由连接池初始化一定数量的连接,每次程序跟连接池打交道,不直接跟数据库打交道,这样节省资源。
获取一个connection后,每次产生一个Statement,都相当于产生一个游标,每次操作完,便要关闭该statement。否则,如果一直只向数据库索取连接,但不关闭的话,那么数据库的statement连接耗尽时,便会抛出,游标超出最大数量的异常 ORA-01000: maximum open cursors exceeded 。
1.一般数据库访问量大的话,开启连接池
2.开启连接池以后,就像楼上所说,用完关闭。其实后台socket并没有关闭,等待下一次使用。在Java7中try(申请资源){}这种结构,离开时会自动调用close的
3.业务复杂的时候,并不能一次完成所有sql操作,所以用完必须关。
prepareStatement("sql语句"),可以连续使用。
安静的等待,年底老师可能比较忙,先学习其他的,望楼主采纳!
public class View { private static final String CONTEXT = "欢迎来到女神禁区:\n" + "下面是女神禁区的功能列表:\n" + "[MAIN/M]:主菜单\n" + "[QUERY/Q]:查看全部女神的信息\n" + "[GET/G]:查看某位女神的详细信息\n" + "[ADD/A]:添加女神信息\n" + "[UPDATE/U]:更新女神信息\n" + "[DELETE/D]:删除女神信息\n" + "[SEARCH/S]:查询女神信息(根据姓名、手机号来查询)\n" + "[EXIT/E]:退出女神禁区\n" + "[BREAK/B]:退出当前功能,返回主菜单"; private static final String OPERATION_MAIN = "MAIN"; private static final String OPERATION_QUERY = "QUERY"; private static final String OPERATION_GET = "GET"; private static final String OPERATION_ADD = "ADD"; private static final String OPERATION_UPDATE = "UPDATE"; private static final String OPERATION_DELETE = "DELETE"; private static final String OPERATION_SEARCH = "SEARCH"; private static final String OPERATION_EXIT = "EXIT"; private static final String OPERATION_BREAK = "BREAK"; public static void main(String[] args) { Scanner input = new Scanner(System.in); Goddess g = new Goddess(); GoddessAction ga = new GoddessAction(); System.out.println(CONTEXT); // 保持程序持续运行 String cpu = null; Integer step = 0; while (input.hasNext()) {// 如果有输入值,则返回true String in = input.next(); if (OPERATION_EXIT.equals(in.toUpperCase()) || OPERATION_EXIT.substring(0, 1).equals(in.toUpperCase())) { System.out.println("您已成功退出女神后宫"); break; } else if (OPERATION_MAIN.equals(in.toUpperCase()) || OPERATION_MAIN.substring(0, 1).equals(in.toUpperCase())) { System.out.println(CONTEXT); } else if (OPERATION_BREAK.equals(in.toUpperCase()) || OPERATION_BREAK.substring(0, 1).equals(in.toUpperCase())) { cpu = null; step = 0; System.out.println(CONTEXT); } else if (OPERATION_ADD.equals(in.toUpperCase()) || OPERATION_ADD.substring(0, 1).equals(in.toUpperCase()) || OPERATION_ADD.equals(cpu)) { cpu = OPERATION_ADD; if (step == 0) { System.out.println("请输入女神的[姓名]"); } else if (step == 1) { g.setUser_name(in); System.out.println("请输入女神的[年龄]"); } else if (step == 2) { g.setSex(1); g.setAge(Integer.parseInt(in)); System.out.println("请输入女神的[生日],格式为:yyyy-MM-dd"); } else if (step == 3) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date birthday = null; try { birthday = sdf.parse(in); g.setBirthday(birthday); System.out.println("请输入女神的[邮箱]"); } catch (ParseException e) { e.printStackTrace(); System.out.println("您输入的格式有误,请重新输入"); step = 2; } } else if (step == 4) { g.setEmail(in); System.out.println("请输入女神的[电话]"); } else if (step == 5) { g.setMobile(in); System.out.println("请输入添加人"); } else if (step == 6) { g.setCreate_user(in); g.setUpdate_user(in); g.setIsdel(1); try { ga.add(g); System.out.println("添加女神成功"); } catch (Exception e) { e.printStackTrace(); System.out.println("添加女神失败"); } } if (step == 6) { step = 0; } else { step++; } } else if (OPERATION_QUERY.equals(in.toUpperCase()) || OPERATION_QUERY.substring(0, 1).equals(in.toUpperCase())) { try { List<Goddess> list = ga.query(); for (Goddess goddess : list) { System.out.println(goddess.getId() + "号女神:" + goddess.getUser_name() + " 芳龄:" + goddess.getAge()); } } catch (Exception e) { e.printStackTrace(); } } else if (OPERATION_GET.equals(in.toUpperCase()) || OPERATION_GET.substring(0, 1).equals(in.toUpperCase())) { System.out.println("请输入需要查询的女神编号"); String in2 = input.next(); try { g = ga.query(Integer.valueOf(in2)); ga.show(g); } catch (Exception e) { e.printStackTrace(); } } else if (OPERATION_DELETE.equals(in.toUpperCase()) || OPERATION_DELETE.substring(0, 1).equals(in.toUpperCase())) { System.out.println("请输入要删除的女神"); String in2 = input.next(); try { ga.del(Integer.valueOf(in2)); System.out.println("删除女神成功"); } catch (Exception e) { e.printStackTrace(); System.out.println("删除女神失败"); } } else if (OPERATION_UPDATE.equals(in.toUpperCase()) || OPERATION_UPDATE.substring(0, 1).equals(in.toUpperCase()) || OPERATION_UPDATE.equals(cpu)) { cpu = OPERATION_UPDATE; if (step == 0) { System.out.println("进去更新"); System.out.println("请输入需要修改的女神编号"); } else if (step == 1) { g.setId(Integer.valueOf(in)); System.out.println("请输入女神的[姓名]"); } else if (step == 2) { g.setUser_name(in); System.out.println("请输入女神的[年龄]"); } else if (step == 3) { g.setSex(1); g.setAge(Integer.parseInt(in)); System.out.println("请输入女神的[生日],格式为:yyyy-MM-dd"); } else if (step == 4) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date birthday = null; try { birthday = sdf.parse(in); g.setBirthday(birthday); System.out.println("请输入女神的[邮箱]"); } catch (ParseException e) { e.printStackTrace(); System.out.println("您输入的格式有误,请重新输入"); step = 2; } } else if (step == 5) { g.setEmail(in); System.out.println("请输入女神的[电话]"); } else if (step == 6) { g.setMobile(in); System.out.println("请输入更新人"); } else if (step == 7) { g.setUpdate_user(in); g.setIsdel(1); try { ga.edit(g); System.out.println("更新女神成功"); } catch (Exception e) { e.printStackTrace(); System.out.println("更新女神失败"); } } if (step == 7) { step = 0; } else { step++; } } else if (OPERATION_SEARCH.equals(in.toUpperCase()) || OPERATION_SEARCH.substring(0, 1).equals(in.toUpperCase()) || OPERATION_SEARCH.equals(cpu)) { cpu = OPERATION_SEARCH; List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); Map<String, Object> map = new HashMap<String, Object>(); if (step == 0) { System.out.println("请输入搜索条件"); step++; } else if (in.equals("user_name")) { System.out.println("请输入搜索条件的值"); map.put("name", "user_name"); map.put("rela", "="); String in2 = input.next(); map.put("value", "'"+in2+"'"); list.add(map); try { List<Goddess> g3 = ga.query(list); ga.show(g3.get(0)); } catch (Exception e) { e.printStackTrace(); } } else if (!in.equals("user_name")) { System.out.println("请输入搜索条件的值"); map.put("name", in); String in2 = input.next(); map.put("rela", "like"); map.put("value", in2); list.add(map); try { List<Goddess> g3 = ga.query(list); ga.show(g3.get(0)); } catch (Exception e) { e.printStackTrace(); } } } else { System.out.println("您输入的值为:" + in); } } }
这是自己敲得代码,还没修改。我对GoddessDao里面的方法做了一些调整。“GET”部分的代码不要看。
java database connection summary
使用了,Integer.parseInt(String sb)
sb传入的值是:姚雪娟,应该输入一个整数范围的数字 (-2^31)到(2^31-1).
select * from “表名”