0

実際には、C プログラムで SQL クエリを実行したいと考えています。クエリ内の変数はSELECT、文字列変数に格納された値になります。

例えば:

void fetch_data(char var[])
{
    char COL1[]=var, COL2[]="Address", COL3[]="Name";
    SELECT COL1, COL2, COL3 FROM TABLE WHERE COL4='some value';
}

varここでわかるように、関数のパラメーターである変数に応じて異なる列名を使用できるように、コードを柔軟にしたいと考えていfetch_dataます。

これがCで可能かどうか教えてください。

上記が不可能な場合は、別の方法を考えました: SQL ステートメント全体を文字列に格納して実行し、関数で取得したパラメーターの値に応じていつでもこの文字列を変更できるようにすることはできますfetch_data()か?

以下のコードは、私が望むものをより明確にします。

void fetch_data(char var[])
{
    char COL1[]="Name", COL2[]="Address", COL3[]=var;
    char qry1[]="SELECT ", qry2[]=var, qry3=" COL2, COL3 FROM TABLE WHERE COL4='some value';";
    char str[]=strcat(qry1,qry2);
    char query[]=strcat(str,qry3);
    //now query will be having "select (value of var), COL2, COL3 FROM TABLE WHERE COL4='some value';
}

上記のコードで、文字列に格納されているクエリを実行できますqueryか?

2つの方法のいずれかが機能するか、または「C」の他の方法で実現できるかどうか教えてください。

4

1 に答える 1

2

2 番目の方法は確かに機能しますが、文字列操作に注意する必要があります。

実際、次を使用して単純化できますsnprintf

snprintf(queryStr, MAX_QUERY_LENGTH,
         "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='some value';", var);

クエリをより動的にする必要がある場合、つまり'some value'変数からも取得する必要がある場合は、フォーマット指定子を追加できます。

snprintf(queryStr, MAX_QUERY_LENGTH,
         "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='%s';", var, someValue);

このようなクエリを準備したら、それをどのように使用するかはツールチェーンによって異なります。ODBCを使用していますか? その場合は、ODBC 呼び出しを使用してクエリを処理し、ODBC ドライバーを使用してデータベースへの接続を管理できます。または、どのデータベースを使用していますか? また、どの API が提供されていますか? たとえば、MySQL はかなり大きなC APIを提供し、oracle は別の API を提供し、SQL Server は別の API を提供します。

最初のオプションについては、SQL プリプロセッサを使用して、C コードで生の SQL ステートメントのようなものを使用する必要があります。構文は、使用するツールによって異なります。

また、次のようなステートメントを使用して非リテラル C 文字列をコピーすることはできないことも付け加えておきますchar COL1[]=var;。代わりに、のような文字列ライブラリ メソッドを使用する必要がありますstrncpy

于 2012-09-07T14:43:34.677 に答える