技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 网络编程 > java开发 > 正文

JAVAWeb初学者求帮忙!

来源: 技术CTO 阅读:

  
    对着视频做了一个简单的管理项目,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();
}
}
}

mysql的驱动放到jdk的lib内看看。
先重启开发工具,或者电脑!
引用 2 楼 WalkingtheDream 的回复:
先重启开发工具,或者电脑!
重启好多遍了呀,没用额
引用 1 楼 fangmingshijie 的回复:
mysql的驱动放到jdk的lib内看看。
只有web-inf里面有lib,而且放里面就会自动生成驱动吧
你试一下选择项目名右击选择build path,再点击子选项,在里面菜单选择libraries,在里面添加数据库举动jar包试试!
项目右击选择build path,把里面jar包全部删掉,在重新导入一遍
你那不是一个错误吧,一个空指针,一个SQL连接异常
 要么你连接数据库的端口出了错,再或者你重新导入连接数据库的那个包,
引用 7 楼 sinat_31535993 的回复:
你那不是一个错误吧,一个空指针,一个SQL连接异常
就是因为没连接上,con才为空的啊
引用 8 楼 Love_qq101 的回复:
 要么你连接数据库的端口出了错,再或者你重新导入连接数据库的那个包,
数据库端口应该是默认的吧,Test用3306都连上了啊
可能是没加载,加载一下驱动
DBUtile中有静态代码块加载mysql驱动吗?

Class.forName("com.mysql.jdbc.Driver");
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;
 }

name = "com.mysql.jdbc.Driver";  
Class.forName(name);//指定连接类型 
好像你的里面并没有
+1,没有加载驱动
没加载驱动..
用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();
没加载驱动..
用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
没有加载驱动呀。web项目的话,jar包需要放在webinfo下的lib下面,你试试将依赖的jar包放进去看看效果
重新加载驱动试一下,如果不行的话,检查一下代码,检查一下数据库,确定代码和数据库是否都是正确的。
百度百度JDBC4步骤
你链接数据库的步骤有问题

参考文献:http://my.oschina.net/Tsher2015/blog/518099
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;
}
}
}
这是我自己封装的楼主直接拿去用吧,你的问题上面有提到,没有连接驱动
 传说中的 加载驱动 Class.forName();
如果你部署在tomcat这类服务器上,把mysql的驱动jar包放tomcat安装目录下的common/lib里面,那里面是所有tomcat部署的项目都可以用的jar包
没有加载驱动,你的 Test是怎么测试成的?
你的测试代码是什么?为嘛能测试成功。
你确定你字段属性写对了吗?我感觉不太对哦~报了参数空异常还有sql异常
空指针异常是怎么回事,不是数据库无法获得连接造成的,两个不是同一个错误。
是因为没找到已注册的连接

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');注册合适的驱动
是否有启动数据库
另外异常为空指针异常无法,查看代码是否有问题!

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^