在网页端进行添加和删除记录的操作。

声明:转自新浪博客,原地址:http://blog.sina.com.cn/s/blog_681aaa5501017x6k.html

转载此目的是为了自己学习记录笔记使用,如涉及到什么问题,请联系我。


将一个表里的数据在网页上显示出来,并且能在网页端进行添加和删除记录的操作。

  初成。效果如下:
JSP制作网页显示MySQL数据

  具体步骤:(在linux环境下操作)
  1)将excel里的数据load进
MySQL 数据库。
  2)tomcat的安装与配置。
  3)如何通过JDBC连接MySQL数据库。
  4)JSP如何实现数据的显示/添加/删除。


1)将excel里的数据load进mysql数据库。
 这一步可以写perl脚本,也可以直接使用MySQL的命令,也可以直接在excel里生成SQL的insert语句,或者存为CSV格式后导入。不过首先得建一个数据库,再建一个数据表。 下面的命令在MySQL里执行,创建一个名为 sequencing_records数据库,和一个名为 sequencingrecords的数据表,表中共有7栏。date和lane是int格式的,其余的为字符串格式。
create databasesequencing_records;
use  sequencing_records;
create table sequencingrecords(date INT NOT NULL, lane INT NOTNULL,sequencer VARCHAR(50),barcodes VARCHAR(500),directoryVARCHAR(50), filename VARCHAR(50), descriptionVARCHAR(500));

  1.1) 直接使用MySQL的命令。
     命令为LOAD DATAINFILE。在导入工作进行之前,需要注意要导入的文本文件使用的字符集,如果文本文件中含有ASCⅡ字符集无法表示的内容,那么应该用SETNAMES命令对其内容文本的字符集做出必要的设置。例如,如果文本文件使用了latin-1字符集,则先应运行SET NAMES'latin1'.   此外,要导入的文本文件必须置于mysql的data目录下的
sequencing_records数据库的目录下。 mysql的data 目录因系统而异,可在MySQL下运行show variables like'datadir%';查看。在/etc/my.cnf中也可查看或者修改MySQL的各种配置,包括data存放目录,修改完后重启生效。
LOAD DATA INFILE'mysql_data_directory/file_tobe_loaded' INTO TABLEsequencingrecords fields terminated by '\t' lines terminated by'\n';
     换行符的表示不一定总是'\n',windows下生成的文件,其换行符可能为'\r\n'.
   1.2)导入CSV格式的文本文件
     如果想把在windows环境下用excel创建的CSV文件导入Mysql,使用如下的导入选项:FIELDS TERMINATED BY',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n'
  1.3)在excel里生成SQL的insert语句。
     数据为A-G行,在H行输入如下的公式:
=CONCATENATE("insert intosequencingrecords(date,lane,sequencer,barcodes,directory,filename,description)values('",A1,"','",B1,"','",C1,"','",D1,"','",E1,"','",F1,"','",G1,"');")
     然后即可生成可直接在MySQl下运行的insert语句。
 
2)tomcat的配置。
   使用的java版本为:
    java version"1.6.0_26"
    Java(TM) SERuntime Environment (build 1.6.0_26-b03)
    JavaHotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)
   tomcat版本为:apache-tomcat-6.0.35。
   在tomcat的webapps目录下新建一个SEQ_RECORDS目录,在该目录中编写jsp文件。
   由于需要使用JDBC链接数据库,需要下载一个JDBC驱动程序包,下载地址http://dev.mysql.com/downloads/connector/j/。目前版本为
5.1.21。
   将mysql-connector-java-5.1.21-bin.jar文件放入tomcat的lib目录下。
   在~/.bash_profile中设置CLASSPATH,加上
mysql-connector-java-5.1.21-bin.jar的路径,例如 exportCLASSPATH=.:$HOME/tomcat_base/lib/mysql-connector-java-5.1.21-bin.jar
   进入tomcat的conf目录,在server.xml文件最后的</Host>前添加以下内容:
<Contextpath="/seq_records" docBase="SEQ_RECORDS" debug="5"reloadable="true" crossContext="true">
</Context>
    这样既可通过访问http://hostIP:8080/ seq_records/jspfile 来运行jsp。

3)如何通过JDBC连接MySQL数据库。
   以下的java程序通过JDBC链接mysql数据库。

import java.sql.DriverManager;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
import com.mysql.jdbc.ResultSetImpl;
import com.mysql.jdbc.Driver";

