java ee database

<tr><td>验证码:</td><td><input type="text" name="verifycode"></td><td><img src="image.jsp" onclick="this.src='image.jsp'" name="verify">
<input type="button" onclick="document.userlogin.verify.src='image.jsp'" value="看不清,换一张"></td>
</tr>

通常很多浏览器在点击后,这个验证码不会改变,那是因为浏览器使用了缓存技术,所以就需要去除缓存来更新验证码(页面),加带时间参数具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>欢迎来到注册页面 </title>
    
<%--<script type="text/javascript" charset="gb2312" src="verify.js">

</script>
  --%>
  <script type="text/javascript">
  function checkForm()
  {
	  var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
//邮箱正则表达式
	  if(document.form1.userName.value.length==0)
		  {
		  	alert("请输入用户名!");
		  	document.form1.userName.focus();
		  	return false;
		  }
	  if(document.form1.pwd.value.length==0)
	  {
	  	alert("请输入密码!");
	  	document.form1.pwd.focus();
	  	return false;
	  }
	  if(document.form1.pwd.value!=document.form1.repwd.value)
		  {
		  	alert("两次输入的密码不一致!");
		  	document.form.pwd.focus();
		  	return false;
		  
		  }
	  if(!myreg.test(document.form1.verifyEmail.value))
		  {
		  	alert("请输入有效的邮箱");
		  	document.form1.verifyEmail.focus();
		  	return false;
		  
		  }
	  if(document.form1.verifycode.value.length==0)
		  {
		  	alert("请输入验证码!!");
		  	document.form1.verifycode.focus();
		  	return false;
		  
		  }
	  
	  return true;
	  
	  
  }
  function rename()
  {
  	var testname=document.getElementById("uname").value;
  	window.location.href="rename.jsp?name="+testname;
  }
  function changeImg(img)
  {
  	img.src = "img.jsp?"+new Date();
  }
  </script>
  </head>
  
  <body>
<form method="post" name="form1"  action="proReg.jsp" onsubmit="return checkForm()">
<table align="center">
<tr>
<td>用户名:
</td>
<td><input type="text" name="userName" id="uname">
</td>
<td> <input type="button" value="是否重名" onclick="rename()">
<!-- <a href="rename.jsp?"+name=document.form1.userName>是否重名 </a> -->
</td>
</tr>
<tr>
<td>密码:
</td>
<td><input type="password" name="pwd" id="upwd">
</td>
</tr>
<tr>
<td>确认密码:
</td>
<td><input type="password" name="repwd" id="reupwd">
</td>
</tr>
<tr>
<td>验证邮箱:
</td>
<td><input type="text" name="verifyEmail" >
</td>
</tr>
<tr>
<td>验证码:
</td>
<td><input type="text" name="verifycode">
</td>

<td><img  alt="点击换一张" title="点击换一张" src="img.jsp" onclick="changeImg(this)" name="verify">
</td>
</tr>

<tr >
<td colspan=2>
<input type="submit" value="注册" >
        
<input type="reset"  value="重置"/>
</td>
</tr>
</table>


</form>

  </body>
</html>




Statement statement=con.createStatement(int type,int concurrency);

   Type(滚动方式)默认值:TYPE_FORWARD_ONLY
   concurrency(数据一致性)默认值:COUCUR_READ_ONLY
   此时,指针只能向前移动,而且ResultSet对象中的数据只能读而不能修改;
   type的取值决定滚动方式,取值还可以是:
      TYPE_SCROLL_SENSITIVE
      指针能够向前或向后自由移动,其他ResultSet对象变动指针时,会影响指针的位置;
      TYPE_SCROLL_INSENSITIVE
      指针能够向前或向后自由移动,其他ResultSet对象变动指针时,不会影响指针的位置。
 
     Concurrency取值决定是否可以用数据集更新数据库
             CONCUR_READ_ONLY:
            不能用结果集更新数据库中的表;
            CONCUR_UPDATEABLE:
            ResultSet对象中的数据可以读也可以修改,不能用结果集更新数据库中的表;
[JAVA中Resultset是一个类 而不是一个方法。记住啊。
结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。

结果集读取数据的方法主要是getXXX(),它的参数可以是整型,表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。如果对应那列时空值,XXX是对象的话返回XXX型的空值,如果XXX是数字类型,如Float等则返回0,boolean返回false。使用getString()可以返回所有的列的值,不过返回的都是字符串类型的。XXX可以代表的类型有:基本的数据类型如整型(int),布尔型(Boolean),浮点型(Float,Double)等,比特型(byte),还包括一些特殊的类型,如:日期类型(java.sql.Date),时间类型(java.sql.Time),时间戳类型(java.sql.Timestamp),大数型(BigDecimal和BigInteger等)等。还可以使用getArray(int colindex/String columnname),通过这个方法获得当前行中,colindex所在列的元素组成的对象的数组。使用getAsciiStream(
int colindex/String colname)可以获得该列对应的当前行的ascii流。也就是说所有的getXXX方法都是对当前行进行操作。

结果集从其使用的特点上可以分为四类,这四类的结果集的所具备的特点都是和Statement语句的创建有关,因为结果集是通过Statement语句执行后产生的,所以可以说,结果集具备何种特点,完全决定于Statement,当然我是说下面要将的四个特点,在Statement创建时包括三种类型。首先是无参数类型的,他对应的就是下面要介绍的基本的ResultSet对应的Statement。下面的代码中用到的Connection并没有对其初始化,变量conn代表的就是Connection对应的对象。SqlStr代表的是响应的SQL语句。

1、    最基本的ResultSet。
之所以说是最基本的ResultSet是因为,这个ResultSet他起到的作用就是完成了查询结果的存储功能,而且只能读去一次,不能够来回的滚动读取。这种结果集的创建方式如下: 

Statement st = conn.CreateStatement
ResultSet rs = Statement.excuteQuery(sqlStr);

由于这种结果集不支持,滚动的读去功能所以,如果获得这样一个结果集,只能使用它里面的next()方法,逐个的读去数据。 

2    可滚动的ResultSet类型。
这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的方法。

Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)

