收录日期:2020/09/26 23:43:07 时间:2016/06/14 05:51:37 标签:Web 开发
实在无语了我,一开始以为是函数写的不对,可是用个main测试了一下是可以跑通的,下面是我jsp页面上的一段代码:
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<jsp:directive.page import="com.sample.TestDAO"/>
<jsp:directive.page import="java.sql.*"/>
<% 
   String deviceId = null;
   String devicePros = null;
   deviceId = request.getParameter("devices");
   devicePros = request.getParameter("pros");
   String name = null;
   TestDAO td = new TestDAO();
   ResultSet rs = td.ChooseDevice();
   ResultSet rsDevicePros = null;
   if (deviceId!=null){
      System.out.println(deviceId);
      name = td.ChooseDeviceName(deviceId); 
      rsDevicePros = td.ChooseDevicePros(name);  
   }
 %>
.....
下面是我的TestDAO 类文件:
package com.sample;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.sql.*;

public class TestDAO {

/**
 * @param args
 */
public class Jdbc{
public Connection getConnection(){
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/Electrical";
Connection con =  null;
Statement st;
ResultSet rs;
try{
Class.forName(driver);
con = DriverManager.getConnection(url, "root", "12345");
}catch(ClassNotFoundException ex){
System.out.println("Driver Error!");
ex.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成 catch 块
System.out.println("Connection Error!");
e.printStackTrace();
}
return con;
}
}

public ResultSet ChooseDevice() throws SQLException{
Jdbc con = new Jdbc();
Connection cn = con.getConnection();
String sql = " select Id,Name from devices ";
Statement s = null;
try {
s = cn.createStatement();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
ResultSet rs = s.executeQuery(sql);
return rs;
}
public ResultSet ChooseDevicePros(String deviceName) throws SQLException{
Jdbc con = new Jdbc();
Connection cn = con.getConnection();
System.out.println(deviceName);
String sql = " select id,properity,datatype from " + deviceName;
Statement s = null;
ResultSet rs = null;
try {
s = cn.createStatement();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
if(!deviceName.equals(null))
     rs = s.executeQuery(sql);
return rs;
}
public String ChooseDeviceName(String deviceId) throws SQLException{
Jdbc con = new Jdbc();
Connection cn = con.getConnection();
String sql = " select name from devices";// where Id = '" + deviceId + "'";
        System.out.println(sql);
Statement s = null;
try {
s = cn.createStatement();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
ResultSet rs = s.executeQuery(sql);
String name = null;
        while(rs.next())
         name = rs.getString(1);
return name;
}
public static void main(String[] args) throws SQLException {
// TODO 自动生成方法存根
TestDAO td = new TestDAO();
ResultSet rs = td.ChooseDevice();
while(rs.next())
System.err.println(rs.getString(1));
String name = td.ChooseDeviceName("1");
System.err.println(name);

}

}
我就是用这个main测试的,执行结果是正确的,运行那个jsp就报错:
1
2008-1-31 19:01:39 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1169)
at com.sample.TestDAO.ChooseDeviceName(TestDAO.java:73)
......

诸位高人指点一二吧。实在不知道怎么回事了。
你不是都System.out.println(sql);了吗,直接在控制台上看看输出的sql语句是不是有错就可以了。
是啊,问题就是jsp运行时压根没在控制台打印sql语句啊,main函数运行时完全没有错误啊。汗...
报错是execSQL时sql 有语法错误,System.out.println(sql)应该是执行了的,你在这一行打个断点,调试一下就知道了
晕 jsp 中怎么能写 打印语句呢 
楼上的同志,jsp中能有<%......%>吗? 里面不是写的java代码吗? 怎么就不能写打印语句呢?
public   ResultSet   ChooseDevicePros(String   deviceName)  这个方法中的Sql语句错了

String   sql   =   "   select   id,properity,datatype   from   "   +   deviceName; 


六楼,这句正确的应该怎么写啊?
首先你能告诉我  deviceName  是指的表名吗?  如果是,先看看那个值,你在调用这个方法之前取到了没有? 还有就看你的字段对应的是否正确? 可以把这句话在数据库工具里面直接执行一次 ......如果有问题,可以加我QQ 524537769 注 Java,我们一起讨论一下哦 ^.^

把手偷偷的放在了修女的腿上。。。  ZT javascript如何获取服务器时间,谢谢!急!!在线等 为什么表格新增一行后,取不到里面某列的值?急!!!!100分! 试问如何得到各个函数的返回值呢. 用DEPHI做的一个ACTIVEX控件,怎样放到ASP页面上? oralce 关于权限分配 有网站后台程序编写经验者,劳驾劳驾!! 关于UNIX平台向Linux平台移植的问题,散100分 请问以扩展名为.pdg是格式文件用什么才能打开它?? 请问高手一个我认为蛮有意义的问题~~ 怎样简写表字段? 求一select语句 学过了c++基础语法,是否需要学用c++描述的数据结构,然后再去学vc??? 请问:怎样用socket发送记录类型的数据? red hat 9 如何播放MP3 简单的第一个EJB的部署,客户端测试错误? 关于会话的问题!!!!!!!!!!!!!!!!!!!!!(在线等待) iiop 高手请进! 请大家快快帮我看看这个事务能不能执行成功! 救命!!!Ras报错??? 我使用ADO要把一表中10万多条数据取出来另保存, 请问如何来分段的取数据呢? 急送分 奇怪的dns的问题 无题 谁有Linux监控网页是否被篡改的程序代码? vc初学,问一个幼稚的问题. 关于UNIX平台向Linux平台移植的问题,散分100,急 急急!! 关于speedbutton 问题 IBM公司的招聘题---锻炼你的推理能力! 创业路漫漫,辛酸常相伴 -- 一对夫妻辛酸的创业故事。(感叹中国的创业环境!) 刚学C++,请问include<*.h>和include\"*.h\"的区别?