簡體   English   中英

Java Eclipse中的OJDBC代碼問題

[英]OJDBC code issue in Java Eclipse

我已經制作了一個注冊表reg1,並存儲了HTML文件中每個注冊用戶的值。 現在,我已經創建了一個HTML登錄頁面,用戶可以在其中輸入用戶名並查看他們輸入的數據。 我已經將用戶設為“ bbb”,並且只希望顯示其用戶名。因此,我制作了如下的通用Java代碼:

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class Check extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         String username=request.getParameter("username");
         try{
             Class.forName("oracle.jdbc.driver.OracleDriver");
             String url="jdbc:oracle:thin:@localhost:1521:XE";
             Connection con=DriverManager.getConnection(url,"system","root");
             Statement stmt=con.createStatement();
             ResultSet rs=stmt.executeQuery("select uname from reg1");


            while(rs.next())    
                {

                String name=rs.getString("uname");
                if(name==username)
                {


                response.setContentType("text/html");
                PrintWriter pw=response.getWriter();
                pw.println("Your User name is:"+username);

            //  System.out.println(""+name);
                }



                    con.commit();

                }
             stmt.close();
    }


                catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


    }

   }

它給出類似java.sql.SQLException: Closed Statement: next錯誤java.sql.SQLException: Closed Statement: next

表格如下:

FNAME LNAME ADDR MAIL OCCU UNAME PASSWD aaa aaa aaaa aaa aaaa bbb cccc bkgkb jjv jhvjmh jjkg jvjv jvjvh bjbmb

請幫我解決這個問題!

首先,無需使用

con.commit();

如果將AutoCommit設置為false,則只能使用這種情況。

con.setAutoCommit(false);

其次,我建議您使用更快,更安全的PreparedStatements
接下來,無需關閉您的對帳單。

finally塊中,關閉連接時必須調用con.close() ,語句將自動關閉。

注意:您必須在finally塊中調用它,因為您的Application可能崩潰,然后您的Connection永遠不會關閉。

finally {
   if (con != null) {
      con.close();
   }
}

嘗試刪除con.commit行,無需這樣做。

您應該finally添加到catch並在此處關閉語句。

並且您還應該使用PreparedStatement而不是Statement。

關於finally看到這里了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM