Java 为什么我会出错;未找到适合jdbc的驱动程序:h2:tcp://localhost/~/userManagement";?
我正在尝试获取jdbc连接,但由于某种原因,它抛出了一个错误,说“未找到驱动程序”。我使用的数据库是H2。代码如下:Java 为什么我会出错;未找到适合jdbc的驱动程序:h2:tcp://localhost/~/userManagement";?,java,servlets,jdbc,connection,h2,Java,Servlets,Jdbc,Connection,H2,我正在尝试获取jdbc连接,但由于某种原因,它抛出了一个错误,说“未找到驱动程序”。我使用的数据库是H2。代码如下: import com.userManagement.model.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import
import com.userManagement.model.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.userManagement.model.User;
public class UserDao {
private String jdbcUrl="jdbc:h2:tcp://localhost/~/userManagement";
private String username="user";
private String password="user";
private static final String insertIntoUsers="insert into users"+"(name,address,age,email)values"+"(?,?,?,?);";
private static final String selectUserById="select * from users where id=?";
private static final String deleteUser="delete from users where id=?";
private static final String updateUser="update * from users where id=?";
private static final String selectAllUsers="select * from users";
//getting jdbc connection and returning it.
protected Connection getConnection() {
Connection con=null;
try {
con=DriverManager.getConnection(jdbcUrl, username, password);
}
catch(Exception e) {
e.printStackTrace();
}
return con;
}
public void insertUser(User user) {
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(insertIntoUsers)){
pst.setString(1, user.getName());
pst.setString(2, user.getAddress());
pst.setInt(1, user.getAge());
pst.setString(1, user.getEmail());
pst.executeUpdate();
}
catch(Exception e) {
}
}
public User selectUser(int id) {
User user=null;
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(selectUserById)){
pst.setInt(1,id);
ResultSet rs=pst.executeQuery();
while(rs.next()) {
String name=rs.getString("name");
String address=rs.getString("address");
int age=rs.getInt("age");
String email=rs.getString("email");
user=new User(name,address,age,email);
}
}
catch(Exception e) {
e.printStackTrace();
}
return user;
}
public List<User> selectAllUser(){
List <User> users=new ArrayList<> ();
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(selectAllUsers);){
ResultSet rs=pst.executeQuery();
while(rs.next()) {
String name=rs.getString("name");
String address=rs.getString("address");
int age=rs.getInt("age");
String email=rs.getString("email");
users.add(new User(name,address,age,email));
}
}
catch(Exception e) {
e.printStackTrace();
}
return users;
}
public boolean deleteUser(int id) {
boolean rowDeleted=false;
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(deleteUser)){
pst.setInt(1, id);
rowDeleted=pst.executeUpdate()>0;
}
catch(Exception e) {
e.printStackTrace();
}
return rowDeleted;
}
public boolean updateUser(User user) {
boolean rowUpdated=false;
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(updateUser)){
pst.setString(1,user.getName());
pst.setString(2, user.getAddress());
pst.setInt(2, user.getAge());
pst.setString(2, user.getEmail());
rowUpdated=pst.executeUpdate()>0;
}
catch(Exception e ) {
e.printStackTrace();
}
return rowUpdated;
}
}
导入com.userManagement.model.*;
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.util.ArrayList;
导入java.util.List;
导入com.userManagement.model.User;
公共类UserDao{
私有字符串jdbcUrl=“jdbc:h2:tcp://localhost/~/userManagement”;
私有字符串username=“user”;
私有字符串password=“user”;
private static final String insertIntoUsers=“插入用户”+(姓名、地址、年龄、电子邮件)值“+”(?,?,?,?);”;
私有静态最终字符串selectUserById=“select*from users,其中id=?”;
私有静态最终字符串deleteUser=“从id=?”的用户中删除”;
private static final String updateUser=“update*from users,其中id=?”;
私有静态最终字符串selectAllUsers=“select*from users”;
//获取jdbc连接并返回它。
受保护的连接getConnection(){
连接con=null;
试一试{
con=DriverManager.getConnection(jdbcUrl、用户名、密码);
}
捕获(例外e){
e、 printStackTrace();
}
返回con;
}
公共void插入器(用户){
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(插入用户)){
setString(1,user.getName());
setString(2,user.getAddress());
setInt(1,user.getAge());
setString(1,user.getEmail());
pst.executeUpdate();
}
捕获(例外e){
}
}
公共用户selectUser(int-id){
User=null;
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(selectUserById)){
pst.setInt(1,id);
ResultSet rs=pst.executeQuery();
while(rs.next()){
字符串名称=rs.getString(“名称”);
字符串地址=rs.getString(“地址”);
int age=rs.getInt(“年龄”);
String email=rs.getString(“电子邮件”);
用户=新用户(姓名、地址、年龄、电子邮件);
}
}
捕获(例外e){
e、 printStackTrace();
}
返回用户;
}
公共列表selectAllUser(){
List users=newarraylist();
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(selectAllUsers);){
ResultSet rs=pst.executeQuery();
while(rs.next()){
字符串名称=rs.getString(“名称”);
字符串地址=rs.getString(“地址”);
int age=rs.getInt(“年龄”);
String email=rs.getString(“电子邮件”);
添加(新用户(姓名、地址、年龄、电子邮件));
}
}
捕获(例外e){
e、 printStackTrace();
}
返回用户;
}
公共布尔删除用户(int-id){
布尔值rowdeled=false;
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(删除用户)){
pst.setInt(1,id);
rowDeleted=pst.executeUpdate()>0;
}
捕获(例外e){
e、 printStackTrace();
}
返回已删除的行;
}
公共布尔更新器(用户){
布尔值=false;
try(Connection con=getConnection();
PreparedStatement pst=con.prepareStatement(updateUser)){
setString(1,user.getName());
setString(2,user.getAddress());
setInt(2,user.getAge());
setString(2,user.getEmail());
RowUpdate=pst.executeUpdate()>0;
}
捕获(例外e){
e、 printStackTrace();
}
返回更新的行;
}
}
一个可能的原因可能与您的类路径有关。你能确认你已经在你的类路径中包含了相关的驱动程序JAR吗?驱动程序在你的类路径上的哪里?根据位置的不同,您可能需要首先使用``Class.forName显式加载驱动程序,因为自动加载驱动程序只适用于初始路径上的驱动程序。请注意,在web应用程序中,通常不应直接使用
DriverManager.getConnection`,而应使用连接池支持的数据源(例如Tomcat中内置的数据源、HikariCP或其他数据源)。