質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

6962閲覧

sqlserverのストアドプロシジャーから、javaでのresultset取得の方法

aoi99

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/06/01 02:50

###前提・実現したいこと
sqlserverのストアドプロシジャーから、javaでのresultset取得の方法

###発生している問題・エラーメッセージ

javaの独習中で、sqlserverのストアドプロシジャーからjavaでresultsetを取得しようとしましたが、resultsetの取得ができません。

###該当のソースコード
プロシジャー側
SE [trade]
GO
/****** Object: StoredProcedure [dbo].[seldummy] Script Date: 2016/06/01 11:37:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[seldummy]
-- Add the parameters for the stored procedure here

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here SELECT [code], [meisyo], [colm], [kingaku] from dummy;

END

java側

Connection con = null; ResultSet rs = null; CallableStatement cs = null; String sql = "{call seldummy()}"; try { // JDBCドライバを指定 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = DriverManager.getConnection(jdbc_url, user, password); // 接続開始 //con = DriverManager.getConnection(jdbc_url, user, password); //con = DriverManager.getConnection("jdbc:sqlserver://" + dbName + ";", user, pass); cs = con.prepareCall(sql); // INパラメータの指定 /* cs.setString(1, null); cs.setTime(2, null); cs.setBigDecimal(3, BigDecimal.valueOf(100.00)); // OUTパラメータの指定 cs.registerOutParameter(4, Types.DECIMAL); cs.registerOutParameter(5, Types.NVARCHAR); */ // プロシージャの実行 cs.execute(); rs = cs.getResultSet();

色々ググってみたのですが、初心者のため意味が分からないことばかりです。
どなたかご教授いただけませんでしょうか。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiyoshiMotoki

2016/06/01 09:15

「resultsetの取得ができません」とありますが、具体的にはどのような現象が発生していますか?もし、エラーが発生しているのなら、スタックトレース(エラーメッセージのこと)を質問欄に追記すると、回答が得やすくなると思います。
guest

回答1

0

ベストアンサー

「ResultSetの取得ができない」=「戻り値がnullだった」と勝手に解釈させていただいています。
私自身ストアドなんて呼んでみたことがなかったので、試してみましたが、これで普通に動きました。
cs.getResultSet()の前で落ちている、など、何か別の原因なのでは?

java

1package hoge.fuga; 2 3import java.sql.CallableStatement; 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.ResultSet; 7 8public class Main { 9 10 private static final String JDBC_URL = "jdbc:sqlserver://192.168.xxx.xxx:1433;databaseName=Work"; 11 private static final String USER = "ユーザ名"; 12 private static final String PWD = "パスワード"; 13 14 public static void main(String[] args) { 15 Connection con = null; 16 CallableStatement cs = null; 17 ResultSet rs = null; 18 String sql = "{call seldummy()}"; 19 20 try { 21 // JDBCドライバを指定 22 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 23 con = DriverManager.getConnection(JDBC_URL, USER, PWD); 24 25// cs = con.prepareCall(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, 26// ResultSet.CONCUR_READ_ONLY); 27 cs = con.prepareCall(sql); 28 29 // INパラメータの指定 30 /* 31 cs.setString(1, null); 32 cs.setTime(2, null); 33 cs.setBigDecimal(3, BigDecimal.valueOf(100.00)); 34 35 // OUTパラメータの指定 36 cs.registerOutParameter(4, Types.DECIMAL); 37 cs.registerOutParameter(5, Types.NVARCHAR); 38 */ 39 // プロシージャの実行 40 if (!cs.execute()) { 41 System.err.println("Execution failed!!"); 42 }; 43 rs = cs.getResultSet(); 44 45 while (rs != null && rs.next()) { 46 System.out.println(rs.getObject(1)); 47 System.out.println(rs.getObject(2)); 48 System.out.println(rs.getObject(3)); 49 System.out.println(rs.getObject(4)); 50 } 51 } 52 catch (Exception e) { 53 e.printStackTrace(); 54 } 55 finally { 56 forceClose(rs); 57 forceClose(cs); 58 forceClose(con); 59 } 60 } 61 62 private static void forceClose(AutoCloseable c) { 63 if (c == null) { 64 return; 65 } 66 try { 67 c.close(); 68 } 69 catch (Exception ignore) { 70 // Ignore. 71 } 72 } 73 74}

投稿2016/06/03 12:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoi99

2016/06/04 06:07

うまくいきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問