本示例實現Java插入和查詢數據。
1. 建立與數據庫連接類DbTool(本實例是Java與SQL Server 2008),代碼如下:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DbTool { private static Connection conn=null; //創建Connection對象 public static Connection getConn() { try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //加載SQL Server數據庫驅動 } catch(ClassNotFoundException e) { e.printStackTrace(); } //指定連接數據庫的URL String url="jdbc:sqlserver://localhost:1433;databaseName=SRM"; String user="sa"; //指定連接數據庫的用戶名 String passWord="1111"; //指定連接數據庫的密碼 try { conn=DriverManager.getConnection(url,user,passWord); if(conn!=null) { //如果Connection實例不為空 //System.out.println("數據庫連接成功"); //提示信息 } /* //加載MySQL數據庫的連接 Class.forName("com.mysql.jdbc.Driver"); //加載MySQL數據庫驅動 String url="jdbc:mysql://localhost:3306/SRM"; String user="sa"; String passWord="1111"; conn=DriverManager.getConnection(url,user,passWord); if(conn!=null){ } //加載Oracle數據庫的連接 Class.forName("oracle.jdbc.driver.OracleDriver");// 加載Oracle驅動程序 String url = "jdbc:oracle:" + "thin:@127.0.0.1:1521:SRM";// 127.0.0.1是本機地址,SRM是精簡版Oracle的默認數據庫名 String user = "sa";// 用戶名 String password = "1111";// 你安裝時選設置的密碼 conn = DriverManager.getConnection(url, user, password);// 獲取連接 */ } catch(SQLException e) { e.printStackTrace(); } return conn; } }
2. 創建數據操作類,代碼如下:
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Vector; public class DbOperation { private static DbOperation instance = null; public static DbOperation getInstance() { //返回DbOperation類實例的靜態方法,單例模式!!!! if (instance == null) { instance = new DbOperation(); } return instance; } public boolean addTbNews(TbNews tns) { //添加數據方法 Connection conn=null; boolean result=false; try { conn=DbTool.getConn(); //建立與數據庫的連接 String sqlInsert="INSERT INTO tbNews(topicId,contentTxt)VALUES(?,?)"; PreparedStatement stm=conn.prepareStatement(sqlInsert); stm.setString(1, tns.getTopicId()); stm.setString(2, tns.getContentTxt()); int i=stm.executeUpdate(); if (i==1) { result=true; } }catch(SQLException e) { e.printStackTrace(); }finally { try { conn.close(); }catch (SQLException e) { e.printStackTrace(); } } return result; } public Vector<TbNews> queryTbNews(){ //返回Vector類型方式查詢數據 Vector<TbNews> list =new Vector<TbNews>(); Connection conn=null; try { conn=DbTool.getConn(); Statement stmt=conn.createStatement(); String querySql="select * from TbNews"; ResultSet rs=stmt.executeQuery(querySql); while(rs.next()) { TbNews tbs=new TbNews(); tbs.setTopicId(rs.getString(1)); tbs.setContentTxt(rs.getString(2)); list.add(tbs); } } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch(SQLException e) { e.printStackTrace(); } } return list; } public List<String> selectTbNews(){ //查詢數據方法 List<String> tbsList=new ArrayList<String>(); Connection conn=null; try { conn=DbTool.getConn(); Statement stmt=conn.createStatement(); String selectSql="select * from TbNews"; ResultSet rs=stmt.executeQuery(selectSql); //執行SQL並返回結果集 while(rs.next()) { String tbs=rs.getString("topicId")+","+rs.getString("contentTxt"); tbsList.add(tbs); } } catch(Exception e) { e.printStackTrace(); } finally { try { conn.close(); //關閉連接 }catch(SQLException e) { e.printStackTrace(); } } return tbsList; } }
3. 創建實體類,代碼如下:
public class TbNews { private String topicId; private String contentTxt; public String getTopicId() { return topicId; } public void setTopicId(String topicId) { this.topicId=topicId; } public String getContentTxt() { return contentTxt; } public void setContentTxt(String contentTxt) { this.contentTxt=contentTxt; } }
4. 創建主窗體(添加記錄窗體),代碼如下:
import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class BoxLayoutFrame extends JFrame { private JTextField textField; private JTextArea textArea; public static void main(String[] args) { // TODO Auto-generated method stub BoxLayoutFrame frame=new BoxLayoutFrame(); frame.setVisible(true); } public BoxLayoutFrame() { super(); setTitle("箱式布局管理界面"); setBounds(360,260,360,320); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container cp=getContentPane(); Box topicBox=Box.createHorizontalBox(); //創建一個水平箱容器 cp.add(topicBox, BorderLayout.NORTH); //添加到窗體中的最北部 topicBox.add(Box.createHorizontalStrut(5)); //添加一個5像素的水平支柱 JLabel topicLabel=new JLabel("主題:"); //創建標簽topicLabel topicBox.add(topicLabel); //添加到水平箱容器中 topicBox.add(Box.createHorizontalStrut(5)); //添加一個5像素的水平支柱 textField=new JTextField(80); //創建文本框 topicBox.add(textField); //添加到水平容器中 Box box=Box.createVerticalBox(); //創建一個垂直箱容器 cp.add(box, BorderLayout.CENTER); //添加到窗體中 box.add(Box.createVerticalStrut(5)); //添加一個5像素的垂直支柱 Box contentBox=Box.createHorizontalBox(); //創建一個水平箱容器 contentBox.setAlignmentX(1); //設置組件的水平調整值,靠右對齊 box.add(contentBox); //添加到垂直容器中 contentBox.add(Box.createHorizontalStrut(5)); //添加一個5像素的水平支柱 JLabel contentLabel=new JLabel("內容:"); //定義標簽contentLabel contentLabel.setAlignmentY(0); //設置組件的垂直調整值,靠上方對齊 contentBox.add(contentLabel); //添加到水平箱容器中 contentBox.add(Box.createHorizontalStrut(5)); //添加一個5像素 JScrollPane scrollPane=new JScrollPane(); //創建滾動面板 scrollPane.setAlignmentY(0); //設置組件的垂直調整值,向上對齊 contentBox.add(scrollPane); //將滾動面板添加到contentBox中 textArea=new JTextArea(); //創建文本框textArea textArea.setLineWrap(true); //允許自動換行 scrollPane.setViewportView(textArea); //文本框添加到滾動面板scrollPane box.add(Box.createVerticalStrut(5)); //添加一個5像素高的垂直支柱 Box bottomBox=Box.createHorizontalBox(); bottomBox.setAlignmentX(1); box.add(bottomBox,BorderLayout.SOUTH); JButton viewButton=new JButton("瀏覽記錄"); bottomBox.add(viewButton); viewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SelectFrame sframe=new SelectFrame(BoxLayoutFrame.this); sframe.setVisible(true); } }); JButton button=new JButton("確定"); //創建一個按鈕button button.setAlignmentX(1); //設置組件的水平調整值,靠右對齊 //box.add(button); //按鈕添加到垂直箱容器 bottomBox.add(button); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg1) { //System.exit(0); if(textField.getText().length()==0) {//如果文本框無輸入信息則不作任何處理 } if(!textField.getText().equals("")) { TbNews tbs=new TbNews(); tbs.setTopicId(textField.getText()); tbs.setContentTxt(textArea.getText()); boolean res =DbOperation.getInstance().addTbNews(tbs); if (res==true) { textField.setText(null); textArea.setText(null); } } } }); } }
5. 創建瀏覽記錄窗體,代碼如下:
import java.awt.BorderLayout; import java.awt.Container; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.Vector; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class SelectFrame extends JDialog { Thread t; private JTable table; private DefaultTableModel tableModel; public SelectFrame(BoxLayoutFrame frame) { super(frame,"瀏覽記錄",true); setBounds(380,300,300,260); Container cp=getContentPane(); String[] columns= {"topicId","contentTxt"}; tableModel=new DefaultTableModel(columns,0); List<String> tbs=DbOperation.getInstance().selectTbNews(); for(String info:tbs) { String[] args=info.split(","); tableModel.addRow(args); } table=new JTable(); table.setModel(tableModel); final JScrollPane scrollPane=new JScrollPane(); cp.add(scrollPane, BorderLayout.CENTER); scrollPane.setViewportView(table); } }
執行添加結果如下:
執行瀏覽記錄結果如下圖所示: