源代码如下:
package wuchunzhi;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.io.*;
public class StoreAndRetrieveImage extends JApplet 
{
private Connection connection;
private Statement stmt;
private PreparedStatement pstmt=null;
private DescriptionPanel descriptionPanel1=new DescriptionPanel();
private JComboBox jcboCountry=new JComboBox();
public StoreAndRetrieveImage()
{
try
{
connectDB();
storeDataToTabel();
fillDataInComboBox();
retrieveFlagInfo((String)(jcboCountry.getSelectedItem()));

}
catch (Exception ex)
{
ex.printStackTrace();
}
jcboCountry.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent evt)
{
retrieveFlagInfo((String)(evt.getItem()));
}
});
getContentPane().add(jcboCountry,BorderLayout.NORTH);
getContentPane().add(descriptionPanel1,BorderLayout.CENTER);
}
private void connectDB() throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动器!");
connection=DriverManager.getConnection(
"jdbc:mysql://localhost/test?user=root&password=wuchunzhi");
System.out.println("建立连接!");
stmt=connection.createStatement();
pstmt = connection.prepareStatement("select flag,description"+
"from Country where name=?");
}
private void storeDataToTabel()
{
String[] countries={"Canada","USA","Germany","Indian","China"};
String[] imageFilenames={"image/canada.jpg",
"image/usa.jpg","image/uk.jpg",
"image/germany.jpg",
"image/india.jpg","image/china.jpg"};

String[] descriptions = {"canada's flag","germany's flag","usa's flag",
"uk's flag","india's flag","china's flag"};
try
{
PreparedStatement pstmt = connection.prepareStatement(
"insert into Country value(?,?,?)");
for (int i=0;i<countries.length;i++)
{
pstmt.setString(1, countries[i]);
java.net.URL url=this.getClass().getResource(imageFilenames[i]);
InputStream inputImage = url.openStream();
pstmt.setBinaryStream(2, inputImage,(int)(inputImage.available()));
pstmt.setString(3, descriptions[i]);
pstmt.executeUpdate();
}
System.out.println("构建Country表!");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
private void fillDataInComboBox() throws Exception
{
ResultSet rs=stmt.executeQuery("select name from country");
while(rs.next())
{
jcboCountry.addItem(rs.getString(1));
}
}
private void retrieveFlagInfo(String name)
{
try
{
pstmt.setString(1, name);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
//Blob blob = rs.getBlob(1);
//ImageIcon imageIcon = new ImageIcon();
//blob.getBytes(1, (int)blob.length());
//descriptionPanel1.setImageIcon(imageIcon);
descriptionPanel1.setName(name);
String description = rs.getString(2);
descriptionPanel1.setDescription(description);
}
}
catch (Exception ex)
{
ex.printStackTrace();
System.err.println(ex);
}
}
}
class DescriptionPanel extends JPanel
{
private JLabel image = new JLabel();
private JLabel title=new JLabel();
private JTextArea Description;
public DescriptionPanel()
{
JPanel panel =new JPanel();
panel.setLayout(new BorderLayout());
panel.add(image,BorderLayout.CENTER);
panel.add(title,BorderLayout.SOUTH);
JScrollPane scrollPane=new JScrollPane(Description=new JTextArea());
title.setFont(new Font("SansSerif",Font.BOLD,16));
Description.setFont(new Font("Serif",Font.PLAIN,14));
Description.setLineWrap(true);
Description.setWrapStyleWord(true);
Description.setEditable(false);
scrollPane.setPreferredSize(new Dimension(200,100));
setLayout(new BorderLayout(5,5));
add(scrollPane,BorderLayout.CENTER);
add(panel,BorderLayout.WEST);
}
public void setTitle(String stitle)
{
title.setText(stitle);
}
public void setImageIcon(ImageIcon icon)
{
image.setIcon(icon);
Dimension dimension=new Dimension(
icon.getIconWidth(),icon.getIconHeight());
image.setPreferredSize(dimension);
}
public void setDescription(String text)
{
Description.setText(text);
}
}

解决方案 »

  1.   

    "connection=DriverManager.getConnection( 
    "jdbc:mysql://localhost/test?user=root&password=wuchunzhi"); "
     “String[] countries={"Canada","USA","Germany","Indian","China"}; 
    String[] imageFilenames={"image/canada.jpg", 
    "image/usa.jpg","image/uk.jpg", 
    "image/germany.jpg", 
    "image/india.jpg","image/china.jpg"}; ”  没法试
      

  2.   

    String[] imageFilenames={"image/canada.jpg", 
    "image/usa.jpg","image/uk.jpg", 
    "image/germany.jpg", 
    "image/india.jpg","image/china.jpg"}; ” 改为:
    String[] imageFilenames={"canada.jpg", 
    "usa.jpg","uk.jpg", 
    "germany.jpg", 
    "india.jpg","china.jpg"}; ” 把图片和源代码放同一目录下就可以了!
    我主要是想找出问题的原因!!因为我觉得是我的文件名编码方式不一样!
    因为前几天装XP SP3把系统语言换为了英语格式!后来想换为中文格式!!始终换不回来!!
    拜托各位!!帮我运行一下!!
    只要运行了!!告诉我结果就有分!!分不够  我再加!!
      

  3.   

    异常发生在这行:
    InputStream inputImage = url.openStream(); 
      

  4.   

    异常信息是这样的:
    加载驱动器!
    建立连接!
    java.lang.NullPointerException
    at java程序设计进阶篇.StoreAndRetrieveImage.storeDataToTabel(StoreAndRetrieveImage.java:67)
    at java程序设计进阶篇.StoreAndRetrieveImage.<init>(StoreAndRetrieveImage.java:19)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:539)
    at java.lang.Class.newInstance0(Class.java:373)
    at java.lang.Class.newInstance(Class.java:326)
    at sun.applet.AppletPanel.createApplet(AppletPanel.java:797)
    at sun.applet.AppletPanel.runLoader(AppletPanel.java:726)
    at sun.applet.AppletPanel.run(AppletPanel.java:380)
    at java.lang.Thread.run(Thread.java:675)
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where name=null' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:539)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
    at com.mysql.jdbc.Util.getInstance(Util.java:378)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3361)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3295)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1852)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1975)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2476)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1404)
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1546)
    at java程序设计进阶篇.StoreAndRetrieveImage.retrieveFlagInfo(StoreAndRetrieveImage.java:93)
    at java程序设计进阶篇.StoreAndRetrieveImage.<init>(StoreAndRetrieveImage.java:21)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:539)
    at java.lang.Class.newInstance0(Class.java:373)
    at java.lang.Class.newInstance(Class.java:326)
    at sun.applet.AppletPanel.createApplet(AppletPanel.java:797)
    at sun.applet.AppletPanel.runLoader(AppletPanel.java:726)
    at sun.applet.AppletPanel.run(AppletPanel.java:380)
    at java.lang.Thread.run(Thread.java:675)
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where name=null' at line 1