1

Java クラスを作成しました。データベースから最初のレコードをフェッチしたいのですが、クエリを使用してフェッチしていますが、動作せず、例外が発生します。

このコードを使用して:

else if(ae.getSource()==btnfirst)
{   
    try{        
            m.rs=m.st.executeQuery("Select * from purchase ");
            m.rs.first();

                inv=m.rs.getInt(1);
                String inv1=Integer.toString(inv);

                int qty2=m.rs.getInt(5);
                String qty1=Integer.toString(qty2);

                rate=m.rs.getInt(6);
                String rate1=Integer.toString(rate);

                txtinvoice1.setText(inv1);
                txtdate1.setText(m.rs.getString(2));
                txtparty1.setText(m.rs.getString(3));
                ctrucktype1.setSelectedItem(m.rs.getString(4));
                txtcalu1.setText(qty1);
                txtrate1.setText(rate1);
                txtbuilty1.setText(m.rs.getString(7));

    }catch(Exception e)
        {e.printStackTrace();}
}

limit 1スタックトレースを使用した後

H:\Workspace\Mining Inventory\Project\src>java mdiform
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in
 FROM clause.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6956)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7113)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3109)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:2
52)
        at PurchaseMaster.actionPerformed(PurchaseMaster.java:307)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:20
18)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jav
a:2341)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel
.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259
)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonL
istener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6504)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
        at java.awt.Component.processEvent(Component.java:6269)
        at java.awt.Container.processEvent(Container.java:2229)
        at java.awt.Component.dispatchEventImpl(Component.java:4860)
        at java.awt.Container.dispatchEventImpl(Container.java:2287)
        at java.awt.Component.dispatchEvent(Component.java:4686)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832
)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
        at java.awt.Container.dispatchEventImpl(Container.java:2273)
        at java.awt.Window.dispatchEventImpl(Window.java:2713)
        at java.awt.Component.dispatchEvent(Component.java:4686)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
        at java.awt.EventQueue.access$000(EventQueue.java:101)
        at java.awt.EventQueue$3.run(EventQueue.java:666)
        at java.awt.EventQueue$3.run(EventQueue.java:664)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:87)
        at java.awt.EventQueue$4.run(EventQueue.java:680)
        at java.awt.EventQueue$4.run(EventQueue.java:678)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:211)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:128)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:117)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)

        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)

        at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
4

3 に答える 3

2

最初のレコードのみが必要な場合、クエリは次のようになります。

Select * from purchase LIMIT 1

結果が出るまでに時間がかかるため、必要以上にデータベースに問い合わせる必要があります。

編集:おそらく を使用してOracleいるので、これを試してください:

SELECT * FROM purchase WHERE ROWNUM = 1

またWHERE、制限によって結果が 1 つしか得られないため、特定のものが必要になりますが、条件を指定しないと、必要な結果が得られる可能性はほとんどありません。

于 2013-10-16T13:23:22.333 に答える
0

rs.next() ステートメントが欠落していると思いますが、例外を見ずに判断するのは困難です。rs.firstである結果セットで使用すると、例外がスローされTYPE_FORWARD_ONLYます。これがデフォルトだと思います。

try{        
            m.rs=m.st.executeQuery("Select * from purchase ");
 ***           m.rs.next();  ***

                inv=m.rs.getInt(1);
                String inv1=Integer.toString(inv);

                int qty2=m.rs.getInt(5);
于 2013-10-16T13:23:19.297 に答える
0

最初のレコードのみが必要なため、データベースからすべてのレコードをフェッチして最初のレコードを取得しても意味がありません。デフォルトの順序に基づいて選択されたレコードを制限することをお勧めします。

Select * from purchase order by purchase_date LIMIT 1
于 2013-10-16T13:26:31.070 に答える