public class LinkMysql{
 public static void main(String[] args){
  try{
   Class.forName("com.mysql.jdbc.Driver").newInstance();
    Connectionconn =(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/sequencing_records","user","passwd");
    Statementstmt = (Statement)conn.createStatement();
   ResultSetImpl rst = (ResultSetImpl)stmt.executeQuery("select * from sequencingrecordsORDER BY date DESC");
   rst.last();
    int n =rst.getRow();
   System.out.println("Total records number:"+n);
   rst.beforeFirst();
    while(rst.next()){
       
System.out.println(rst.getString("date"));
       
System.out.println(rst.getString("lane"));
       
System.out.println(rst.getString("sequencer"));
       
System.out.println(rst.getString("barcodes"));
       
System.out.println(rst.getString("directory"));
       
System.out.println(rst.getString("filename"));
       
System.out.println(rst.getString("description"));
      }
   rst.close();
   stmt.close();
   conn.close();
   }
  catch(Exception e){
  
System.out.println("Error: " e.toString());
  }
 }
}
    程序开头的 importcom.mysql.jdbc.ResultSetImpl加载了一个名为 ResultSetImpl的class, ResultSetImpl在后面的程序中返回本次查询结果集。 在老版本的 JDBC驱动中,该class的名称为 com.mysql.jdbc.Result,而这一版本却变成了 ResultSetImpl。 在使用JDBC驱动前,注意查看 mysql-connector-java-5.1.21-bin.jar里面包含了哪些class,查看命令为jar-tf mysql-connector-java-5.1.21-bin.jar。注意正确使用class名称。
   
rst.last();int n =rst.getRow();调用rst里的last方法,将当前记录设置为查询结果的最后一条, getRow则提取该记录的编号。该编号即是这次查询的结果集的记录条目总数。用这个方法可以计算数据表中一共有多少条记录。
   
rst.beforeFirst();将当前记录设置为第一条,以便使用next方法从头开始遍历结果。

4)JSP如何实现数据的显示/添加/删除。
   这一步有有三个脚本。sequencingrecords.jsp,SeqAdd.jsp和SeqErase.jsp。
   
SeqAdd.jsp是添加记录用的,用到了java bean(To behonest,直到现在我也还不知道这个到底是什么)。因此首先得写一个用于数据输入的java程序,SeqData.java,用javac编译后将class文件放入tomcat的lib/seq目录下(新建seq目录),并将lib目录的路径添加进CLASSPATH。
   

SeqData.java
package seq;
public class SeqData {
    intdate;
    intlane;
    Stringsequencer;
    Stringbarcodes;
    Stringdirectory;
    Stringfilename;
    Stringdescription;

    public voidsetDate( int value )
    {
       date = value;
    }

    public voidsetLane( int value )
    {
       lane = value;
    }

    public voidsetSequencer( String value )
    {
       sequencer = value;
    }

    public voidsetBarcodes( String value )
    {
       barcodes = value;
    }

    public voidsetDirectory( String value )
    {
       directory = value;
    }

    public voidsetFilename( String value )
    {
       filename = value;
    }

    public voidsetDescription( String value )
    {
       description = value;
    }

    public intgetDate() { return date; }
    public intgetLane() { return lane; }
    publicString getSequencer() { return sequencer; }
    publicString getBarcodes() { return barcodes; }
    publicString getDirectory() { return directory; }
    publicString getFilename() { return filename; }
    publicString getDescription() { return description; }
}


sequencingrecords.jsp sequencingrecords数据表中读取数据并显示。并且可进行数据的添加和删除。
<%@ pageimport="java.sql.DriverManager" %>
<%@ page import="com.mysql.jdbc.Connection"%>
<%@ page import="com.mysql.jdbc.Statement"%>
<%@ page import="com.mysql.jdbc.ResultSetImpl"%>
<%@ page import="com.mysql.jdbc.Driver"%>
<%@ page import="seq.*" %>
<%@ page contentType="text/html"language="java" import="java.sql.*"%>

<html>
<head>
<style type="text/css">
table, td, th
{
border:2px solid green;
font-family:calibri;
border-collapse:collapse;
}
th
{
background-color:green;
color:white;
}
</style>
</head>

