第一次来CSDN,初来乍到不太懂规矩做的是JDBC的练习题,写一个用了MySQL的图书馆里程序,代码如下,该导的包也导了,语法也没什么我所知道的错误了
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.sql.*;
import javax.swing.event.*;
import javax.swing.filechooser.*;public class LibraryAdminister
{
  private static Connection conn;
  private String address;
  //private Object[] title = {"书名","价格","出版社","作者","封面"};
  static
  {
    Properties props = new Properties();
    props.load(new FileInputStream("mysql.ini"));
private final String driver = props.getProperty("driver");
private final String url = props.getProperty("url");
private final String user = props.getProperty("user");
private final String pass = props.getProperty("pass");
Class.forName(driver);
conn = DriverManager.getConnection(url,user,pass);
  }
  JFrame JF= new JFrame("LibraryAdminister图书管理员");
  JPanel JP = new JPanel();
  JScrollPane JSP = new JScrollPane();
  TextField TF = new TextField(40);
  JButton sch = new JButton("搜索");
  JButton inst = new JButton("添加");
  JButton del = new JButton("删除");
  Box BX1 = Box.creatHorizontalBox();
  //BX1.add(TF);可否在方法外类内调用对象及其方法?
  Box BX2 = Box.creatHorizontalBox();
  public void init()
  {
  BX1.add(TF);
  BX1.add(sch);
  BX1.add(inst);
  BX2.add(del);
  JP.add(JSP);
  JP.add(BX1,BorderLayout.NORTH);
  JP.add(BX2,BorderLayout.SOUTH);
  JF.add(JP);
  JF.setBound(30,30,500,400);
  JF.pack();
  JF.setVisible(true);
  sch.addActionListener(e ->
{
   PreparedStatement pstmt = conn.prepareStatement(
"select * from book_table" + 
"where book_name = ?" +
    "or book_price = ?" + 
"or book_author = ?" +
"or book_press = ?",ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
try
{
pstmt.setString(1,TF.getText());
pstmt.setString(2,TF.getText());
pstmt.setString(3,TF.getText());
pstmt.setString(4,TF.getText());
ResultSet rs = pstmt.executeQuery();
loadResultTable(rs);
}
catch (SQLException e)
{
e.printStackTrace();
TF.setText("数据查询时发生异常!");
TF.addActionListener(e ->
 {
if(TF.getText == "数据查询时发生异常!")
 {
TF.setText("");
 }
 });
}
});
  inst.addActionListener(e ->
{
   insertFrame();
});
      del.addActionListener(e ->
{
   int row = booktable.getSelectedRows();//可能报错;booktable标识符不存在
PreparedStatement pstmt = conn.prepareStatement(
"delete from book_table where book_id = ?");
try
{
pstmt.setSrting(1,row + 1);
int influencedRows = pstmt.executeUpdata();
if(influencedRows > 0)

TF.setText("已删除" + influencedRows + "条记录");
}
TF.addActionListener(et ->
 {
if(TF.getText().contains("已删除条记录"))
 {
TF.setText("");
 }
 });
}
catch (SQLException e)
{
e.printStackTrace();
TF.setText("删除数据时发生异常!");
TF.addActionListener(e2 ->
 {
if(TF.getText() == "删除的数据时发生异常!")
 {
TF.setText("");
 }
 });
}
});
  JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  public void insertFrame()
  {
  JFrame insframe = new JFrame("添加");
  JPanel inspanel = new JPanel(new BorderLayout(5,15));
  Box blayout = Box.creatVerticalBox();
  Box[] bh = new Box[6];
  JButton ok = new JButton("确定");
  for(int i = 0;i < 6;i++)
  {
  bh[i] = Box.creatHorizontalBox();
  }
  bh[0].add(new JLabel("请输入书名:   "));
  bh[1].add(new JLabel("请输入价格:   "));
  bh[2].add(new JLabel("请输入作者:   "));
  bh[3].add(new JLabel("请输入出版社: "));
  bh[4].add(new JLabel("请选择封面:   "));
  bh[5].add(ok);
  for(int i =0;i < 5;i++)
  {
  bh[i].add(new TextField(10));
  }
  JButton IO = new JButton("浏览");
  bh[4].add(IO);
  for(int i = 0;i < 6;i++)
  {
  blayout.add(bh[i]);
  }
  inspanel.add(blayout);
  insframe.add(inspanel);
  insframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  insframe.pack();
  insframe.setVisible(true);
  ExtensionFileFilter filter = new ExtensionFileFilter();
  //初始化文件过滤器
  filter.addExtension("jpg");
  filter.addExtension("jpeg");
  filter.addExtension("gif");
  filter.addExtension("png");
  filter.setDescription("图片文件(*.jpg,*.jpeg,*.gif,*.png)");
  JFileChooser chooser = new JFileChooser(".");
  chooser.addChoosableFileFilter(filter);
  IO.addActionListener(e ->
                       {
   int result = chooser.showDialog(insframe,"请上传");
if(result == JFileChooser.APPROVE_OPTION)
    {
(TextField)(bh[4].getComponent(2)).setText(chooser.getSelectedFile().getPath());
    address = chooser.getSelectedFile().getPath();
}
   });
 ok.addActionListener(e ->
                      {
  PreparedStatement pstmt = conn.prepareStatement(
"insert into book_table values(null,?,?,?,?,?);");
    File f = new File((TextField)(bh[4].getComponent(2)).getText());
try(InputStream is = new FileInputStream(f))
{
for(int i = 0;i < 4;i++)
{
pstmt.setString(i+1,(TextField)(bh[i].getComponent(2)).getText());
}
pstmt.setBinaryStream(5,is,(int)f.length());
int affect = pstmt.executeUpdate();
if(affect == 1)
{
JDialog d1 = new JDialog(insframe,"Success!",true);
JLabel jl = new JLabel("添加成功,搜索该条记录相关信息即可见");
d1.getContentPanel().add(jl);
d1.pack();
d1.setVisible(true);
d1.addWindowListener(new WindowAdapter()
                    {
public void windowClosing(WindowEvent e)
{
d1.dispose();
}
});
}
}
catch (SQLException e)
{
e.printStackTrace();
System.out.println("添加失败,发生异常");
}
  });
  }
  public void loadResultTable(ResultSet rs)
  {
  ResultSetTableModel model = new ResultSetTableModel(rs);
  model.addTableModelListener(evt ->
                              {
   int row = evt.getFirstRow();
int column = evt.getColumn();
TF.setText("您修改了" + column
+ "," + "修改后为:" + model.getValueAt(row,column));
  });
  JTable booktable = new JTable(model);
  booktable.setRowSelectionAllowed(true);
  booktable.getColumnModel().getColumn(5).setCellRenderer(new GenderTableCellRenderer());
  JSP.setViewportView(booktable);
  //JSP.add(booktable);
  JF.validate();
  }
  public static void main(String[] args)
  {
  new LibraryAdminister().init();
  }
}
class ResultSetTableModel extends AbstractTableModel
{
private ResultSet rs;
private ResultSetMetaData rsmd;
    public ResultSetTableModel(ResultSet ars)
{
rs = ars;
try
{
rsmd = rs.getMetaData();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
public int getColumnCount()
{
try
{
return rsmd.getColumnCount();
}
catch (SQLException e)
{
e.printStackTrace();
return 0;
}
}
public Object getValueAt(int r,int c)
{
try
{
rs.absolute(r + 1);
return re.getObject(c + 1);
}
catch (SQLException e)
{
e.printStackTrace();
    return null;
}
}
public int getRowCount()
{
try
{
rs.last();
return rs.getRow();
}
catch (SQLException e)
{
e.printStackTrace();
    return 0;
}
}
public boolean isCellEditable(int rowIndex,int columnIndex)
{
if(columnIndex != 5)
{
return true;
}
else
{
return false;
}
}
public void setValueAt(Object aValue,int row,int column)
{
try
{
rs.absolute(row + 1 );
rs.updateObject(column + 1,aValue);
rs.updateRow();
fireTableCellupdated(row,column);
}
catch (SQLException e)
{
e.printStackTrace();
}
}
public Class getColumnClass(int c)
{
return getValueAt(0,c).getClass();
}

class GenderTableCellRenderer extends JPanel implements TableCellRenderer
{
private String cellValue;
final int COVER_WIDTH = 40;
final int COVER_HEIGHT = 30;
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column)
{
cellValue = (String)value;
if(hasFocus)
{
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
}
else
{
setBorder(null);
}
return this;
}
public void paint(Graphics g)
{
Image img = ImageIO.read(new File(address));
g.drawImage(g,img);
}
private void drawImage(Graphics g,Image image)
{
g.drawImage(image,(getWidth() - COVER_WIDTH)/2,(getHeight() - COVER_HEIGHT)/2,null);
}
}
class ExtensionFileFilter extends FileFilter
{
private String description = "";
private ArrayList<String> extensions = new ArrayList<>();
public void addExtension(String etension)
{
if(!extension.startsWith("."))
{
extension = "." + extension;
extension.add(extensions.toLowerCase());
}
}
public void setDescription(String aDescription)
{
description = aDescription;
}
public String getDescription()
{
return description;
}
public boolean accept(File f)
{
if(f.isDirectory()) return true;
String name = f.getName().toLowerCase();
for(String extension : extensions)
{
if(name.endsWith(extension))
{
return true;
}
}
return false;
}
}

解决方案 »

  1.   

    已经尝试了修改编码为UTF-8,然而没有什么用
      

  2.   

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.TextField;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Properties;import javax.imageio.ImageIO;
    import javax.swing.Box;
    import javax.swing.JButton;
    import javax.swing.JDialog;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.UIManager;
    import javax.swing.filechooser.FileFilter;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.TableCellRenderer;
      

  3.   

    这代码要用jdk8或以上版本编译
      

  4.   


    确实少导了几条,但是把你给的import语句全粘贴上一编译还是一样的问题
      

  5.   

    版本是JDK是9.0.4
      

  6.   

    18行到21行 这个定义属性的代码怎么放到static块里 还有很多我不说了语法错误太多
      

  7.   

    代码是书上抄的吗. 应该抄的不太对.  如果是书的问题,可以把书上的内容拍个照发上来,然后我们可以帮你看看是不是应该换一本书....  另外不建议使用记事本来写这么复杂的代码,这样很容易产生挫败感.. 学java之前先学一下IDE的用法吧,eclipse或者idea这样. .. 你都看到数据库连接了,应该也不算是一个彻底的初学者了吧最后,书不是可信的,听编译器的比较好