国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java學生信息管理系統設計

2019-11-26 13:33:25
字體:
來源:轉載
供稿:網友

本例的學生信息添加進入數據庫的事務(可以提交事務,事務回滾,用本地線程完善)

主頁面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html> <head> <title>學生信息管理</title> </head> <body> <a href='<c:url value="/query"/>?cmd=query'>查看學生信息</a> <br><br> <!--  <a href="<c:url value='/StudServlet?cmd=save' />">學生信息添加</a> --> <h2>學生信息添加</h2> <form action='<c:url value="/query"/>?cmd=add' method="post"> 姓名:<input type="text" name="name"/><br><br> <fieldset style="border: solid;border-color: red;width: 250px;"> <legend>圖書1</legend> 書名:<input type="text" name="book"/><br><br> 價格:<input type="text" name="price"/> </fieldset> <br> <fieldset style="border: solid;border-color:green;width: 250px;"> <legend>圖書2</legend> 書名:<input type="text" name="book"/><br><br> 價格:<input type="text" name="price"/> </fieldset> <br><br> <input type="submit" value="提交"/><br><br> </form> </body></html>

獲取數據庫連接的工具ConnUtils5.java

package cn.hncu.utils;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.sql.DriverManager;import java.util.ArrayList;import java.util.List;import java.util.Properties;public class ConnUtils5 { //本地線程管理對象,用于實現: 同一個線程獲取的連接是同一個 private static ThreadLocal< Connection> t=new ThreadLocal<Connection>(); private final static List<Connection> pool=new ArrayList<Connection>(); private static int SIZE;//由資源文件讀取 private ConnUtils5(){ } static{ Properties p=new Properties(); try { //下面這種方式在純Java項目中可以讀取到classpath下的資源文件,但無法讀取JavaEE項目的。因為Tomcat把系統的默認類加載器改了 //p.load( ClassLoader.getSystemClassLoader().getSystemResourceAsStream("jdbc.properties"));// p.load(ClassLoader.getSystemResourceAsStream("jdbc.properties")); //讀取Web項目的classpath下的資源文件,用這個可以 p.load(ConnUtils3.class.getClassLoader().getResourceAsStream("jdbc.properties")); String driver=p.getProperty("driver"); String url=p.getProperty("url"); String name=p.getProperty("username"); String pwd=p.getProperty("password"); String ssize=p.getProperty("size"); SIZE=Integer.parseInt(ssize); Class.forName(driver); for(int i=0;i<SIZE;i++){ final Connection con=DriverManager.getConnection(url,name,pwd); System.out.println("con=="+con); //更改conn.close()方法 //用代理模式生成一個增強版的conn對象,把它的close()方法攔截更改掉 Object nCon=Proxy.newProxyInstance(  ConnUtils3.class.getClassLoader(),   // conn.getClass().getInterfaces(),   //后面這種方式不行,應該是驅動中的實現類和我們當前程序不在同一空間(類加載器不同)   new Class[]{Connection.class},   new InvocationHandler() {  @Override  public Object invoke(Object proxy, Method method, Object[] args)   throws Throwable {  if(method.getName().equals("close")){   System.out.println("還回一個鏈接:"+(Connection)proxy);   pool.add((Connection)proxy);   return null;  }  return method.invoke(con, args);  } }); pool.add((Connection)nCon); } } catch (Exception e) { e.printStackTrace(); } } public static synchronized Connection getConnection(){ //先從t中拿,如果有就拿出去,如果沒有再到池中拿且把該對象放到t中 Connection con=t.get(); if(con==null){ if(pool.size()<=0){ System.out.println("池中連接沒有了..."); try {  Thread.sleep(1000); } catch (InterruptedException e) {  e.printStackTrace(); } return getConnection(); } con=pool.remove(0); t.set(con);//放到t中 } return con;//拿一個移一個 }}

資源文件jdbc.properties

##MySQLdriver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/hncu?useUnicode=true&characterEncoding=utf-8username=rootpassword=1234size=3##Oracle#driver=oracle.jdbc.driver.OracleDriver#url=jdbc:oracle:thin:@127.0.0.1:1521:orcl#username=scott#password=tiger

值對象
Stud.java

package cn.hncu.domain;import java.util.ArrayList;import java.util.List;/* * 一對多中的 “一”方 值對象的建法 */public class Stud { private String id; private String name; //※專為“多”方添加一個集合---體現多表中的“一對多關系” private List<Book> books=new ArrayList<Book>();//注意,該集合要在構造時或之前就new出來。 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Book> getBooks() { return books; } public void setBooks(List<Book> books) { this.books = books; } @Override public String toString() { return "id=" + id + "," + name + "," + books; }}

Book.java

package cn.hncu.domain;/* * 一對多中的 “多”方 值對象的建法 */public class Book { private Integer id; //基本數據類型全部用包裝類的聲明,為以后使用框架做技術準備---包裝類能夠兼容框架(因為一般框架都會使用類反射) private String name; private Double price; //※專為“一”方添加一個對象類型的變量(注意,不用studid)---體現多表中的“一對多關系” private Stud s;//設置主人 //private String studid;//★★不要這樣設 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } public Stud getS() { return s; } public void setS(Stud s) { this.s = s; } /* * 多表關聯時的toString()方法要注意一個陷阱,就是一方輸出另一方,同時另一方又反過來輸出前一方,形成無窮遞歸! */ @Override public String toString() { return "id=" + id + "," + name + "," + price;//這里不能輸出Stud對象,否則無窮遞歸 }}

stud層的servlet層

主站蜘蛛池模板: 灵宝市| 神农架林区| 会宁县| 邓州市| 定边县| 嫩江县| 临江市| 平谷区| 安西县| 蒲江县| 黑龙江省| 长丰县| 永昌县| 太和县| 固始县| 澎湖县| 漠河县| 东平县| 玉林市| 崇信县| 江油市| 双桥区| 大新县| 孝昌县| 丹东市| 正定县| 岳池县| 兴化市| 股票| 凤山县| 彩票| 阿城市| 仁寿县| 枣强县| 桂林市| 武功县| 固阳县| 营口市| 鄯善县| 鸡西市| 永善县|