<body>
<h1style="font-family:georgia;color:green;text-align:center;">SequencingRecords of Qi Lab</h1>
<hr/ >
<pstyle="font-family:georgia;color:red;"><b>NOTICE!</b><br>Beforeyou add or delete sequencing records, please read the followinginstructions:</p>
<ulstyle="font-family:georgia;color:MidnightBlue;">
<li>ONLY English and numbers areallowed.</li>
<li>The format for "date" isYYYYMMDD, for example, August,7th, 2012 should be wrriten as20120807.</li>
<li>Use&ltbr&gt to seperate lines in afield.</li>
<li>To display some special symbolssuch as ' and  \ ,please add a "\" before them,otherwise it would go wrong. For example. if you want to display ',you should type \'.</li>
<li>When you click "Delete" button,records with the same "date" and "lane" would bedeleted.</li>
</ul>
<hr/ >

<pstyle="font-family:georgia;color:MidnightBlue;"><b>Addsequencingrecords</b></p>
<jsp:useBean id="seq" class="seq.SeqData"scope="session"/>
<FORM METHOD=POST ACTION="SeqAdd.jsp"style="font-family:georgia;color:MidnightBlue;">
Date <INPUT TYPE=TEXT NAME=date SIZE=20VALUE="<%= seq.getDate()%>"><BR>
Lane <INPUT TYPE=TEXT NAME=lane SIZE=20VALUE="<%= seq.getLane()%>"><BR>
Sequencer <INPUT TYPE=TEXT NAME=sequencer SIZE=50VALUE="<%= seq.getSequencer()%>"><BR>
Barcodes <INPUT TYPE=TEXT NAME=barcodes SIZE=200VALUE="<%= seq.getBarcodes()%>"><BR>
Directory <INPUT TYPE=TEXT NAME=directory SIZE=50VALUE="<%= seq.getDirectory()%>"><BR>
Filename <INPUT TYPE=TEXT NAME=filename SIZE=50VALUE="<%= seq.getFilename()%>"><BR>
Description <INPUT TYPE=TEXT NAME=descriptionSIZE=200 VALUE="<%= seq.getDescription()%>">
<P><INPUTTYPE=SUBMIT>
</FORM>

<hr/ >
<table>
<tr><th>Action</th><th>Date</th><th>Lane</th><th>Sequencer</th><th>Barcodes</th><th>Directory</th><th>Filename</th><th>Description</th></tr>

<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/sequencing_records","user","passwd");
Statement stmt = (Statement)conn.createStatement();
ResultSetImpl rst = (ResultSetImpl)stmt.executeQuery("select * from sequencingrecordsORDER BY date DESC");

rst.last();
int n = rst.getRow();
out.println("<pstyle=font-family:georgia;color:MidnightBlue;>NOTE</p>");
out.println("<ulstyle=font-family:georgia;color:MidnightBlue;><li>Theserecords are displayed in chronological order, from recent toremote.</li>");
out.println("<li>Total records numberfrom 2009-10-20 to date:<b>"+n+"</b></li></ul>");
out.println("<hr/ >");

rst.beforeFirst();
while (rst.next()){
   out.println("<tr>");
   out.println("<td><ahref=SeqErase.jsp?date="+rst.getString(1)+"&lane="+rst.getString(2)+"οnclick=\"return(confirm('Are you sure todelete?'))\">Delete</a></td>");
   out.println("<td>"+rst.getString("date")+"</td>");
   out.println("<td>"+rst.getString("lane")+"</td>");
   out.println("<td>"+rst.getString("sequencer")+"</td>");
   out.println("<td>"+rst.getString("barcodes")+"</td>");
   out.println("<td>"+rst.getString("directory")+"</td>");
   out.println("<td>"+rst.getString("filename")+"</td>");
   out.println("<td>"+rst.getString("description")+"</td>");
   out.println("</tr>");
}
rst.close();
stmt.close();
conn.close();
%>
</table>
</body>
</html>
     首先是标题和添加数据的NOTICE。实现效果如下:
JSP制作网页显示MySQL数据
   这里要注意的是如何在网页上显示一些特殊字符,比如<和>。<用
&lt,>用 &gt。
   数据的添加是通过 <jsp:useBean id="seq" class="seq.SeqData"scope="session"/>实现的,这里用到了SeqData.class。 <FORMMETHOD=POST ACTION="SeqAdd.jsp"style="font-family:georgia;color:MidnightBlue;">以及 </FORM>这两个标签之间的内容描述了具体输入的格式。实现效果如下:
