请建议我从包含三列问题ID、问题和解决方案的mysql数据库中删除一行的代码。我想从浏览器中删除它,即它是一个 Web 应用程序。
3 回答
您可以考虑使用JDBC(Java 数据库连接)API 来解决您的问题。我建议您仔细查看以下有关使用 MySQL 数据库开发 Java Web 应用程序的简单教程。
https://blogs.oracle.com/JavaFundamentals/entry/creating_a_simple_web_application
http://www.javaguicodexample.com/javawebmysqljspjstljsf5.html
这是一个示例 Servlet。
但请记住,这只是为了向您展示如何做,您不应该在生产系统中使用它!这更多是为了演示,看看它是如何做的并学习如何做。这个 servlet 应该可以正常运行,但是您必须做一些事情!
无论如何,如果您还没有阅读这些文件,您应该阅读这些文件
http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html
http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
我写这篇文章时没有考虑到的事情:
请求参数
如果找不到请求参数之一,则会抛出异常。您需要一种更好的方法来处理这种情况。
连接池
此示例将在每个请求上打开与数据库的连接。打开连接需要时间。因此每个人都使用连接池。此库/服务器打开指定数量的数据库连接。每次您需要访问数据库时,您都会从该池中获取它,如果您完成了,请将其返回到池中。
安全
知道这个 servlet 地址的人可以轻松地使用它来删除表中的任何行。这是你的工作来保护它。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
/**
* DON'T USE IN PRODUCTION, JUST FOR LEARNING PURPOSES
**/
public class MySqlServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
long problemId;
long problem;
long solution;
Object problemIdAsObject = request.getParameter("problemId");
Object problemAsObject = request.getParameter("problem");
Object solutionAsObject = request.getParameter("solution");
if ( problemIdAsObject == null ){
throw new ServletException("problemId has not been specified!");
}
if ( problemAsObject == null ){
throw new ServletException("problem has not been specified!");
}
if ( solutionAsObject == null ){
throw new ServletException("solution has not been specified!");
}
problemId = Long.valueOf( (String)problemIdAsObject );
problem = Long.valueOf( (String)problemAsObject );
solution = Long.valueOf( (String)solutionAsObject );
PreparedStatement statement = null;
Connection connectionToDatabase = null;
try{
connectionToDatabase = getConnection();
String sql = "DELETE FROM table WHERE problemid = ? and "+
"problem = ? and solution = ?";
statement = connectionToDatabase.prepareStatement(sql);
statement.setLong(1,problemId);
statement.setLong(2,problem);
statement.setLong(3,solution);
statement.execute();
}catch( SQLException sqle ){
throw new ServletException(sqle);
}catch( ClassNotFoundException cnfe ){
throw new ServletException(cnfe);
}finally{
try{
statement.close();
connectionToDatabase.close();
}catch( SQLException sqle ){
throw new ServletException(sqle);
}
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("OK");
out.println("</BODY></HTML>");
}
private Connection getConnection()
throws ClassNotFoundException,SQLException{
String userName = "user";
String password = "password";
String databaseName = "database";
String serverAddress = "localhost";
String connectionString = "jdbc:mysql://"+serverAddress+"/"+databaseName+
"?user="+userName+"&password="+password;
//If this line is not working, use this instead:
//Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(connectionString);
return connection;
}
}
伙计,这很简单,首先你必须从 jsp 链接到任何 servlet。通过该链接,您必须将已删除的记录 ID 作为参数传递并在 servlet 中编写代码以从数据库中删除给定的行。然后返回您单击上一个链接的同一页面。