Class.forName("com.mysql.jdbc.Driver").newInstance()
Posted
技术标签:
【中文标题】Class.forName("com.mysql.jdbc.Driver").newInstance()【英文标题】: 【发布时间】:2013-10-25 01:58:16 【问题描述】:我在 Netbeans 7.2 上遇到此错误,它表示 ClassNotFoundexception 和 InstantationException。我真的被这件事困住了。请帮助我。
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
try
String driver = "com.mysql.jdbc.Driver";
con = null;
String username = "";
String password = "";
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "password");
Statement st = con.createStatement();
ResultSet mar = st.executeQuery("SELECT * FROM table");
Gson gson = new GsonBuilder().create();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
catch (SQLException e)
String message = e.getMessage();
【问题讨论】:
首先,您不需要.newInstance()
电话。其次,您是否将mysql-connector.jar
添加到您的WEB-INF/lib
以便将其添加到类路径中?
为什么 .newInstance() ????
第三,你也不需要 .forName() 调用。您的问题所剩无几。
【参考方案1】:
这个简单的方法怎么样?!
java.sql.Driver d=new com.mysql.jdbc.Driver();
我也想知道你为什么用这种方式连接数据库?!最好让服务器管理。
首先像这样配置context.xml
(如果您使用的是tomcat):
<context>
<Resource name="_ds" auth="Container" type="javax.sql.DataSource"
maxActive="128" maxIdle="32" username="_admin" password="qwerty" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/dbname"/>
</context>
然后,在 servlet/etc 中简单地从该资源获取连接,如下所示:
public void init()
try
_ds = (DataSource) InitialContext.lookup("java:/comp/env/_ds");
catch (Exception ex)
private javax.sql.DataSource _ds;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
try
/*String driver = "com.mysql.jdbc.Driver";
con = null;
String username = "";
String password = "";
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName", "root", "password");*/
Connection con=_ds.getConnection();
Statement st = con.createStatement();
ResultSet mar = st.executeQuery("SELECT * FROM table");
Gson gson = new GsonBuilder().create();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
con.close();
catch (SQLException e)
String message = e.getMessage();
顺便说一句,不要忘记在<CATALINA_BASE>/lib
文件夹中编译MySQL JDBC驱动jar文件。
【讨论】:
+1。我喜欢使用真正的构造函数的建议,因为它将丢失的类问题移动到编译时错误而不是运行时。如果可以建议 JNDI 和服务器管理的连接,我会再次 +1。 谢谢伙计,现在我可以继续前进了。:D 欢呼。 java.sql.Driver d=new com.mysql.jdbc.Driver();【参考方案2】:您需要将在此处找到的mysqlconnector.jar
文件:(http://dev.mysql.com/downloads/connector/j/)添加到项目的 lib 文件夹中。将其包含在您的项目中,然后您就可以访问与数据库的连接。
将该 jar 添加到构建路径中。
【讨论】:
【参考方案3】:您可能想解决一个更大的问题。您不应该直接在您的 servlet 中输入配置数据,例如数据库连接信息。
你在使用Tomcat吗?您可以简单地使用 JNDI。您将能够更改数据库详细信息和驱动程序,而无需重新编译您的 servlet。
这里是Tomcat 7.0 JNDI Datasource HOW-TO 显示了可以将Connection
获取到数据库的各种方法。
在该页面上,您有一个代码示例,说明如何获取 Connection
(Oracle 8i、9i 和 10g -> 第 3 部分)和 how to write a MySQL specific configuration。
确保下载正确的 MySQL jar 并将其放在 Tomcat 的 lib/
目录中(或者您的 WAR 的 WEB-INF/lib
)。
【讨论】:
【参考方案4】:您只需要Class.forName("com.mysql.jdbc.Driver")
这就像类加载器并为您加载驱动程序类。为此,您需要添加相应的 jar 文件(具有驱动程序实现)。所以下载并在你的类路径中添加mysql-connector.jar
。
注意:如果您使用的是 Java 7,那么甚至不需要添加 Class.forName("com.mysql.jdbc.Driver")
语句。在 Java 7 中默认提供的 JDBC 4.1 中添加了自动资源管理 (ARM)。
【讨论】:
以上是关于Class.forName("com.mysql.jdbc.Driver").newInstance()的主要内容,如果未能解决你的问题,请参考以下文章
为啥我找不到 Class.forName("com.mysql.jdbc.Driver"); 的异常[复制]
h2 数据库的 ClassNotFound 异常 class.forname("org.h2.Driver")
连接数据库时 Class.forName("oracle.jdbc.driver.OracleDriver") 的实际用途是啥?
Class.forName("com.mysql.jdbc.Driver").newInstance()