0

以下のこのメソッドは、クラスに配置された場合は正常に機能しますが、サーブレットコードに貼り付けられて呼び出された場合は、まったく機能しません。生成されるエラーメッセージは次のとおりです。[Microsoft][ODBCDriver Manager]データソース名が見つからず、デフォルトのドライバーが指定されていません

上記のエラーメッセージを修正するにはどうすればよいですか?データベースはシステムに正しく登録されており、このコードが通常のクラスにある場合は機能しています。私はここで何が間違っているのですか?

public static int sendMyQUERY(String q) {
    int i = 0;
    Connection conn = null;
    Statement s = null;
    try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String database = "jdbc:odbc:SS";
        conn = DriverManager.getConnection(database, "", "");
        s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
        i = s.executeUpdate(q);
        s.close();
        conn.close();
        return i;
    } catch (Exception ee) {
        ee.printStackTrace();
    } finally {
        return i;
    }
}// endMethod

これはサーブレットコードです。動作しないということは、クエリが実行されないことを意味し、printStackTrace()が表示されないため、理由もわかりません。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class SS extends HttpServlet {        
    public static int sendMyQuery( String q ){
        int i=0;
        Connection conn=null;
        Statement s=null;
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String database= "jdbc:odbc:SS";
            conn= DriverManager.getConnection( database,"","" );
            s = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            i=s.executeUpdate(q);
            s.close(); conn.close();
            return i;
        } catch (Exception ee) {
            ee.printStackTrace();
        } finally {
            return i;
        }
    }//End

    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException{
        PrintWriter pw= response.getWriter();
        response.setContentType("text/html");    
        int j = sendMyQuery("CREATE TABLE "+users+" ( id AUTOINCREMENT, username varchar(255) , pass varchar(255), PRIMARY KEY(id) ) ");    
        pw.println(" <h1> "+ Integer.toString(j) + " query response ");

    }//doGet
}//class

上記のコードでは、テーブルはまったく作成されません。クエリが送信されなかったように。

4

1 に答える 1

0

何をしているかを確認するには、次のようにします。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class SS extends HttpServlet {        
    public static int sendMyQuery( String q ) throws Exception {
        int i=0;
        Connection conn=null;
        Statement s=null;
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        String database= "jdbc:odbc:SS";
        conn= DriverManager.getConnection( database,"","" );
        s = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
        i=s.executeUpdate(q);
        s.close(); conn.close();
        return i;
    }//End

    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException{
        PrintWriter pw= response.getWriter();
        try {
            int j = sendMyQuery("CREATE TABLE "+users+" ( id AUTOINCREMENT, username varchar(255) , pass varchar(255), PRIMARY KEY(id) ) ");    
            response.setContentType("text/html");    
            pw.println(" <h1> "+ Integer.toString(j) + " query response ");
        } catch (Exception ee) {
            response.setContentType("text/plain");    
            ee.printStackTrace(pw);
        }
    }//doGet
}//class
于 2013-03-05T09:31:58.127 に答える