2012-08-22 36 views
1

我對Java編程頗爲陌生,目前正在使用MVC體系結構開發我的第一個Web應用程序。但是我遇到了很多與我的應用程序有關的問題,我不知道它們爲什麼會發生。比如我在我的JSP頁面下面的代碼:Java EE Web應用程序中的字符串或緩衝區長度異常

   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:[微軟] [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頁面,Servlet或我使用的Bean類中。 我真的很感激,如果有人可以建議我我做錯了什麼,我該如何避免這個問題?

+0

MVC是一種模式而不是架構。 –

+0

謝謝你的信息。正如我所說的,我仍然是一名學生,對於Java和MVC來說還很新穎。我會記住你的信息。儘管如果你能爲我的問題提供任何建議,我會非常感激。 再次感謝您:) –

回答

1

首先,java odbc驅動程序對於web服務器和多線程環境並不是很好。我真的認爲它與你的bug有關。

它丟失了數據庫連接引用。沒有什麼可以做的。唯一的方法是使用MS SQL的JDBC驅動程序,這是Web環境的更好驅動程序。

INFO:的SQLException:[微軟] [ODBC驅動程序管理器]無效的字符串或緩衝區長度

它有時連接到數據庫服務器的升級了。
由於java odbc驅動程序的版本必須與db服務器版本匹配...

+0

感謝您的回覆隊友!我將嘗試使用適用於MS SQL的JDBC。但奇怪的是,我的大多數同學使用Java ODBC驅動程序,但他們沒有面臨這個問題。 所以我想這可能與數據庫服務器的升級有關?在那種情況下,你會建議我怎麼做?有什麼方法可以升級Java Odbc驅動程序? –

+0

在編程方面,有時候做壞事的羣衆在將他們的程序放入生產環境時看不到錯誤。有些人很幸運:他們在早期階段面臨這些問題。看看你的數據庫版本,隨附的驅動程序版本必須與你在MS SQL網頁上找到的任何矩陣兼容性相匹配。同樣適用於odbc驅動程序。 – ThierryB

0

我在使用外部連接器連接到oracle數據庫時遇到了此問題。這裏的問題是ODBC驅動程序。我使用的是Oracle 11G,並在源代碼中創建了一個DSN。 Oracle 11G所需的JDBC-ODBC驅動程序是ojdbc5.jar。我改變了司機,錯誤消失了。這個錯誤主要與64位進程有關。

相關問題