jsp连接数据库时出现了问题。
发布网友
发布时间:2022-04-09 19:53
我来回答
共3个回答
热心网友
时间:2022-04-09 21:22
哈哈,别听前面的,如果是前面说的:
"对数据库操作是用PreparedStatement接口,不是用Connection "
如果这样,根本不可能有异常出现,只是报告错误而已.因为异常是运行的时候出现的,而错误是编译器编译的时候告诉你的.
很明显:java.lang.NullPointerException 是异常.而不是错误!
你的sql有问题:
你的sql:
ResultSet rs=Condb.executeQuery("select *from admin where name="+admin_name+"and password="+password+"");
假设: admin_name="123", password="123"
那么你的sql 将是:
select *from admin where name=123and password=123
问一下你,这样的sql能运行吗?
所以在14行rs仍然指向为空,能没有java.lang.NullPointerException 异常吗?
严格的来说,我们一般将if语句的条件写为:
if(rs!=null&&rs.next())
看到了吗?如果rs为空,后面的next方法不会被执行,就不会有java.lang.NullPointerException 异常发生了,你要知道你的sql可能在数据库内找不到信息!在找不到信息的时候不这样写一样会有java.lang.NullPointerException 异常出现!
你的sql错误在这里:
1.如果数据库里面的name列和password列不是数值型的话就一定出错,因为少了''将他们括起来.
2. '*' 号没有和from 分开,and前面要有一个空格,刚开始写肯定是很多错误的了,我也是一样的.
所以应该改为:
ResultSet rs=Condb.executeQuery("select * from admin where name='"+admin_name+"' and password='"+password+"'");
如果你觉得这样很麻烦的话,可以考虑用java.sql.PreparedStatement接口.
例如:
try
{
PreparedStatement ps=cn.prepareStatement"select * from admin where name=? and password=?");//假设cn为你的Connection对象
/*如果你使用的是int型的数据,请这么写:
ps.setInt(1,2);//设置第一个?号为一个整数2
*/
ps.setString(1,admin_name);//设置第一个?为字符串变量admin_name的值
ps.setString(2,password);//设置第二个?为字符串变量password的值
rs=ps.executeQuery();//假设rs为ResultSet对象
.......
}catch(SQLException ex)
{
ex.printStackTrace(); //强烈建议你写这个,因为他能打印异常的具体信息,提供给你调试用!
}
热心网友
时间:2022-04-09 22:40
步骤(1):加载要使用的数据库驱动程序类,该工作由Class类的静态方法forName完成,他加载向相应的驱动程序类,并创建该类的一个实例。加载JDBC-ODBC桥驱动类采用如下语句:
Class.forName("classname");
(2):声明一个Connection接口的对象。如:
Connection conn;
(3)并使用driverManager类的静态方法getConnection建立数据库连接,该方法主要有两种重载形式:
Connection getConnection(String url);
Connection getConnection(String url,String user,String password)
例子:
import java.sql.Connection;
import java.sql.DriverManager;
public class Conn {
// 非链接池
public static Connection getConn() {
// 建立连接对象
Connection conn = null;
// 说明JDBC驱动类所在位置的字符串,与驱动所在目录对应。
String driver = "com.mysql.jdbc.Driver";
// MySQL的JDBC URL 字符串
// 连接到本地主机,端口为3306,数据库为mysql,
String sourse = "jdbc:mysql://127.0.0.1:3306/dq?characterEncoding=utf-8";
try {
// 初始化MySQL的JDBC桥驱动类
Class.forName(driver);
// 使用DriverManager类的getConnection方法建立连接。url=sourse,用户名为root,密码为空。
conn = DriverManager.getConnection(sourse, "root", "");
} catch (Exception e) {
System.out.println(e.toString());
}
// 返回连接对象
return conn;
}
public static void main(String[] args) {
System.out.println(Conn.getConn());
}
}
// import java.sql.*;
//
// public class mysqlDEMO{
// public static void main(String []args)throws Exception{
// //说明JDBC驱动类所在位置的字符串,与驱动所在目录对应
// String mysqldriver="org.mm.mysql.Driver";
// //MySQL的JDBC URL字符串
// //连接到本地主机,端口为3306,数据库为mysql,用户名为root,密码为空。
// String url="jdbc:mysql://localhost:3306/mysql?user=root;password=";
// //建立连接对象
// Connection conn;
// //初始化MyJDBC的JDBC桥驱动类
// Class.forName(mysqldriver);
// //使用DriverManager类的getConnection方法建立连接
// conn=DriverManager.getConnection(url,"","");
// }
// }
热心网友
时间:2022-04-10 00:15
对数据库操作是用PreparedStatement接口,不是用Connection