在java中获取第一个记录表单数据库?
我已经创建了一个java类,我想从数据库中获取第一条记录,我正在使用查询获取它,但它不起作用,并给出了一些异常 使用此代码:在java中获取第一个记录表单数据库?,java,sql,database,oracle,Java,Sql,Database,Oracle,我已经创建了一个java类,我想从数据库中获取第一条记录,我正在使用查询获取它,但它不起作用,并给出了一些异常 使用此代码: else if(ae.getSource()==btnfirst) { try{ m.rs=m.st.executeQuery("Select * from purchase "); m.rs.first(); inv=m.rs.getInt(1);
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();}
}
使用限制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)
我猜您缺少rs.next()语句,但是如果没有看到异常,很难判断
rs.first
如果在仅键入\u FORWARD\u的结果集上使用,则会引发异常。我相信这是默认的
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);
如果只需要第一条记录,则查询应为:
Select * from purchase LIMIT 1
您应该从数据库中请求比您需要的更多的内容,因为它需要时间才能得到结果
编辑:由于您可能使用的是Oracle
,您应该尝试以下方法:
SELECT * FROM purchase WHERE ROWNUM = 1
在中,您还需要一些特定的内容,因为限制可以帮助您只获得一个结果,但如果您不指定任何条件,则不太可能获得您想要的结果。因为您只需要第一条记录,所以从数据库中获取所有记录并从中检索第一条记录是毫无意义的。我建议您限制根据默认顺序选择的记录
Select * from purchase order by purchase_date LIMIT 1
它有什么例外?它在stacktrace中,请给我们看。Select*from purchase LIMIT 1
即使您解决了异常,也无法保证您会得到哪条记录。如果您关心这个问题,您需要在查询中输入ORDER BY。LIMIT关键字特定于DBMS。MySQL支持它,但Oracle不支持它。去掉LIMIT子句并发布原始异常-它在你开始使用LIMIT子句之前就被破坏了,但我们没有证据表明问题出在哪里。不是真的,有一个rs.first()调用,该调用将结果集定位为第一行。如果结果集已正确设置,则将调用。否则它将抛出exceptionLIMIT关键字,该关键字是DBMS特定的。MySQL支持,但Oracle不支持。大多数DBMS提供了一些限制返回行的方法。例如,MySQL使用LIMIT,T-SQL使用TOP,Oracle使用ROWNUM。请在此处阅读更多信息: