1

私は Java プログラミングの初心者で、現在 MVC アーキテクチャを使用して最初の Web アプリケーションを開発しています。しかし、アプリケーションで非常に多くの問題が発生しており、その理由がわかりません。たとえば、JSP ページに次のコードがあります。

                Connection connection = null;
                PreparedStatement statement = null;
                ResultSet rs = null;
                String QueryString="";
                String stuid="";
                try {
                        QueryString = "SELECT Student_ID, Student_F_Name, Student_L_Name, Student_NIC, Student_Address, Student_DOB, Student_Email, Student_Gender, Course_Name, Batch_Name, Student_username, Student_password FROM Student WHERE Student_ID = ?";
                        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                        connection = DriverManager.getConnection("Jdbc:Odbc:UniversityDSN");
                        statement=connection.prepareStatement(QueryString);
                        stuid = session.getAttribute("studentid").toString();
                        statement.setString(1, stuid);
                        rs = statement.executeQuery();

時々、このコードは完全に機能しますが、しばらくすると、このコードは機能しなくなり、次のようなエラーが表示されます。

情報: SQLException: [Microsoft] [ODBC ドライバー マネージャー] 無効な文字列またはバッファーの長さ

しかし、上記のコードを次のように修正すると:

String QueryString = "SELECT Student_ID, Student_F_Name, Student_L_Name, Student_NIC, Student_Address, Student_DOB, Student_Email, Student_Gender, Course_Name, Batch_Name, Student_username, Student_password FROM Student WHERE Student_ID = ?";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection connection = DriverManager.getConnection("Jdbc:Odbc:UniversityDSN");
PreparedStatement statement=connection.prepareStatement(QueryString);
String stuid = session.getAttribute("studentid").toString();
statement.setString(1, stuid);
ResultSet rs = statement.executeQuery();

それは再び働き始めます。しかし、しばらくすると、このコードは再び動作を停止し、同じ例外が発生するため、以前のように修正する必要があります。しかし、どちらの場合も、デバッグするとコードは完全に機能します。コードを修正するために多くの時間を無駄にしなければならず、JSP ページ、サーブレット、または使用する Bean クラスで発生するため、これは非常に面倒です。誰かが私が間違っている可能性があることを教えてくれたら、本当に感謝しています。どうすればこの問題を回避できますか?

4

2 に答える 2

1

まず第一に、java odbc ドライバーは Web サーバーやマルチスレッド環境にはあまり適していません。私はそれがあなたのバグに関連していると本当に思います。

データベース接続の参照が失われました。そして、あなたにできることは何もありません。唯一の方法は、Web 環境用のより優れたドライバーである MS SQL 用の JDBC ドライバーを使用することです。

情報: SQLException: [Microsoft] [ODBC ドライバー マネージャー] 無効な文字列またはバッファーの長さ

db サーバーのアップグレードに関連する場合もあります。
java odbc ドライバーのバージョンは db サーバーのバージョンと一致する必要があるため...

于 2012-08-23T10:17:55.767 に答える
0

Oracle データベースへの外部コネクタを使用しているときに、この問題に直面していました。ここでの問題は、ODBC ドライバーです。私は Oracle 11G を使用していて、ソースに DSN を作成していました。Oracle 11G に必要な JDBC-ODBC ドライバーは ojdbc5.jar でした。ドライバーを変更したところ、エラーはなくなりました。このエラーは、主に 64 ビット プロセスに関係しています。

于 2013-08-09T03:55:59.653 に答える