テキストフィールドのあるフォームがあります。人々が同じ名前を再び保存できないように、テキスト フィールドのエントリを一意にしたいと考えています。
テーブル列でフィールドを一意にすることはできますか?
また
このフィールドを一意にする 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;
}