Java Jdbc:连接在我的程序中返回null,该怎么办?

Java Jdbc:连接在我的程序中返回null,该怎么办?,java,jdbc,Java,Jdbc,由于con为空,我得到了一个异常作为java.sql.Connection.prepareStatement(String),我不知道为什么,因为我已经添加了MySQL连接器jar文件 import java.sql.Connection; import java.sql.PreparedStatement; public class Studentdao { public static boolean insertStudenttoDB(Student st) { boolean

由于
con
为空,我得到了一个异常作为
java.sql.Connection.prepareStatement(String)
,我不知道为什么,因为我已经添加了MySQL连接器jar文件

import java.sql.Connection;
import java.sql.PreparedStatement;

public class Studentdao {

public static boolean insertStudenttoDB(Student st) {

    boolean f=false;
try {
Connection con =CP.createc();
//jdbc code
String q="insert into students(sname,sphone scity)values(?,?,?)";
PreparedStatement pstmt=con.prepareStatement(q);
pstmt.setString(1,st.getStudentname());
pstmt.setString(2,st.getStudentcity());
pstmt.setLong(3,st.getStudentphone());

//execute
pstmt.executeUpdate();
f=true;

}
catch(Exception e) {
    e.printStackTrace();
}
return f;
}
}
这是我的连接程序

import java.sql.Connection;
import java.sql.DriverManager;

public class CP {


static Connection con;
//load driver
public static Connection createc() {
    try {
Class.forName("com.sql.jdbc.Driver");

//creating connection
String user="mysql";
String password="mysql";
String url="jdbc:mysql://localhost:3306/student_manage";
    con=DriverManager.getConnection(url,user,password);
     
}catch(Exception e) {
    e.printStackTrace();
}

 return con;        
}
}
不正确的类名 如果您将产品用作您的产品,则您的类名似乎不正确

《Connector/J手册》的第页显示了使用
“com.mysql.cj.jdbc.Driver”
与使用
“com.sql.jdbc.Driver”
的对比。下面是他们的代码示例:

导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.SQLException;
//注意,不要导入com.mysql.cj.jdbc*
//否则你会有问题!
公共类加载驱动程序{
公共静态void main(字符串[]args){
试一试{
//newInstance()调用对于某些人来说是一种变通方法
//破碎的Java实现
Class.forName(“com.mysql.cj.jdbc.Driver”).newInstance();
}捕获(例外情况除外){
//处理错误
}
}
}
DataSource
注意,现代Java中通常不需要使用
Class.forName
。JDBC体系结构在几年前进行了改进,现在可以使用该技术自动定位和加载驱动程序

我建议您养成使用获取连接的习惯,而不是调用
DriverManager
。使用
DataSource
使您的代码更加灵活。您将能够切换JDBC驱动程序,添加连接池,并为部署外部化配置信息(服务器地址、数据库名称、用户名、密码等)

通常,JDBC驱动程序附带一个基本的
数据源实现。查看文档中可以设置的所有选项,具体到数据库(本例中为MySQL)

对于MySQL,我了解连接器/J中当前提供的
DataSource
的实现是
com.MySQL.cj.jdbc.MysqlDataSource
。注意:我经常使用Postgres&H2,而不是MySQL,所以我可能不是最新的

有关连接和使用MySQL的完整示例的源代码,请参阅另一个问题。以下是与
数据源
连接
相关的部分

专用数据源配置数据源()
{
System.out.println(“INFO-`configureDataSource`method.+Instant.now());
com.mysql.cj.jdbc.MysqlDataSource dataSource=Objects.requirennull(新的com.mysql.cj.jdbc.MysqlDataSource());//与H2捆绑的'dataSource'的实现。
dataSource.setServerName(“db-mysql-sfo3-422-do-user-8982-1.x.db.ondigitalocean.com”);
数据源。设置端口号(24090);
setDatabaseName(“defaultdb”);
dataSource.setUser(“scott”);
dataSource.setPassword(“tiger”);
返回数据源;
}
在应用程序生命周期的早期,实例化并保留从该方法返回的
DataSource
对象。记住,
DataSource
只保存配置细节;它本身不是一个开放的资源,不需要关闭

DataSource DataSource=this.configureDataSource();
要打开连接,请将
数据源
传递给要连接到数据库的方法

private void dumpTable ( DataSource dataSource ) { … }
下面是
dumpTable
方法的一部分

请注意,使用语法可以按照声明的顺序自动关闭打开的资源,即使在发生故障并引发异常的情况下也是如此

String sql=“从事件中选择*;
试一试(

Connection conn=dataSource.getConnection();//以下是我试图将java类与mysql连接的代码。请确保必须向库中添加所需的驱动程序

import java.sql.Connection;
import java.sql.DriverManager;
public class Server {
public static Connection getConnection()
{
try
{
   Class.forName("com.mysql.jdbc.Driver");
   String urls = "127.0.0.1";//you can even replace this with localhost
   String username = "yourusername";
   String password = "1234";
   Connection conn = DriverManager.getConnection("jdbc:mysql://"+urls+":3306/yourdb?useUnicode=yes&characterEncoding=UTF-8", username, password);
   return conn;
}
catch(Exception e)
{
   e.printStackTrace();
}
return null;
}

在NullPointerException之前发生什么异常?是的,NullPointerException是的,但是在NullPointerException之前发生什么异常?ClassNotfoundExceptionMySQL不是
com.sql
,而是
com.mysql
。此外,您不需要
Class.forName