java - mysql.connector.java@5.1.38-bin/com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:2015) 处的“AWT-EventQueue-0”java.lang.NullPointerException
问题描述
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class DBManager {
private String connectionString="jdbc:mysql://localhost/xx?autoReconnect=true&useSSL=false";
private Connection conn=null;
private Statement st=null;
private ResultSet rs=null;
private String out;
private ArrayList<String> arr;
public DBManager() {
}
private void createConnection() {
try {
conn=DriverManager.getConnection(connectionString,"root","");
st=conn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ArrayList<String> recordFill(int num) {
createConnection();
String query="Select * from project_details where po="+num+"";
try {
rs = st.executeQuery(query);
arr=new ArrayList<String>();
java.sql.Date date = rs.getDate(2);
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String dateStr = dateFormat.format(date);
arr.add(dateStr);
arr.add(rs.getString(3));
arr.add(rs.getString(4));
arr.add(rs.getString(5));
arr.add(rs.getString(6));
java.sql.Date date2 = rs.getDate(7);
DateFormat dateFormat2 = new SimpleDateFormat("dd/MM/yyyy");
String dateStr2 = dateFormat.format(date2);
arr.add(dateStr2);
arr.add(rs.getString(8));
rs.close();
st.close();
conn.close();
}catch(SQLException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
return arr;
}
public boolean checkpo(int num) {
createConnection();
String query="Select PO from project_details";
try {
rs = st.executeQuery(query);
while(rs.next()) {
if(Integer.parseInt(rs.getString(1))==num) {
JOptionPane.showMessageDialog(null, "Already on database");
return true;
}
}
rs.close();
st.close();
conn.close();
}catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public static void main(String args[]) {
DBManager test=new DBManager();
}
}
我想解决这个错误请帮忙://///////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// /////////////////////////
Already in database
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at mysql.connector.java@5.1.38-bin/com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:2015)
at mysql.connector.java@5.1.38-bin/com.mysql.jdbc.ResultSetImpl.getDate(ResultSetImpl.java:1978)
at DBManager.recordFill(DBManager.java:60)
at ProjectDetails$3.actionPerformed(ProjectDetails.java:221)
at java.desktop/javax.swing.JTextField.fireActionPerformed(JTextField.java:508)
at java.desktop/javax.swing.JTextField.postActionEvent(JTextField.java:723)
at java.desktop/javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:839)
at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810)
at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2900)
at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:2948)
at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2862)
at java.desktop/java.awt.Component.processEvent(Component.java:6413)
at java.desktop/java.awt.Container.processEvent(Container.java:2263)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1950)
at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:870)
at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1139)
at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1009)
at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:835)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4893)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
解决方案
在recordFill
你得到一个Resultset rs
. 然后,您在rs.getDate(2);
没有检查结果集中是否有记录的情况下调用。一个电话rs.next()
应该可以解决这个问题。
您也必须处理查询未返回任何行的情况。所以应该有类似的东西
if (rs.next()) {
// row found, handle row
} else {
// row not found, maybe throw exception
}
推荐阅读
- keycloak - 将 Keycloak 与 Freeradius 集成
- kubernetes - 在本地基础设施上使用 DMZ 的入口
- tensorflow - InvalidArgumentError:矩阵大小不兼容:In[0]:[256,3],In[1]:[65,1] [[{{node dense_51/BiasAdd}}]]
- reactjs - ReferenceError:在初始化之前无法访问“步骤”
- proxy - 如何在 Istio 中制作断路器?
- java - azure 中的 Java 函数应用程序使用 Asb 队列触发器
- python - 我的代码的最后几行出现 SQL 未知 sql server 错误
- arduino - 无法在使用 mqtt 协议从 arduino 发布的节点 red 上接收消息
- javascript - 如何在新的 BrowserWindow 中打开 React 模式的内容?
- powershell - 使用Powershell重命名当前目录中包含文件和子目录的所有文件夹名称