Date: Mon, 8 Dec 2003 13:35:57 +0900
From: "Yasufumi Yamagami" <who@example.co.jp>
自己レスです。解決しました。
PreparedStatementでは、テーブル名に対して「?」の指定が
できないようです。
prdStt = myDB.mConnection.prepareStatement("UPDATE tableA SET columnA=?
WHERE
columnB=? ");
と、テーブル名を固定にしたPreparedStatementを生成し、
正常動作させることができました。
・・・確かに、テーブル名を固定にしないことには、指定されたカラムが
何型なのか判断しようが無いですね。
失礼いたしました。
----- Original Message -----
> 山上と申します。初めて投稿します。以後よろしくお願いいたします。
>
> 現在私が開発中のシステムで、PreparedStatementを
> 使用したいと思っているのですが、実行させると
> MSのjdbcから
> 「変数 '@P1' を宣言する必要があります。」
> というメッセージの例外が発生します。
>
> 疑問点:
> 1.MySQLなど他のDBのJDBCではこれ以上のコード追加は
> 必要ないと思うのですが、何か足りないのでしょうか?
> 2.「変数 '@P1' を宣言」とは、いったい何を意味している
> のでしょうか?
>
> MS本家のMSDNを検索したり、JDBC付属ドキュメントを
> 検索してみましたが、そもそもPreparedStatementに関する
> 記事が少なく、書籍でもこの組み合わせでの例が見つからず
> (MySQLやPostgreSQLならすぐ見つかるんですが・・・)
> 困っております。どなかた助け舟をお願いいたします。
>
>
> --------- 環境 ----------
> Windows 2000 Server
> SQL Server 2000
> SQLServer 2000 Driver for JDBC (SP2)
> J2SDK 1.4.2_01
>
> --------- コードの抜粋 ----------
> PreparedStatement prdStt;
> prdStt = myDB.mConnection.prepareStatement("UPDATE ? SET columnA=? WHERE
> columnB=? ");
> prdStt.setString(1,tableName);
> prdStt.setInt(2,valueColumnA);
> prdStt.setString(3,valueColumnB);
> prdStt.executeUpdate(); // <= ここで例外が発生します。
>
> --------- 実行時のJDBCの例外 ----------
> java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for
> JDBC][SQLServer]変数 '@P1' を宣言する必要があります。
> at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
> at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
> at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown
> Source)
> at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown
> Source)
> at
com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.processReplyToken(Unknown
> Source)
> at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown
Source)
> at
>
com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknow
> n Source)
> at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown
> Source)
> at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
> at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown
> Source)
> at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
> at com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(Unknown
> Source)
> at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown
> Source)
> (以下、自前パッケージ内なので省略)
>
>
>
>
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|