MSDE FunClub
Microsoft Data Engine FunClub
MSDE技術者向けメーリングリスト過去ログ[1236]番
 
[TOP]>[MSDE技術者向けメーリングリスト過去ログ(1236番)]>[ウィンドを閉じる]
 
SQLServer2005時代でも
開発の基本は T-SQL
上巻で T-SQL の基礎作り
 
SQLServer2005時代でも
運用の基本はバックアップ
下巻でバックアップ手法を学びましょう
PASSJ人気コンテンツで学んだ後は下巻でさらなる学習を!
 
ウィンドを閉じる
MSDE/SQLServer FAQ
MSDE / MSDE2000 
技術情報サポート
初心者向け
メーリングリスト
過去ログの表示
技術者向け
メーリングリスト
過去ログの表示
メーリングリスト
活動状況の
表示
MSDE TOP メニュー
MSDEトップメニューに移動します
 

 
Re: SQL2000 + JDBC で PreparedStatement を使用したい

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 技術サポート情報一覧]

MSDE TOP ページに移動する

 
 
 
 
 
 
 
MSDE FunClubに関するご意見・ご要望等ございましたら、
msdefun@horikawa.ne.jp までご連絡下さい。
MSDEを始めとする各種データベースシステムの開発、コンサルタントに関するご要望等は、
msdedev@horikawa.ne.jp までご連絡下さい。