繁体   English   中英

将Blob插入sqlitedatabase java

[英]insert blob into sqlitedatabase java

我已经创建了一个数据库和GUI,可以从用户那里收集数据,现在我想将收集的数据添加到数据库中。 与db的连接良好,但是单击按钮时调用的函数失败,返回消息“空指针异常:null”

系统输出:

 Opened database successfully 
 add to  database successfully
 java.lang.NullPointerException: null

addtoBase:

    private void addtoBase(String name, int row) throws Exception, IOException, SQLException {
    PreparedStatement st = null;
    FileInputStream fis = null; 
    Connection con = null;

    try {
    Class.forName("org.sqlite.JDBC").newInstance();
    con = DriverManager.getConnection("jdbc:sqlite:heores.sqlite");
    con.setAutoCommit(false);
    System.out.println("Opened database successfully");
    FileInputStream inputStream= new FileInputStream(selectedFile.getAbsolutePath());
    String sql = "INSERT INTO hero (name, row, img) values (?, ?, ?)";
    st = con.prepareStatement(sql);

    st.setString(1, name);
    st.setInt(2, row);
    st.setBlob(3,inputStream);
    st.executeUpdate();
    con.commit();
    System.out.println("add to  database successfully");
    }

    catch(Exception e) {
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    System.exit(0);
    }


    finally {
    st.close();
    fis.close();       //<--- null here?
    }

}

按钮操作侦听器:

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String name;
    int row;


    switch(Row.getSelectedItem().toString()){
        case "Front":{
            row =1;
        }
        case "Middle":{
            row =2;
        }
        case "Back":{
            row =3;
        }
        default:{
            row=0;
        }

    }
    name=name1.getText();

 //Here it catches null pointer exeption, however the addtoBase functions seems to work fine all outputs are printed
    try {
        addtoBase(name, row);

    } catch ( Exception e ) {
    System.err.println( e.getClass().getName() + ": " + e.getMessage() );
    System.exit(0);
    }
}

有什么想法怎么了? 打开数据库后,似乎除了img列(Blob)之外的所有列均已填充,我要插入的文件在main中声明:

public class Main extends javax.swing.JFrame {

Image image;
File selectedFile = new File("avatar.png");
//...

我已经与

if( input!= null){
function(input);
}

但是所有变量和输入似乎都已初始化

更新:好的,我有堆栈跟踪

run:
Opened database successfully
add to  database successfully
java.lang.NullPointerException: null
java.lang.NullPointerException
at classes.Main.addtoBase(Main.java:82)
at classes.Main.jButton2ActionPerformed(Main.java:304)
at classes.Main.access$200(Main.java:23)
at classes.Main$3.actionPerformed(Main.java:169)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6525)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6290)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4881)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4703)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
 FileInputStream fis = null; 

不在代码中的任何位置进行设置,然后:

finally {
st.close();
fis.close();       //<--- null here?
}

因此,fis == null,而您试图将其关闭,则会收到异常。 您甚至在代码中用注释指出了那里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM