java - 插入 oracle 数据库时出现 NullPointerException
问题描述
我在 2 个包中分别有 JDBC 类和 Servlet 类。我尝试从 HTML 表单中获取数据并将其插入到表中。这是获取数据的 Servlet 类代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("UserName");
String password = request.getParameter("Password");
String country = request.getParameter("Country");
String address = request.getParameter("Address");
String gender = request.getParameter("Gender");
String years = request.getParameter("Years");
String bDate = request.getParameter("BirthDate");
Boolean hasCar = null;
if (request.getParameter("Car")!= null){
hasCar = true;
}else{
hasCar = false;
}
这是 JDBC 类中插入数据的方法
public static void insertData(User user){
String sql = "insert into users values (1,?,?,?,?,?,?,?,?)";
PreparedStatement ps = null;
String userName = user.getUserName();
String password = user.getPassword();
String address = user.getAddress();
String country = user.getCountry();
String gender = user.getGender();
int years = Integer.parseInt(user.getYears());
String bbd = user.getBDate();
Date bDate = null;
try {
bDate = (Date) new SimpleDateFormat("dd/MM/yyyy").parse(bbd);
} catch (ParseException e) {
e.printStackTrace();
}
boolean hasCar = user.isHasCar();
try {
ps.setString(1, userName);
ps.setString(2, password);
ps.setString(3, country);
ps.setString(4, address);
ps.setString(5, gender);
ps.setInt(6, years);
ps.setDate(7, bDate);
ps.setBoolean(8, hasCar);
ps = conn.prepareStatement(sql);
ps.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
我从 Servlet 类中的类用户创建了一个对象,并将其传递给 JDBC 方法并重定向到另一个 html 页面
User user = new User(userName, password, country, address, gender, years, bDate, hasCar);
JDBCClass.insertData(user);
response.sendRedirect("Home.html");
但它抛出 java.lang.nullpointerexception
怎么了?
解决方案
在您的代码中,您首先定义PreparedStatement ps = null;
并调用ps.setString()
然后对其进行初始化,这就是导致 NullPointerException 的原因,您需要在使用它之前对其进行初始化
ps = conn.prepareStatement(sql);//need to init it now
ps.setString(1, userName);
ps.setString(2, password);
ps.setString(3, country);
ps.setString(4, address);
ps.setString(5, gender);
ps.setInt(6, years);
ps.setDate(7, bDate);
ps.setBoolean(8, hasCar);
//ps = conn.prepareStatement(sql);//this is the wrong place
ps.executeUpdate(sql);
此外,在插入数据时省略列名是一种非常糟糕的做法
String sql = "insert into users values (1,?,?,?,?,?,?,?,?)"; //it's bad,since you omit the column name
String sql = "insert into users (col1,col2,col3,col4,col5,col6,col7,col8,col9)
values (1,?,?,?,?,?,?,?,?)";
推荐阅读
- excel - 如何根据唯一票汇总借记费条目#
- reactjs - Partialview/View 组件 VS Reactjs 组件
- python - 具有共享权重的 Keras Dense 模型
- html - 移动视图中的表格从页面上脱落
- react-native - stickyHeaderIndices 与 FlatList 数据索引不正确匹配
- java - 谁能告诉我在这种情况下我哪里错了?
- ios - 无法从 CMPedometer 数据中检索值 - SwiftUI
- javascript - 为什么我的反应元素渲染多次?
- parallel-processing - 如何在 Linux 上为 netCDF4 并行安装 I/O?
- html - 使用 XLSX 角度将 html 表的特定列导出到 excel 文件