0

request.getParameter を使用して宣言した文字列が null または空かどうかを確認しようとしています。

しかし、このコードを実行しようとすると、エラーが発生し続けます。エラーは nullexception エラーです。

<%
String name = request.getParameter("name");
String acctnum = request.getParameter("acctnum");
String pin = request.getParameter("pin");
String balance = request.getParameter("balance");
out.println(name+acctnum+pin+balance);
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/jsp", "root", "");

String sql = "Insert into users(name, account_numer, pin, balance) values('"+name+"',     '"+acctnum+"', '"+pin+"', '"+balance+"')";
Statement stmt = conn.createStatement();
stmt.execute(sql);

conn.close();
if(name != null){
response.sendRedirect("index.jsp");
}

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
%>

私も . equals("") を試しましたが、役に立ちませんでした。

ここで間違っているのは、文字列が空かnullかを確認して、別のページにリダイレクトされないようにすることです。

ありがとうございました

4

2 に答える 2

2

に到達する前に例外が発生していると思いますif(name != null)。変数の初期化中にパラメーターを使用していsqlます。nullそれをしている間、文字列が存在することを期待していますか?

DB関連の操作を行う前に、nullチェックを行う必要があると思います:

if (nullChecksPassed) {
    Class.forName("");
    Connection conn = DriverManager.getConnection("");
    String sql = "";
    Statement stmt = conn.createStatement();
    stmt.execute(sql);
    conn.close();
}
if (name != null) {
    response.sendRedirect("index.jsp");
}
于 2013-02-25T07:38:03.370 に答える
2

StringUtilsApacheのクラス、より具体的にはメソッドをチェックする価値があるかもしれませんisEmpty(String str):

public static boolean isEmpty(String str) String が空 ("") か null かをチェックします。

StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false
StringUtils.isEmpty("bob") = false
StringUtils.isEmpty(" bob ") = false

注: このメソッドは、Lang バージョン 2.0 で変更されました。文字列をトリミングしなくなりました。その機能は isBlank() で利用できます。

パラメータ: str - チェックする文字列。null の場合もあります

戻り値: 文字列が空または null の場合は true

また、SQL クエリに準備済みステートメントを使用することもできます。あなたが持っているものは、SQL インジェクションを起こしやすいものです。

于 2013-02-25T07:39:11.200 に答える