0

テキストフィールドのあるフォームがあります。人々が同じ名前を再び保存できないように、テキスト フィールドのエントリを一意にしたいと考えています。

テーブル列でフィールドを一意にすることはできますか?

また

このフィールドを一意にする JS コードをどのように記述すればよいでしょうか?

これは私がバックエンドで行っていることです。

public static boolean isUniqueShortName(String sname)
throws DataObjectException
{
    return isUniqueShortName(sname, null);
}


public static boolean isUniqueName(String sname, BigDecimal id)
throws DataObjectException
{

    final String SELECT_SQL = "SELECT COUNT(*) FROM LISTS WHERE LIST_NAME = ? AND ID <> ?";
    final String SELECT_SQL2 = "SELECT COUNT(*) FROM LISTS WHERE LIST_NAME = ?";

    boolean exists = false;
    Connection conn = DataObjectConnectionPool.getInstance().getConnection();
    PreparedStatement pstmt = null;
    ResultSet result = null;

    try
    {
        // determine SQL
        String SQL = null;
        if (list_id != null)
        {
            SQL = SELECT_SQL;
        }
        else
        {
            SQL = SELECT_SQL2;
        }

        // prepare statement
        pstmt = conn.prepareStatement(SQL);

        // set parameters
        pstmt.setString(1, sname);
        if (id != null)
        {
            pstmt.setBigDecimal(2, id);
        }

        // execute query
        result = pstmt.executeQuery();


        // fetch results
        while (result != null && result.next())
        {
            // fetch
            int count = result.getInt(1);
            exists = (count == 0);
        }

        // close results
        if (result != null)
        {
            try { result.close(); } catch (Exception e) {}
        }

        // close statement
        if (pstmt != null)
        {
            try { pstmt.close(); } catch (Exception e) {}
        }
    }
    catch (Exception ex)
{ 
// throw error
        throw new DataObjectException("Error checking for name uniqueness for " + sname);
    }
    finally
    {
        // close results
        if (result != null)
        {
            try { result.close(); } catch (Exception e) {}
        }

        // close statement
        if (pstmt != null)
        {
            try { pstmt.close(); } catch (Exception e) {}
        }


        // close connection
        if (conn != null)
        {
            try { conn.close(); } catch (Exception e) {}
        }
    }

    return exists;
}
4

2 に答える 2

1

そのフィールドをデータベース内で一意にしてから、JavaScript を追加して検証する必要がありますが、JS 検証だけに依存しないでください。MySQL では、それを主キーにするか、その列に一意のインデックスを追加できます。同じ名前を追加しようとするとエラーがスローされるため、バックエンドで使用しているテクノロジー ( php など) でそのエラーをキャッチし、名前が使用されていることをユーザーに知らせてください。その時点で、サーバーに ajax 呼び出しを追加して、名前を検証できます。

于 2012-09-28T05:59:18.303 に答える
1

クライアント側でフィールドを一意にする方法はありません。サーバーで検証を行い、名前がクライアント側に既に存在すると言うことができます。

名前が存在するかどうかを確認するために Ajax リクエストを実行するようなものです。

テーブルの列を持つことも 1 つの方法ですが、インデックスを作成している場所を確認する必要もあります。長さが長い文字列の場合は、別のインデックス キーを探すことをお勧めします。

于 2012-09-28T05:56:41.380 に答える