0

下面的这个方法放在一个类中可以正常工作,但是当粘贴到 servlet 代码中并被调用时,根本不起作用。生成的错误消息是:[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

如何修复上述错误消息?数据库已在系统中正确注册,并且如果此代码在常规类中,则该数据库正在工作。我在这里做错了什么?

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

这是 servlet 代码。通过不工作,我的意思是查询不会被执行,因为我看不到 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 回答