第一次来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;
}
}
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;
}
}
解决方案 »
- 一道关于多线程的问题,请高手回答,谢谢!
- 窗口dispose()
- [求助]SQL2005中数据如何生成jTree的节点和子节点
- java 与数据库连接出现问题?请你们帮帮忙?
- 用FileChannel读文件到String的时候,第二次调用这个方法的时候,缓冲器错误
- 请问easymock怎么用
- tomcat5.5.9+j2sdk1.5.0的配置问题
- ?非常简单的一个问题?
- 初学者的简单问题,关于数学函数!!
- 有关LDAP权限管理的高级问题
- linux系统centos6.5跑java1.8+selenium2.44+chrome64+chromedriver2.36报错的问题
- swing的一些问题
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;
确实少导了几条,但是把你给的import语句全粘贴上一编译还是一样的问题