簡體   English   中英

SQL語句未執行! java.sql.SQLException:一般錯誤

[英]SQL statement is not executed! java.sql.SQLException: General error

因此,我的一段代碼給出了“ SQL語句未執行!

java.sql.SQLException:常規錯誤”

可能是由於這一行-“ ResultSet rs = st.executeQuery(sqlq);” 在我的代碼中。 可能的原因是什么?如何糾正? 請幫忙 !

//package searchbook;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.*;

public class SearchBook extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html"); 
HttpSession session = request.getSession(true);
List booklist=new ArrayList();
Connection con = null;

String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + "C:\\users\\ppreeti\\executive_db.accdb";

String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String user = "";
String pass = "";
String category="";
category=request.getParameter("input");
String sqlquery="select   Index1.link_id "    
        + "FROM Index1 "
        + " WHERE  Index1.index_name LIKE '%"+category+"%'  ";
String sqlResult = null;
try
    {
        Class.forName(driver);
        con = DriverManager.getConnection(url, user, pass);
            try{
                Statement st = con.createStatement();
                System.out.println("Connection created 1");
                ResultSet rs = st.executeQuery(sqlquery);
                while (rs.next())
                {
                sqlResult = rs.getString(1);

                }
                System.out.println("Result retreived  1");
                //System.out.println('"sqlquery"');
            }
            catch (SQLException s)
            {
                System.out.println("SQL statement is not executed! "+ s);
            }
        }
    catch (Exception e){
        e.printStackTrace();
    }
System.out.println("************");
//String sqlq="";

if(sqlResult.equals("1"))
{
String sqlq="select Section.Section_Name , Report.Report_Name , Report.Link, Contact.Contact_Name, Metrics.Metric_Name "
        + "FROM Section , Report , Contact,Metrics "
        + "WHERE Report.Contact_ID=Contact.Contact_ID and Report.Section_ID=Section.Section_ID  "
        + "and Report.Report_ID IN (SELECT Metrics.Report_ID FROM Metrics  WHERE Metrics.Metric_Name = Report.Report_ID') and Metrics.Metric_Segment = 'M' ";

System.out.println("2nd query executed too !");
try
{
    Class.forName(driver);
    con = DriverManager.getConnection(url, user, pass);
        try
            {
            Statement st = con.createStatement();
            System.out.println("Connection created");
            ResultSet rs = st.executeQuery(sqlq);
            System.out.println("Result retreived  ");
            while (rs.next())
            {
            List<String> book=new ArrayList<String>();

            String Name=rs.getString("Section_Name");
            String reportName=rs.getString("Report_Name");
            String link=rs.getString("Link");
            String contactName=rs.getString("Contact_Name");
            String metricName=rs.getString("Metric_Name");
            //String reportId=rs.getString("Report_ID");

            /*String ind_id=rs.getString("index_name");
            String ind_name=rs.getString("link_id");*/

            book.add(Name);
            book.add(reportName);
            book.add(link);
            book.add(contactName);
            book.add(metricName);
            //book.add(reportId);

            /*book.add(ind_id);
            book.add(ind_name);*/

            booklist.add(book);
            }
        }
        catch (SQLException s)
        {
            System.out.println("SQL statement is not executed! "+ s);
        }
    }
catch (Exception e) {
e.printStackTrace();
}}
System.out.println("And it came here lastly !");
request.setAttribute("booklist",booklist); 
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/searchbook.jsp");
dispatcher.forward(request, response); 
}
}

Eclipse控制台中的輸出為:

   Connection created 1 Result retreived 1 ************ 2nd query executed too ! Connection created SQL statement is not executed! java.sql.SQLException:: General error And it came here lastly !

您收到此錯誤,因為連接泄漏

使用后請務必關閉連接。

Connection con = null;
try{
  //....
  // init con
} catch(SQLException se) {
   se.printStackTrace();
} finally {
   try {
      if (con!=null) con.close();
   } catch (SQLException se) {
      se.printStackTrace();
   }
}

另外,在數據庫上運行查詢以確保其正常運行,或者將其更改為SELECT * FROM Section僅用於測試

我遇到了類似的問題。 我的觀察是,如果prepareStatement引發了異常,那么它將無法重用。 因此捕獲異常; 關閉該語句並重新創建它。 例如

static PreparedStatement insert_eng_dist; 
public static void main(){
    // JDBC connection related code
    // Connection c = ....  
    insert_eng_dist = c.prepareStatement("insert into DIST_ENG_WORD values(?)");
    insertIntoDistinctTable("WORD1");
    insertIntoDistinctTable("WORD1");
    insertIntoDistinctTable("WORD2");
}

public static void insertIntoDistinctTable(String eng_word) throws Exception{
    try{
        insert_eng_dist.setString(1, eng_word); 
        insert_eng_dist.execute();
    }catch(SQLException e){
        if(e.getMessage().equals("[SQLITE_CONSTRAINT]  Abort due to constraint violation (column ENG_WORD is not unique)")){
            System.out.println("Word already exists in distinct table so not adding again");
        }else {
            throw e;
        }
    }

DIST_ENG_WORD對列具有唯一約束。 因此,當第二次調用函數寫入“ WORD1”時,它將引發約束沖突的異常。 在catch塊中,我剛剛寫了一條消息。 現在,當為“ WORD2”調用函數時,它將失敗

insert_eng_dist.setString(1, eng_word); 

有錯誤

java.sql.SQLException: statement is not executing

為了在catch塊中處理此問題,我關閉了該語句並重新創建了它。 這解決了問題。 如下 :-

public static void insertIntoDistinctTable(String eng_word) throws Exception{
    try{
        insert_eng_dist.setString(1, eng_word); 
        insert_eng_dist.execute();
    }catch(SQLException e){
        if(e.getMessage().equals("[SQLITE_CONSTRAINT]  Abort due to constraint violation (column ENG_WORD is not unique)")){
                System.out.println("Word already exists in distinct table so not adding again");
                insert_eng_dist.close();
                insert_eng_dist = c.prepareStatement("insert into DIST_ENG_WORD values(?)");
        }else {
            throw e;
        }
    }

暫無
暫無

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

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