就我现在对JSP的了解,我无法把产生错误的代码范围确定出来。但是要全部贴出来,肯定大家看着也会头大。所以麻烦大家能不能帮帮我,说下这个提示一般是什么错误。代码是网上找来学习的,稍微改了下但是遇到问题了。
registor.jsp文件<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'regester.jsp' starting page</title>
</head>
<body>
<form name="form1" method="post" action="register.jsp">
<input type="text" name="username" id="username">
<input type="password" name="password" id="password">
<input type="submit" name="Submit" value="提交">
</form>
<jsp:useBean id="user1" class="LRM.adduser" scope="page"/>
<%
try{
request.setCharacterEncoding("GBK");
String username=request.getParameter("username");
String password=request.getParameter("password");
user1.setUsername(username);
user1.setPassword(password);
user1.addNewUser();
}
catch(Exception e){
out.println(e.getMessage());
}
%>
</body>
</html>adduser.java文件package LRM; //导入java类库
import java.lang.*;
import java.sql.*;
//adduser由db派生出来,拥有db的成员变量和方法
public class adduser extends db {
//构建器
public boolean addNewUser(){
boolean boadduser=false;
try {
//进行用户注册的记录添加操作,生成sql语句
String sSql=new String("insert into db(regtime,username,password,email,homepage,signs)");
sSql=sSql+ " values(getdate(),'"+Username+"','"+Password+"','"+Email+"','"+Homepage+"','"+Signs+"');";
//一种调试的方法,可以打印出sql语句,以便于查看错误
System.out.println(sSql);
//调用父类的executeUpdate方法,并根据成功以否来设置返回值
if(super.executeUpdate(sSql))boadduser=true;
}
catch(Exception ex) { //出错处理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}finally{
//无论是否出错,都要返回值
return boadduser;
}
} //checkUser()方法用来检查用户名是否重复 //如果重复返回一个false
public boolean checkUser(){
boolean boadduser=false;
try {
//构建sql查询语句
String sSql="select * from db where username='"+Username+"'";
//调用父类的executeQuery方法
if((super.executeQuery(sSql)).next()){
//查询出来的记录集为空
boadduser=false;
}else{
boadduser=true;
}
}
catch(Exception ex) {
//出错处理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}finally{
//返回值
return boadduser;
}
}
public String getUsername(){
return Username;
}
public void setUsername(String newUsername){
//用户名有可能是中文,需要进行转换
Username =db.toChinese(newUsername);
}
//属性密码Password的get/set方法
public String getPassword(){
return Password;
}
public void setPassword(String newPassword){
Password = newPassword;
}
//属性Email的get/set方法
public String getEmail(){
return Email;
}
public void setEmail(String newEmail){
Email = newEmail;
}
//属性主页Homepage的get/set方法
public String getHomepage(){
return Homepage;
}
public void setHomepage(String newHomepage){
Homepage = newHomepage;
}
//属性主页Signs的get/set方法
public String getSigns(){
return Signs;
}
public void setSigns(String newSigns){
//签名有可能是中文,需要进行转换
Signs = db.toChinese(newSigns);
}
}db.java文件
package LRM;
import java.sql.*;
import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class db{ //成员变量初始化
Connection conn=null; //数据库连接
ResultSet rs = null; //记录集
String Username=""; //用户名
String Password=""; //密码
String Email=""; //email
String Homepage=""; //主页
String Signs=""; //签名
public db() {
try
{
//注册数据库驱动程序为Oracle驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(java.lang.ClassNotFoundException e)
{
//这样写是为了方便调试程序,出错打印mydb()就知道在什么地方出错了
System.err.println("mydb(): " + e.getMessage());
} }
//executeQuery方法用于进行记录的查询操作 //入口参数为sql语句,返回ResultSet对象
public ResultSet executeQuery(String sql) {
rs = null;
String url="jdbc:sqlserver://localhost:1433;DatabaseName=demodb";
String user="sa";
String pa="123";
try {
//建立数据库连接,使用SQLserver2005的一种thin连接方式,url为主机名字,数据库名字,后面的两个user为用户名,pa为密码
conn = DriverManager.getConnection(url,user,pa);
Statement stmt = conn.createStatement();
//执行数据库查询操作
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("db.executeQuery: " + ex.getMessage());
}
return rs;
}
//executeUpdate方法用于进行add或者update记录的操作
//入口参数为sql语句,成功返回true,否则为false
public boolean executeUpdate(String sql) {
boolean bupdate=false;
rs = null;
String url="jdbc:sqlserver://localhost:1433;DatabaseName=demodb";
String user="sa";
String pa="123";
try {
//建立数据库连接,使用SQLserver2005的一种thin连接方式,url为主机名字,数据库名字,后面的两个user为用户名,pa为密码
conn = DriverManager.getConnection(url,user,pa);
Statement stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
//如果不成功,bupdate就会返回0
if(rowCount!=0)bupdate=true;
}
catch(SQLException ex) {
//打印出错信息
System.err.println("db.executeUpdate: " + ex.getMessage());
}
return bupdate;
}
//toChinese方法用于将一个字符串进行中文处理 //否则将会是???这样的字符串
public static String toChinese(String strvalue) {
try{
if(strvalue==null)
{
return null;
}
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
}访问"http://localhost:8080/LRMS/register.jsp",提示:insert into db(regtime,username,password,email,homepage,signs) values(getdate(),,,,,)
db.executeUpdate: ',' 附近有语法错误。
数据库demodb里的表db里只设置了username跟password为非空,所以我在jsp页面只取了username跟password的值用于测试。不知道是不是跟这有关系?哎。
registor.jsp文件<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'regester.jsp' starting page</title>
</head>
<body>
<form name="form1" method="post" action="register.jsp">
<input type="text" name="username" id="username">
<input type="password" name="password" id="password">
<input type="submit" name="Submit" value="提交">
</form>
<jsp:useBean id="user1" class="LRM.adduser" scope="page"/>
<%
try{
request.setCharacterEncoding("GBK");
String username=request.getParameter("username");
String password=request.getParameter("password");
user1.setUsername(username);
user1.setPassword(password);
user1.addNewUser();
}
catch(Exception e){
out.println(e.getMessage());
}
%>
</body>
</html>adduser.java文件package LRM; //导入java类库
import java.lang.*;
import java.sql.*;
//adduser由db派生出来,拥有db的成员变量和方法
public class adduser extends db {
//构建器
public boolean addNewUser(){
boolean boadduser=false;
try {
//进行用户注册的记录添加操作,生成sql语句
String sSql=new String("insert into db(regtime,username,password,email,homepage,signs)");
sSql=sSql+ " values(getdate(),'"+Username+"','"+Password+"','"+Email+"','"+Homepage+"','"+Signs+"');";
//一种调试的方法,可以打印出sql语句,以便于查看错误
System.out.println(sSql);
//调用父类的executeUpdate方法,并根据成功以否来设置返回值
if(super.executeUpdate(sSql))boadduser=true;
}
catch(Exception ex) { //出错处理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}finally{
//无论是否出错,都要返回值
return boadduser;
}
} //checkUser()方法用来检查用户名是否重复 //如果重复返回一个false
public boolean checkUser(){
boolean boadduser=false;
try {
//构建sql查询语句
String sSql="select * from db where username='"+Username+"'";
//调用父类的executeQuery方法
if((super.executeQuery(sSql)).next()){
//查询出来的记录集为空
boadduser=false;
}else{
boadduser=true;
}
}
catch(Exception ex) {
//出错处理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}finally{
//返回值
return boadduser;
}
}
public String getUsername(){
return Username;
}
public void setUsername(String newUsername){
//用户名有可能是中文,需要进行转换
Username =db.toChinese(newUsername);
}
//属性密码Password的get/set方法
public String getPassword(){
return Password;
}
public void setPassword(String newPassword){
Password = newPassword;
}
//属性Email的get/set方法
public String getEmail(){
return Email;
}
public void setEmail(String newEmail){
Email = newEmail;
}
//属性主页Homepage的get/set方法
public String getHomepage(){
return Homepage;
}
public void setHomepage(String newHomepage){
Homepage = newHomepage;
}
//属性主页Signs的get/set方法
public String getSigns(){
return Signs;
}
public void setSigns(String newSigns){
//签名有可能是中文,需要进行转换
Signs = db.toChinese(newSigns);
}
}db.java文件
package LRM;
import java.sql.*;
import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class db{ //成员变量初始化
Connection conn=null; //数据库连接
ResultSet rs = null; //记录集
String Username=""; //用户名
String Password=""; //密码
String Email=""; //email
String Homepage=""; //主页
String Signs=""; //签名
public db() {
try
{
//注册数据库驱动程序为Oracle驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(java.lang.ClassNotFoundException e)
{
//这样写是为了方便调试程序,出错打印mydb()就知道在什么地方出错了
System.err.println("mydb(): " + e.getMessage());
} }
//executeQuery方法用于进行记录的查询操作 //入口参数为sql语句,返回ResultSet对象
public ResultSet executeQuery(String sql) {
rs = null;
String url="jdbc:sqlserver://localhost:1433;DatabaseName=demodb";
String user="sa";
String pa="123";
try {
//建立数据库连接,使用SQLserver2005的一种thin连接方式,url为主机名字,数据库名字,后面的两个user为用户名,pa为密码
conn = DriverManager.getConnection(url,user,pa);
Statement stmt = conn.createStatement();
//执行数据库查询操作
rs = stmt.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println("db.executeQuery: " + ex.getMessage());
}
return rs;
}
//executeUpdate方法用于进行add或者update记录的操作
//入口参数为sql语句,成功返回true,否则为false
public boolean executeUpdate(String sql) {
boolean bupdate=false;
rs = null;
String url="jdbc:sqlserver://localhost:1433;DatabaseName=demodb";
String user="sa";
String pa="123";
try {
//建立数据库连接,使用SQLserver2005的一种thin连接方式,url为主机名字,数据库名字,后面的两个user为用户名,pa为密码
conn = DriverManager.getConnection(url,user,pa);
Statement stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
//如果不成功,bupdate就会返回0
if(rowCount!=0)bupdate=true;
}
catch(SQLException ex) {
//打印出错信息
System.err.println("db.executeUpdate: " + ex.getMessage());
}
return bupdate;
}
//toChinese方法用于将一个字符串进行中文处理 //否则将会是???这样的字符串
public static String toChinese(String strvalue) {
try{
if(strvalue==null)
{
return null;
}
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}
}访问"http://localhost:8080/LRMS/register.jsp",提示:insert into db(regtime,username,password,email,homepage,signs) values(getdate(),,,,,)
db.executeUpdate: ',' 附近有语法错误。
数据库demodb里的表db里只设置了username跟password为非空,所以我在jsp页面只取了username跟password的值用于测试。不知道是不是跟这有关系?哎。
好像是你的sql语句写错了,你把错直接打出来,
这三个在拼sql之前先验证下如果为空则insert后面的对应三个列名不要写出来了
最后一个)后面的;去了就行了
明白,我只是用这个学习下带javabean的项目结构,刚接触JSP。数据库的表db里Email、Homepage、Signs 这三个属性是可以为空的。而且在db.java里都给它们设置成""值的,我不是很清楚会不会有影响,你觉得呢?
insert into db(regtime,username,password,email,homepage,signs) values(getdate(),user,password,'','','')sqlserver中不确定这样是否正确,空值的表示,一般用null,或者如果是空字符串的话,' ',长度为1。可以试验下把默认值置" "试试,或者测试这条sql先去掉这三个可为空字段试试。末尾;只是其中的一个小问题。