其中两个参数的意义是:
resultSetType是设置ResultSet对象的类型可滚动,或者是不可滚动。取值如下:
       ResultSet.TYPE_FORWARD_ONLY只能向前滚动
       ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
       ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
       ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。

Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,
                          ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.excuteQuery(sqlStr);

用这个Statement执行的查询语句得到的就是可滚动的ResultSet。

3、    可更新的ResultSet
这样的ResultSet对象可以完成对数据库中表的修改,但是我知道ResultSet只是相当于数据库中表的视图,所以并不时所有的ResultSet只要设置了可更新就能够完成更新的,能够完成更新的ResultSet的SQL语句必须要具备如下的属性:
    a、只引用了单个表。
    b、不含有join或者group by子句。
    c、那些列中要包含主关键字。
    具有上述条件的,可更新的ResultSet可以完成对数据的修改,可更新的结果集的创建方法是:


Statement st = createstatement(Result.TYPE_SCROLL_INSENSITIVE,Result.CONCUR_UPDATABLE)


4、    可保持的ResultSet
正常情况下如果使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置ResultSet是否关闭。要完成这样的ResultSet的对象的创建,要使用的Statement的创建要具有三个参数,这个Statement的创建方式也就是,我所说的Statement的第三种创建方式。如下:




Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
ResultSet rs = st.excuteQuery(sqlStr);

前两个参数和两个参数的createStatement方法中的参数是完全相同的,这里只介绍第三个参数:
       resultSetHoldability表示在结果集提交后结果集是否打开,取值有两个:
       ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。
     ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。

 

jsp连接数据库的步骤和方法

前提:
建立ODBC系统数据源
1.Class.forName()  //加载驱动程序类
2.Connection conn = DriverManager.getConnection(url,username,pwd)//建立数据库连接对象
3.Statement stmt = conn.createStatement();//建立statement对象
4.stmt.executeQuery(sql);发送sql语句给数据库返回执行结果
5.显示执行结果


jdbc-odbc bridge
1.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");操作不同品牌数据库的驱动程序类都相同JdbcOdbcDriver
2.conn=DriverManager.getConnection("jdbc:odbc:grade");
jdbc:odbc:grade 分别是协议:子协议:数据源名称。格式也都是相同,不同数据库要更改数据源名称
3.
4.
5.

odbc操作不同品牌数据库的5个步骤代码均相同。不同点在jdbc:odbc:grade中grade数据源名称,用户名密码。


jdbc操作数据库
1.下载所操作的数据库jdbc驱动程序包。
2.
将驱动程序包copy到web-inf/lib目录中

将驱动程序包copy到D:\apache-tomcat-7.0.25\lib目录中

myeclipse中对项目点击右键-》buildpath -》add external...添加。

3.Class.forName("com.mysql.jdbc.Driver")
不同数据库的驱动程序类不同,
mysql:com.mysql.jdbc.Driver
4.conn = DriverManager.getConnection(url,userName,password);
mysql
url:jdbc:mysql://localhost:3306/javaee
数据库连接字符串随着数据库不同而不同。

 

jdbc 连接不同品牌数据库的方法:

现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到一定程度的时候,可以考虑用MVC的模式开发。在练习这些代码的时候,你一定将jdbc的驱动程序放到服务器的类路径(web-inf文件夹)里,然后要在数据库里建一个表test,有两个字段比如为test1test2,可以用下面SQL建 
create table test(test1 varchar(20),test2 varchar(20) 
然后向这个表写入一条测试纪录 
那么现在开始我们的jsp和数据库之旅吧。 
一、jsp连接Oracle8/8i/9i数据库(用thin模式) 
testoracle.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
String url="jdbc:oracle:thin:@localhost:1521:orcl"; 
//orcl为你的数据库的SID 
String user="scott"; 
String password="tiger"; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
二、jsp连接Sql Server7.0/2000数据库 
testsqlserver.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; 
//pubs为你的数据库的 
String user="sa"; 
String password=""; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
三、jsp连接DB2数据库 
testdb2.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%

Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); 
String url="jdbc:db2://localhost:5000/sample"; 
//sample为你的数据库名 
String user="admin"; 
String password=""; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
四、jsp连接Informix数据库 
testinformix.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance(); 
String url = 
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver; 
user=testuser;password=testpassword"; 
//testDB为你的数据库名 
Connection conn= DriverManager.getConnection(url); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
五、jsp连接Sybase数据库 
testmysql.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance(); 
String url =" jdbc:sybase:Tds:localhost:5007/tsdata"; 
//tsdata为你的数据库名 
Properties sysProps = System.getProperties(); 
SysProps.put("user","userid"); 
SysProps.put("password","user_password"); 
Connection conn= DriverManager.getConnection(url, SysProps); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
六、jsp连接MySQL数据库 
testmysql.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
String url =

"jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" 
//testDB为你的数据库名 
Connection conn= DriverManager.getConnection(url); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html> 
七、jsp连接PostgreSQL数据库 
testmysql.jsp如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<%Class.forName("org.postgresql.Driver").newInstance(); 
String url ="jdbc:postgresql://localhost/soft" 
//soft为你的数据库名 
String user="myuser"; 
String password="mypassword"; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from test"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> 
您的第二个字段内容为:<%=rs.getString(2)%> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close(); 
%> 
</body> 
</html>

 

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值