問題 ID、問題、解決策の 3 つの列を含む mysql データベースから行を削除するためのコードを教えてください。ブラウザから削除したい、つまりWebアプリケーションです。
3 に答える
問題にJDBC (Java Database Connectivity) API を使用することを検討してください。MySQL データベースを使用した Java Web アプリケーションの開発に関する次の簡単なチュートリアルをよく読むことをお勧めします。
https://blogs.oracle.com/JavaFundamentals/entry/creating_a_simple_web_application
http://www.javaguicodexample.com/javawebmysqljspjstljsf5.html
サンプルのサーブレットを次に示します。
ただし、これは単に実行方法を示すためのものであることを忘れないでください。生産的なシステムでこれを使用するべきではありません。これはデモンストレーションのためのものです。方法を見て、方法を学んでください。このサーブレットは正常に動作するはずですが、やらなければならないことがいくつかあります。
とにかく、まだ読んでいない場合は、これらのドキュメントを読む必要があります
http://docs.oracle.com/javaee/5/tutorial/doc/bnadp.html
http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html
これを書いている間、私が考慮していないこと:
リクエストパラメータ
リクエスト パラメータの 1 つが見つからない場合、例外がスローされます。この状況を処理するためのより良い方法が必要です。
接続プーリング
この例では、すべてのリクエストでデータベースへの接続を開きます。接続を開くには時間がかかります。したがって、誰もが接続プールを使用します。このライブラリ/サーバーは、データベースへの指定された量の接続を開きます。データベースにアクセスする必要があるたびに、このプールから取得し、終了したらプールに戻します。
安全
このサーブレットのアドレスを知っている人は、それを使用してテーブル内の任意の行を簡単に削除できます。それを確保するのはあなたの仕事です。
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 から任意のサーブレットへのリンクを作成する必要があります。そして、そのリンクを使用して、削除されたレコードIDをパラメータとして渡し、指定された行をデータベースから削除するためにサーブレット内にコードを記述する必要があります。そして、前にクリックしたリンクと同じページに戻ります。