使用java和SQL查询INSERT INTO将新记录插入MS访问[关闭]

Posted

技术标签:

【中文标题】使用java和SQL查询INSERT INTO将新记录插入MS访问[关闭]【英文标题】:INSERT new record into MS access using java and SQL query INSERT INTO [closed] 【发布时间】:2013-01-10 10:08:10 【问题描述】:

我想添加一条新记录来访问数据库,但是 SQL 查询没有应用它,这是我要添加数据的代码!!

    public void actionPerformed(ActionEvent e) 
    JButton b=(JButton)e.getSource();
    if(b==c.t.addR)
        String aa=Integer.toString(55);
        String t=c.t.titlefield.getText();
        String d=c.t.datefield.getText();
        String p=c.t.progressfield.getText();
        String pr=c.t.priorityfield.getText();
        String s="Open";
        System.out.println(t+"\t"+d+"\t"+p+"\t"+pr+"\t"+s); //error is here
        try 
            c.b.st.executeQuery("INSERT into Records (TaskID,Title,Deadline,Progress,Priority,Status) VALUES("+aa+"','"+t+"','"+d+"','"+p+"','"+pr+"','"+s+")");
         catch (SQLException e1) 
            // TODO Auto-generated catch block
            e1.printStackTrace();
        
    

这是我遇到的错误

java.sql.SQLException: [Microsoft][ODBC Microsoft Access 驱动程序] 查询表达式中的语法错误(缺少运算符) '55','a','1','1','high','Open'。在 sun.jdbc.odbc.JdbcOdbc.createSQLException(未知来源)在 sun.jdbc.odbc.JdbcOdbc.standardError(未知来源)在 sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(未知来源)在 sun.jdbc.odbc.JdbcOdbcStatement.execute(未知来源)在 sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(未知来源)在 Listener.actionPerformed(Listener.java:27) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源)在 javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(未知来源)在 javax.swing.DefaultButtonModel.setPressed(未知来源)在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知 来源)在 java.awt.AWTEventMulticaster.mouseReleased(未知来源) 在 java.awt.Component.processMouseEvent(Unknown Source) 在 javax.swing.JComponent.processMouseEvent(未知来源)在 java.awt.Component.processEvent(未知来源)在 java.awt.Container.processEvent(未知来源)在 java.awt.Component.dispatchEventImpl(未知来源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源)在 java.awt.LightweightDispatcher.processMouseEvent(未知来源)在 java.awt.LightweightDispatcher.dispatchEvent(未知来源)在 java.awt.Container.dispatchEventImpl(未知来源)在 java.awt.Window.dispatchEventImpl(未知来源)在 java.awt.Component.dispatchEvent(未知来源)在 java.awt.EventQueue.dispatchEventImpl(未知来源)在 java.awt.EventQueue.access$400(未知来源)在 java.awt.EventQueue$2.run(Unknown Source) at java.awt.EventQueue$2.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 来源)在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue$3.run(未知源)在 java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) 在 java.security.AccessControlContext$1.doIntersectionPrivilege(未知 源)在 java.awt.EventQueue.dispatchEvent(未知源)在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知 来源)在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(Unknown Source) 在 java.awt.EventDispatchThread.run(未知来源)

【问题讨论】:

"...VALUES("+aa+"','"+t+"','"+d+"','"+p+"','"+pr+"','"+s+")" 请让我为你扩展一下:"...VALUES(aaa', 'ttt', 'ddd', 'ppp', 'prpr', 'ss) 你觉得这很奇怪吗? 您的代码对 SQL 攻击不安全。利用PreparedStatement 缓解SQL 注入。 【参考方案1】:

错误必须发生在这一行:

c.b.st.executeQuery("INSERT into Records (TaskID,Title,Deadline,Progress,Priority,Status) VALUES("+aa+"','"+t+"','"+d+"','"+p+"','"+pr+"','"+s+")");

看看它,是因为你的参数周围没有开始和结束引号吗?试试:

c.b.st.executeQuery("INSERT into Records (TaskID,Title,Deadline,Progress,Priority,Status) VALUES('"+aa+"','"+t+"','"+d+"','"+p+"','"+pr+"','"+s+"')");

【讨论】:

谢谢,,,错误删除,但是我面临的另一个小问题,,,我必须手动设置“TaskID”,这是我的主键,我希望它是自动的生成,所以我在java中选择了它的类型,为“AutoNumber”,,,,但是当我跳过“TaskID”时,生成的错误说“主键不能为空”请提出解决方案!!!跨度> @MasoodFarooq 应该在 Access 中而不是在 java 中设置为自动编号。 你介意与我分享 ms.access 到 java 库吗?我想我要试试你箱子里最小的那个。 @MasoodFarooq

以上是关于使用java和SQL查询INSERT INTO将新记录插入MS访问[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Access 2003中的SQL:INSERT INTO和多个SELECT查询

Sql中insert into 插入子查询结果问题

MS-Access:SQL JOIN 和 INSERT INTO 与 WHERE 慢

避免在 SQL Server 中的 INSERT INTO SELECT 查询中重复

用insert into 怎么添加多条记录

使用 INSERT INTO (SQL Server 2005) 插入多个值