JAVAWeb初学者求帮忙!

sinat_32863885 2015-11-16 08:59:20

对着视频做了一个简单的管理项目,java代码中可以连上数据库,在web中,一点登录就报错没连上数据库、





已经导入了mysq的jar包,


自己建了个test类是完全可以连上数据库的

这是Login和DBUtil的代码
public User login(String username,String password)
{

Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
User u = null;
try {
con = DBUtil.getConnection();
String sql = "select * from t_user where username=?";
ps=con.prepareStatement(sql);
ps.setString(1, username);
rs = ps.executeQuery();
while(rs.next())
{
u = new User();
u.setId(rs.getInt("id"));
u.setNickname(rs.getString("nickname"));
u.setUsername(rs.getString("username"));
u.setPassword(rs.getString("password"));
u.setStatus(rs.getInt("status"));
u.setType(rs.getInt("type"));
}
if(u==null) throw new ShopException("用户名不存在");
if(!u.getPassword().equals(password)) throw new ShopException("用户密码不正确");
if(u.getStatus()==1) throw new ShopException("用户处于停用状态不能登录");
} catch (SQLException e) {

e.printStackTrace();
}
finally
{
DBUtil.close(rs);
DBUtil.close(ps);
DBUtil.close(con);
}

return u;
}

}
package shop.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBUtil {
public static Connection getConnection()
{
String username = "mrliu";
String password = "mrliu123";
String url = "jdbc:mysql://localhost:3306/shop";
Connection con=null;
try
{
con=DriverManager.getConnection(url,username ,password );
} catch (SQLException e) {

e.printStackTrace();
}
return con;
}


public static void close(Connection con){
if(con!=null)
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}


public static void close(java.sql.PreparedStatement ps){
if(ps!=null)
try {
ps.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}

public static void close(ResultSet rs)
{
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
...全文
652 点赞 收藏 28
写回复
28 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
是否有启动数据库 另外异常为空指针异常无法,查看代码是否有问题!
回复
舞我王 2015-11-24
空指针异常是怎么回事,不是数据库无法获得连接造成的,两个不是同一个错误。 是因为没找到已注册的连接

private static Connection getConnection(
        String url, java.util.Properties info, Class<?> caller) throws SQLException {
        /*
         * When callerCl is null, we should check the application's
         * (which is invoking this class indirectly)
         * classloader, so that the JDBC driver class outside rt.jar
         * can be loaded from here.
         */
        ClassLoader callerCL = caller != null ? caller.getClassLoader() : null;
        synchronized (DriverManager.class) {
            // synchronize loading of the correct classloader.
            if (callerCL == null) {
                callerCL = Thread.currentThread().getContextClassLoader();
            }
        }

        if(url == null) {
            throw new SQLException("The url cannot be null", "08001");
        }

        println("DriverManager.getConnection(\"" + url + "\")");

        // Walk through the loaded registeredDrivers attempting to make a connection.
        // Remember the first exception that gets raised so we can reraise it.
        SQLException reason = null;

        for(DriverInfo aDriver : registeredDrivers) {
            // If the caller does not have permission to load the driver then
            // skip it.
            if(isDriverAllowed(aDriver.driver, callerCL)) {
                try {
                    println("    trying " + aDriver.driver.getClass().getName());
                    Connection con = aDriver.driver.connect(url, info);
                    if (con != null) {
                        // Success!
                        println("getConnection returning " + aDriver.driver.getClass().getName());
                        return (con);
                    }
                } catch (SQLException ex) {
                    if (reason == null) {
                        reason = ex;
                    }
                }

            } else {
                println("    skipping: " + aDriver.getClass().getName());
            }

        }

        // if we got here nobody could connect.
        if (reason != null)    {
            println("getConnection failed: " + reason);
            throw reason;
        }

        println("getConnection: no suitable driver found for "+ url);
        throw new SQLException("No suitable driver found for "+ url, "08001");
    }
使用 Driver driver = DriverManager.getDriver(String url);看看是不是driver为null。 最好使用Class.forName('com.mysql.jdbc.Driver');注册合适的驱动
回复
IoveLin 2015-11-23
你确定你字段属性写对了吗?我感觉不太对哦~报了参数空异常还有sql异常
回复
qingyuan18 2015-11-20
如果你部署在tomcat这类服务器上,把mysql的驱动jar包放tomcat安装目录下的common/lib里面,那里面是所有tomcat部署的项目都可以用的jar包
回复
heijava 2015-11-20
传说中的 加载驱动 Class.forName();
回复
1coder 2015-11-20
没有加载驱动,你的 Test是怎么测试成的? 你的测试代码是什么?为嘛能测试成功。
回复
回复
苏生米沿 2015-11-18
没有加载驱动呀。web项目的话,jar包需要放在webinfo下的lib下面,你试试将依赖的jar包放进去看看效果
回复
青元子 2015-11-18
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DB { public static Connection getConn() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root" , "czcat"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } public static Statement createStmt(Connection conn) { Statement stmt = null; try { stmt = conn.createStatement(); } catch (SQLException e) { e.printStackTrace(); } return stmt; } public static ResultSet executeQuery(Statement stmt, String sql) { ResultSet rs = null; try { System.out.println("executeQuery"); rs = stmt.executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); } return rs; } public static int executeUpdate(Connection conn, String sql) { int ret = 0; Statement stmt = null; try { stmt = conn.createStatement(); ret = stmt.executeUpdate(sql); } catch (SQLException e) { e.printStackTrace(); } finally { close(stmt); } return ret; } public static PreparedStatement prepareStmt(Connection conn, String sql) { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql); } catch (SQLException e) { e.printStackTrace(); } return pstmt; } public static PreparedStatement prepareStmt(Connection conn, String sql, int autoGeneratedKeys) { PreparedStatement pstmt = null; try { pstmt = conn.prepareStatement(sql, autoGeneratedKeys); } catch (SQLException e) { e.printStackTrace(); } return pstmt; } public static void close(Connection conn) { if(conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } conn = null; } } public static void close(Statement stmt) { if(stmt != null) { try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } stmt = null; } } public static void close(ResultSet rs) { if(rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } rs = null; } } } 这是我自己封装的楼主直接拿去用吧,你的问题上面有提到,没有连接驱动
回复
海会圣贤 2015-11-18
没加载驱动.. 用Class.forname()动态加载驱动,你虽然引入了mysql包 但是没有加载驱动啊 Class.forName("com.mysql.jdbc.Driver");// 动态加载mysql驱动 // or: // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); // or: // new com.mysql.jdbc.Driver(); +++++1
回复
Usher丶AckMan 2015-11-18
你链接数据库的步骤有问题 参考文献:http://my.oschina.net/Tsher2015/blog/518099
回复
妖斩 2015-11-18
百度百度JDBC4步骤
回复
君莫傲 2015-11-18
重新加载驱动试一下,如果不行的话,检查一下代码,检查一下数据库,确定代码和数据库是否都是正确的。
回复
sinat_32863885 2015-11-17
引用 8 楼 Love_qq101 的回复:
要么你连接数据库的端口出了错,再或者你重新导入连接数据库的那个包,
数据库端口应该是默认的吧,Test用3306都连上了啊
回复
sinat_32863885 2015-11-17
引用 7 楼 sinat_31535993 的回复:
你那不是一个错误吧,一个空指针,一个SQL连接异常
就是因为没连接上,con才为空的啊
回复
Cx_轩 2015-11-17
没加载驱动.. 用Class.forname()动态加载驱动,你虽然引入了mysql包 但是没有加载驱动啊 Class.forName("com.mysql.jdbc.Driver");// 动态加载mysql驱动 // or: // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver(); // or: // new com.mysql.jdbc.Driver();
回复
Love_qq101 2015-11-17
要么你连接数据库的端口出了错,再或者你重新导入连接数据库的那个包,
回复
sinat_31535993 2015-11-17
你那不是一个错误吧,一个空指针,一个SQL连接异常
回复
项目右击选择build path,把里面jar包全部删掉,在重新导入一遍
回复
一路烟花 2015-11-17
+1,没有加载驱动
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-11-16 08:59
社区公告
暂无公告