【发布时间】:2014-07-19 05:56:58
【问题描述】:
我是 java web 开发的新手。我正在尝试开发一个项目。我收到了SQLException 错误。
这是我的 servlet 代码:
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// TODO Auto-generated method stub
res.setContentType("text/html");
PrintWriter pw=res.getWriter();
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ocp2","root", "");
ps=con.createStatement();
RequestDispatcher rr;
String courseid=req.getParameter("courseid");
String coursename=req.getParameter("coursename");
String s1=req.getParameter("sday");
String s2=req.getParameter("smonth");
String s3=req.getParameter("syear");
String sdate=s1+'-'+s2+'-'+s3;
String s4=req.getParameter("eday");
String s5=req.getParameter("emonth");
String s6=req.getParameter("eyear");
String edate=s4+'-'+s5+'-'+s6;
String duration=req.getParameter("duration");
String fee=req.getParameter("fee");
pw.println("insert into course values('"+courseid+"','"+coursename+"','"+sdate+"','"+edate+"','"+duration+"',"+fee+")");
ps.executeUpdate("insert into course values('"+courseid+"','"+coursename+"','"+sdate+"','"+edate+"','"+duration+"',"+fee+")");
con.commit();
rr= req.getRequestDispatcher("incousuc.html");
rr.forward(req,res);
} catch(ClassNotFoundException e) {
pw.println("exception"+e);
} catch(SQLException e) {
pw.println("SQL EXCEPTION");
pw.println("TRY AGAIN");
} catch(Exception e) {
pw.println("can't load driver"+e.getMessage());
}
}
这是我的 HTML 代码:
</table>
</td>
<td width="75%" align="center">
<h2>New Course Details</h2>
<form name="facreg" onsubmit="return check()" action="./inscourse" method="post">
<table width="500" height="30" border="0">
<tr>
<td>
<center>courseid</center>
</td>
<td>
<input id="courseid" name="courseid" type="text" size="50" maxlength="100" value="">
</td>
</tr>
<tr>
<td>
<center>coursename</center>
</td>
<td>
<input id="couname" name="couname" type="text" size="50" maxlength="100" value="">
</td>
</tr>
<tr>
<td>StartingDate</td>
<td>
<select name="sday" size="">
<option value=01>1</option>
<option value=02>2</option>
<option value=03>3</option>
<option value=04>4</option>
<option value=05>5</option>
<option value=06>6</option>
<option value=07>7</option>
<option value=08>8</option>
<option value=09>9</option>
<option value=10>10</option>
<option value=11>11</option>
<option value=12>12</option>
<option value=13>13</option>
<option value=14>14</option>
<option value=15>15</option>
<option value=16>16</option>
<option value=17>17</option>
<option value=18>18</option>
<option value=19>19</option>
<option value=20>20</option>
<option value=21>21</option>
<option value=22>22</option>
<option value=23>23</option>
<option value=24>24</option>
<option value=25>25</option>
<option value=26>26</option>
<option value=27>27</option>
<option value=28>28</option>
<option value=29>29</option>
<option value=30>30</option>
<option value=31>31</option>
</select>
<select name="smonth" size="">
<option value="Jan">Jan</option>
<option value="Feb">Feb</option>
<option value="Mar">Mar</option>
<option value="Apr">Apr</option>
<option value="May">May</option>
<option value="Jun">Jun</option>
<option value="Jul">Jul</option>
<option value="Aug">Aug</option>
<option value="Sep">Sep</option>
<option value="Oct">Oct</option>
<option value="Nov">Nov</option>
<option value="Dec">Dec</option>
</select>
<input id="syear" name="syear" type="text" size="8" maxlength="4" value="" onkeypress=checknumeric()>(yyyy)
</td>
</tr>
<tr>
<td>EndingDate</td>
<td>
<select name="eday" size="">
<option value=01>1</option>
<option value=02>2</option>
<option value=03>3</option>
<option value=04>4</option>
<option value=05>5</option>
<option value=06>6</option>
<option value=07>7</option>
<option value=08>8</option>
<option value=09>9</option>
<option value=10>10</option>
<option value=11>11</option>
<option value=12>12</option>
<option value=13>13</option>
<option value=14>14</option>
<option value=15>15</option>
<option value=16>16</option>
<option value=17>17</option>
<option value=18>18</option>
<option value=19>19</option>
<option value=20>20</option>
<option value=21>21</option>
<option value=22>22</option>
<option value=23>23</option>
<option value=24>24</option>
<option value=25>25</option>
<option value=26>26</option>
<option value=27>27</option>
<option value=28>28</option>
<option value=29>29</option>
<option value=30>30</option>
<option value=31>31</option>
</select>
<select name="emonth" size="">
<option value="Jan">Jan</option>
<option value="Feb">Feb</option>
<option value="Mar">Mar</option>
<option value="Apr">Apr</option>
<option value="May">May</option>
<option value="Jun">Jun</option>
<option value="Jul">Jul</option>
<option value="Aug">Aug</option>
<option value="Sep">Sep</option>
<option value="Oct">Oct</option>
<option value="Nov">Nov</option>
<option value="Dec">Dec</option>
</select>
<input id="eyear" name="eyear" type="text" size="8" maxlength="4" value="" onkeypress=checknumeric()>(yyyy)
</td>
</tr>
<tr>
<td>
<center>duration</center>
</td>
<td>
<input id="duration" name="duration" type="text" size="50" maxlength="100" value="">
</td>
</tr>
<tr>
<td>
<center>Fee</center>
</td>
<td>
<input id="fee" name="fee" type="text" size="50" maxlength="100" value="" onkeypress="checknumeric()">
</td>
</tr>
<tr>
<td colspan=2>
<center>
<input name="submit" type="submit" value="SUBMIT">
<input name="reset" type="reset" value="RESET">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
当我运行这段代码时: 我收到以下错误:
Jul 19, 2014 11:36:18 AM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load java.net.BindException. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1588)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at com.mysql.jdbc.SQLError.createLinkFailureMessageBasedOnHeuristics(SQLError.java:1275)
at com.mysql.jdbc.exceptions.jdbc4.CommunicationsException.<init>(CommunicationsException.java:60)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3321)
at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1667)
at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4322)
at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1348)
at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2679)
at java.lang.System$2.invokeFinalize(Unknown Source)
at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
at java.lang.ref.Finalizer.access$100(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
Jul 19, 2014 11:36:18 AM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.ProfilerEventHandlerFactory. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1588)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4346)
at com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1348)
at com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2679)
at java.lang.System$2.invokeFinalize(Unknown Source)
at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
at java.lang.ref.Finalizer.access$100(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
而且我的数据库也没有更新。 谁能告诉我我在哪里做错了?我该如何解决?
【问题讨论】:
-
显示 SQLException。
-
只是 SQLException 没有用,给我们看它显示的消息。
-
能否将 SQL Exception 的 catch 块改为读取
pw.println("SQL EXCEPTION "+e.getMessage());并在此处发布结果?这将有助于人们了解异常的实际含义。 -
我变了。现在它显示如下... 信息:非法访问:此 Web 应用程序实例已被停止。无法加载 com.mysql.jdbc.ProfilerEventHandlerFactory。最终的后续堆栈跟踪是由出于调试目的引发的错误以及试图终止导致非法访问的线程引起的,并且没有功能影响。 java.lang.IllegalStateException
-
我最疯狂的猜测是您正在尝试将字符串值设置为 courseId。第一个值不应被单引号括起来。插入语句中的最后两个字段也可能存在问题。 P.S:不要只更改 println 行。也更改 executeUpdate 行