【问题标题】:How to make a text field value unique?如何使文本字段值唯一?
【发布时间】:2012-09-28 05:53:45
【问题描述】:

我有一个带有文本字段的表单。我想让文本字段条目唯一,这样人们就不能再次保存相同的名称。

我们可以让字段在表格列中唯一吗?

我们如何编写一个 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;
}

【问题讨论】:

    标签: javascript html database


    【解决方案1】:

    您无法使该字段在客户端具有唯一性。您可以在服务器上进行验证并说该名称已在客户端存在。

    就像执行 Ajax 请求以查看名称是否存在。

    拥有表格列是一种方法,但您还需要查看索引的位置,如果它是一个长度较大的字符串,我建议您寻找另一个索引键。

    【讨论】:

      【解决方案2】:

      您肯定希望使该字段在数据库中唯一,然后添加 javascript 进行验证,但不要仅仅依赖 JS 验证。在 MySQL 中,您可以将其设为主键或为该列添加唯一索引。如果您尝试添加相同的名称,这将引发错误,因此请确保使用您在后端使用的任何技术(php 或其他)捕获该错误,并让您的用户知道该名称已被使用。此时,您可以向服务器添加 ajax 调用来验证名称。

      【讨论】:

      • 既然你没有提到你的技术,因为是技术性的概念性回答。
      • 我有 JSP 前端和 Java 后端。
      • 但是如果我在 Java 文件(后端)中进行验证,是否可以在前端向用户弹出一条消息以更正名称?
      • 您可以对后端进行 AJAX 调用,如果采用此类名称,将返回错误,然后通过自定义弹出窗口或简单的警报框显示该错误
      • 我在上面更新了我在后端所做的事情。你能给我举个这样的例子吗?
      猜你喜欢
      • 1970-01-01
      • 2012-03-20
      • 2018-04-21
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      相关资源
      最近更新 更多