JSP制作网页显示MySQL数据

 由于输入的数据要被insert进MySQL里,故必须遵循MySQL的一些语法,例如一些特殊字符,必须在前面加上\才能正确insert。此外,如果要在一个field内显示多行,用<br>做分隔符。
  输入的数据被保存在一个Bean里面(我猜是这样),传递给
SeqAdd.jsp进行下一步处理。
 out.println("<td><ahref=SeqErase.jsp?date="+rst.getString(1)+"&lane="+rst.getString(2)+"οnclick=\"return(confirm('Are you sure todelete?'))\">Delete</a></td>");这一句实现的效果是在点击DELETE按钮时,跳出一个对话框,问你是否确定删除记录。如果点击确定删除的话,则将这一记录的date和lane传递给 SeqErase.jsp,实现数据的删除。

 

SeqAdd.jsp 处理从web输入的数据,并且添加到数据库。
<%@ pageimport="seq.*" %>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="com.mysql.jdbc.Connection"%>
<%@ page import="com.mysql.jdbc.Statement"%>
<%@ page import="com.mysql.jdbc.ResultSetImpl"%>
<%@ page import="com.mysql.jdbc.Driver"%>

<jsp:useBean id="seq" class="seq.SeqData"scope="session"/>
<jsp:setProperty name="seq"property="*"/>

<%@ page contentType="text/html" language="java"import="java.sql.*"%>

<HTML>
<BODY>
Date: <%= seq.getDate()%><BR>
Lane: <%= seq.getLane()%><BR>
Sequencer: <%= seq.getSequencer()%><BR>
Barcodes: <%= seq.getBarcodes()%><BR>
Directory: <%= seq.getDirectory()%><BR>
Filename: <%= seq.getFilename()%><BR>
Description: <%= seq.getDescription()%><BR>

<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/sequencing_records","user","passwd");
Statement stmt = (Statement)conn.createStatement();
int date = seq.getDate();
int lane = seq.getLane();
String sequencer = seq.getSequencer();
String barcodes = seq.getBarcodes();
String directory = seq.getDirectory();
String filename = seq.getFilename();
String description = seq.getDescription();
stmt.executeUpdate("insert intosequencingrecords(date,lane,sequencer,barcodes,directory,filename,description)values('"+date+"','"+lane+"','"+sequencer+"','"+barcodes+"','"+directory+"','"+filename+"','"+description+"')");
stmt.close();
conn.close();
%>
</BODY>
</HTML>
<%response.sendRedirect("http://hostIP:8080/seq_records/
sequencingrecords.jsp");%>
  这个程序比较annoying的地方在于 stmt.executeUpdate()中insert语句的写法。详见这一句:
 
insertintosequencingrecords(date,lane,sequencer,barcodes,directory,filename,description)values('"+date+"','"+lane+"','"+sequencer+"','"+barcodes+"','"+directory+"','"+filename+"','"+description+"')。java向MySQL传递变量时,得这样写: '"+date+"'

 

SeqErase.jsp 这一步接受从 sequencingrecords.jsp传递过来的删除指令,根据指定的field将数据表里的记录删除。
<%@ pageimport="java.sql.DriverManager" %>
<%@ page import="com.mysql.jdbc.Connection"%>
<%@ page import="com.mysql.jdbc.Statement"%>
<%@ page import="com.mysql.jdbc.ResultSetImpl"%>
<%@ page import="com.mysql.jdbc.Driver"%>
<%@ page contentType="text/html" language="java"import="java.sql.*"%>

<HTML>
<BODY>
<%
String date0 = request.getParameter("date");
String lane0 = request.getParameter("lane");
int date = Integer.parseInt(date0);
int lane = Integer.parseInt(lane0);

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn =(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/sequencing_records","user","passwd");
Statement stmt = (Statement)conn.createStatement();
stmt.executeUpdate("delete from sequencingrecords WHEREdate='"+date+"' AND lane='"+lane+"'");
stmt.close();
conn.close();
out.println(date);
out.println(lane);
%>
<br/>
<p>The record has beendeleted!</p>
</BODY>
</HTML>
<%response.sendRedirect("http://hostIP:8080/seq_records/
sequencingrecords.jsp");%>
    由于 sequencingrecords.jsp传递过来的date和lane是字符串格式的,而MySQL里的定义是int格式的。必须先将之转化为int格式才能使用。


   由于java和html都是这十几天内突击学的,好多东西一知半解,一些东西比如java bean还有 request.getParameter之类的 我也不知道怎么实现的,好在最终还是能work了~如有不当之处,请不吝赐教~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值