Java servlet init方法无法创建mysql表-为什么?
我的JavaServletInit方法无法创建mysql表——我想知道原因。当我直接登录mysql并创建表时,生活是美好的,当我删除表并运行servlet-没有表时,servlet抛出一个异常(还没有完全发现)。代码如下所示:Java servlet init方法无法创建mysql表-为什么?,java,mysql,servlets,Java,Mysql,Servlets,我的JavaServletInit方法无法创建mysql表——我想知道原因。当我直接登录mysql并创建表时,生活是美好的,当我删除表并运行servlet-没有表时,servlet抛出一个异常(还没有完全发现)。代码如下所示: package ...; import ... // quite a bit @WebServlet("/MyClass") public class MyClass extends HttpServlet { public void init()
package ...;
import ... // quite a bit
@WebServlet("/MyClass")
public class MyClass extends HttpServlet {
public void init() throws ServletException {
try { Foo foo = Foo.getInstance();
foo.createTables();
} catch (Exception e) {
throw new ServletException("Error creating tables", e);
}
}
package ...;
import ... // quite a bit
public class Foo {
public static final Foo INSTANCE = new Foo();
public static Foo getInstance() {
return INSTANCE;
}
…//更多关于MyClass的东西
}
//Foo是一个看起来像这样的单身汉:
package ...;
import ... // quite a bit
@WebServlet("/MyClass")
public class MyClass extends HttpServlet {
public void init() throws ServletException {
try { Foo foo = Foo.getInstance();
foo.createTables();
} catch (Exception e) {
throw new ServletException("Error creating tables", e);
}
}
package ...;
import ... // quite a bit
public class Foo {
public static final Foo INSTANCE = new Foo();
public static Foo getInstance() {
return INSTANCE;
}
…//那就多吃些食物吧
public void createTables(){
try {
// first establish a connection
Connection connection = Foo.getInstance().getConnection(); // get connection est.
//东部标准时间。与数据库的连接—一旦设置了表,就可以正常工作
//Create a query.
Statement stmt = connection.createStatement();
String query = "CREATE TABLE IF NOT EXISTS survey (uuid_Survey VARCHAR(36) NOT NULL, "+
"top VARCHAR(40), " +
" likert VARCHAR(40), "+
" numerical VARCHAR(40), "+
" open VARCHAR(40), " +
" KEY ix_survey_uuid (uuid_Survey), "+
" PRIMARY KEY (uuid_Survey))";
ResultSet rs = stmt.executeQuery( query );
query = "CREATE TABLE IF NOT EXISTS result (" +
"uuid_Survey VARCHAR(36) NOT NULL, "+
"remoteAddress VARCHAR(15) NOT NULL, " +
"currentTime BIGINT NOT NULL, "+
" likert VARCHAR(40),"+
" numerical DOUBLE, " +
" open VARCHAR(40), "+
" PRIMARY KEY (uuid_Survey, remoteAddress, currentTime),"+
"FOREIGN KEY ix_survey_uuid (uuid_Survey) REFERENCES survey (uuid_Survey))" ;
rs = stmt.executeQuery( query );
connection.close();
} catch (Exception e) {
System.err.println("Error creating tables: " + e);
}
}
不能使用
stmt.executeQuery(查询)代码>
正如上面所说的-
ResultSet#executeQuery(字符串sql)
-此方法执行给定的sql语句,该语句返回单个ResultSet对象。其中sql—要发送到数据库的sql语句,通常为静态sql SELECT语句
您可能希望使用
像stmt.execute(查询)代码>
或
停止捕获和隐藏异常。至少打印他们的堆栈跟踪,以了解问题所在。我仍在寻找它-我编写了servlet以转到错误页面,不幸的是,该页面信息量不大(我希望错误消息等出现的地方为空)。查看我的tomcat日志,我找不到任何有用的东西。你找不到任何有用的东西,因为正如我所说的,你明确地阻止了一些有用的东西被打印出来。替换System.err.println(“创建表时出错:+e”)代码>通过抛出新的运行时异常(e)代码>,或至少通过e.printStackTrace()代码>我试着输入e.printStackTrace();但是jsp错误页面仍然没有显示任何有用的内容。catalina日志仍然没有显示任何有用的内容。