1

JDBCを介してmySQLを使用してデータベースを検索しようとしています。このステートメントを使用する場合:

SELECT * FROM tablename WHERE name='joe';

大文字と小文字を区別しない検索を実行し、「Joe」または「joe」を含む行を返します。これは私が望むものです。を実行select collation(version())すると、「utf8_general_ci」が返されました。これは、大文字と小文字が区別されないようです。ただし、Javaアプレット内でJDBCを使用して同じクエリを実行すると、大文字と小文字が区別される検索が実行されます。これが私のquery2関数です:

try {
        Vector<Vector<String>> out = new Vector<Vector<String>>() ;
        Connection con = connect() ;
        Statement statement = con.createStatement() ;
        System.out.println( "SQL: " + s ) ;
        ResultSet rs = statement.executeQuery(s) ;
        while( rs.next() )
        {
            String r = rs.getString(1) ; // RS is indexed from 1
            Vector<String> q = new Vector<String>() ;
            for( int i = 2 ; i <= tableSize ; i ++ )
            {
                q.add(r) ;
                r = rs.getString(i) ;
            }
            q.add(r) ;
            out.add(q) ;
        }
        con.close() ;
        return( out ) ;
    } catch (SQLException e) {
        System.err.println( "SQL EXCEPTION" ) ;
        System.err.println( s ) ;
        e.printStackTrace();
    }

そして、これが私のselect関数ですquery2

public static Vector<Vector<String>> select( String table , List<String> columns , List<String> values )
{
    String statement = "SELECT * from `" + table + "` WHERE " ;
    for( int i = 0 ; i < columns.size(); i ++ )
    {
        statement += columns.get(i) + "='" + values.get(i) + "'" ;
        if( i + 1 < columns.size() )
            statement += " AND " ;
    }
    statement += " ;" ;
    return query2 ( statement , tableSize(table) ) ;
}

このクエリで大文字と小文字を区別しないようにする方法はありますか?

4

2 に答える 2

1

関数を使用していると思った検索では、select実際には別の関数を使用していたことがわかりました。この関数は、データベースからすべてを選択し、クライアント側で並べ替えていました。私は関数をテストしましたが、select実際には大文字と小文字を区別せず、与えられたヒントを使用する必要はありません(ただし、アドバイスに感謝します!)。

于 2013-01-25T18:45:21.330 に答える
0

この行を読む必要はありませんか

statement += "UPPER("+columns.get(i) + ")='UPPER(" + values.get(i) + ")'"

ダウンフォール...すべてを上回っているため、インデックスを使用できません。

于 2013-01-25T18:04:41.373 に答える