-3

我有一个 java 应用程序的问题,我请求你的帮助。我需要开发一个代码,其中根据提供的约束创建图表。这必须使用 java 中的 BufferedImage 的概念来完成。我在 c: 中存储了一个图像,但无论我画什么,它都可能是一条简单的线或圆等,图像空间中不会显示任何内容。我还有一个疑问,即是否可以使用相同的结果集来存储来自不同表的数据。我无法解决出现的错误。 我的代码如下:

package diagram;

import diagram.AB;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.swing.*;
import java.sql.Timestamp;
import javax.imageio.ImageIO;

public class AB1 extends JPanel
{
public static void main(String a[]) throws Exception
{
    int ID,TC;
    String FROM, TO, ATS, DTS, SOURCE, DSTN, TS, ST;
    ResultSet rs;

    ArrayList<AB> ab = new ArrayList<AB>();

    //DATABASE CONNECTION

    String TrainNo = "12740";
    try
    {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
    Connection c = DriverManager.getConnection(url, "system", "akankshadas");

    // STORING TABLE IN RESULTSET

    int rows = 0;

    PreparedStatement st=c.prepareStatement("select * from MT_TRAIN_CONSIST where TRAIN_NUMBER = ? ORDER BY SERIAL_NUMBER" );
    rs=st.executeQuery();

    PreparedStatement st1=c.prepareStatement("select * from MT_RAKE_TRAIN_LINK_MASTER where TRAIN_NUMBER = ? ORDER BY SERIAL_NUMBER");
    rs = st1.executeQuery();

    PreparedStatement st2=c.prepareStatement("select * from MT_SLIP_TRAIN_INFO  where TRAIN_NUMBER = ? ORDER BY SERIAL_NUMBER ");
    rs = st2.executeQuery();

    while(rs.next())
    {

    ID = rs.getInt("ID_TRAIN_DEF");
    FROM = rs.getString("COACH_FROM");
    TO = rs.getString("COACH_TO");
    TC = rs.getInt("NUMBER_OF_COACHES");
    ATS = rs.getString("ATTACH_TRANSFER_STATION");
    DTS = rs.getString("DETACH_TRANSFER_STATION");
    SOURCE = rs.getString("TRAIN_SRC");
    DSTN = rs.getString("TRAIN_DSTN");
    TS = rs.getString("TRANSFER_STATION");
    ST = rs.getString("slip_type");

    AB obj = new AB();

    obj.id = ID;
    obj.tc = TC;
    obj.from = FROM;
    obj.to = TO;
    obj.ats = ATS;
    obj.dts = DTS;
    obj.src = SOURCE;
    obj.dstn = DSTN;
    obj.ts = TS;
    obj.st = ST;
    ab.add(obj);

    rows++;
    }
}

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

getImg(new FileOutputStream("C:\\A&B" + TrainNo + ".jpg"), ab);
}

public static void getImg(OutputStream out, ArrayList<AB> ab) throws IOException
{
int imgWidth = 1024, imgHeight = 768;

BufferedImage image = new BufferedImage(imgWidth,imgHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D gx = image.createGraphics();
gx.setColor(Color.BLUE);

gx.setColor(Color.BLACK);
gx.drawLine(60,350,970,350);
}
}   

它的对象类是

package diagram;

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;
import java.io.*;
import javax.swing.*;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import javax.imageio.ImageIO;

public class AB 
{
public String from, to, ats, dts, src, dstn, ts, st;
public int id, tc;

public static void main(String a[]) throws Exception
{
BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);

OutputStream out = new FileOutputStream("C:\\myImg.jpg");

ImageIO.write(image, "PNG", out);
out.close();
}

}

错误是

java.sql.SQLException: ORA-00904: "SERIAL_NUMBER": invalid identifier

at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:830)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2391)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2672)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:527)
at diagram.AB1.main(AB1.java:39)

我将不胜感激所有的帮助。很长一段时间以来,我一直坚持这一点。谢谢

4

2 回答 2

0

错误:

java.sql.SQLException: ORA-00904: "SERIAL_NUMBER": invalid identifier
...
at diagram.AB1.main(AB1.java:39)

该行:

PreparedStatement st1=c.prepareStatement("select * from MT_RAKE_TRAIN_LINK_MASTER where TRAIN_NUMBER = ? ORDER BY SERIAL_NUMBER");

该表(MT_RAKE_TRAIN_LINK_MASTER)中的列是什么?它有 SERIAL_NUMBER 列吗?

于 2012-12-09T09:24:58.977 回答
0

在这里,您正在使用准备好的语句。

PreparedStatement st=c.prepareStatement("select * from
MT_TRAIN_CONSIST where TRAIN_NUMBER = ? ORDER BY SERIAL_NUMBER" );

st.setInt(1, 100);//enter your train number 

 rs=st.executeQuery();

在执行 PreparedStatement 对象之前,您必须提供值来代替问号占位符(如果有)。

于 2012-12-09T09:34:53.627 回答