JavaSE_JDBC_Example01_BasicOP

package com.oraclesdp.tutor.jdbc.basic;

import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class FirstJDBCPro extends JFrame {
 private static final long serialVersionUID = 1446527170500674949L;
 private Connection connection;
 private Statement statement;
 private ResultSet resultSet;
 private ResultSetMetaData rsMetaData;
 
 //GUI变量定义
 private JTable table;
 private JTextArea inputQuery;
 private JButton submitQuery;
 
 public FirstJDBCPro()
 {
  //Form的标题
  super( "输入SQL语句,按查询按钮查看结果。" );
 
  String url = "jdbc:mysql://localhost:3306/test";
  String username = "root";
  String password = null;
  //加载驱动程序以连接数据库
  try {
   Class.forName( "com.mysql.jdbc.Driver" );
   connection = DriverManager.getConnection(
   url, username, password );
  }
  //捕获加载驱动程序异常
  catch ( ClassNotFoundException cnfex ) {
   System.err.println("装载 JDBC/ODBC 驱动程序失败。" );
   cnfex.printStackTrace();
   System.exit(1); // terminate program
  }
  //捕获连接数据库异常
  catch ( SQLException sqlex ) {
   System.err.println("无法连接数据库");
   sqlex.printStackTrace();
   System.exit(1); // terminate program
  }
  //如果数据库连接成功,则建立GUI
  //SQL语句
  String test="SELECT * FROM track";
  inputQuery = new JTextArea( test, 4, 30 );
  submitQuery = new JButton( "查询" );
  //Button事件
  submitQuery.addActionListener(
   new ActionListener() {
    public void actionPerformed( ActionEvent e )
    {
     getTable();
    }
   }
  );
 
  JPanel topPanel = new JPanel();
  topPanel.setLayout( new BorderLayout() );
  //将"输入查询"编辑框布置到 "CENTER"
  topPanel.add( new JScrollPane( inputQuery), BorderLayout.CENTER );
  //将"提交查询"按钮布置到 "SOUTH"
  topPanel.add( submitQuery, BorderLayout.SOUTH );
  table = new JTable();
  Container c = getContentPane();
  c.setLayout( new BorderLayout() );
  //将"topPanel"编辑框布置到 "NORTH"
  c.add( topPanel, BorderLayout.NORTH );
  //将"table"编辑框布置到 "CENTER"
  c.add( table, BorderLayout.CENTER );
  getTable();
  setSize( 500, 300 );
  //显示Form
  setVisible(true);
 }
 
 private void getTable()
  {
  try {
   //执行SQL语句
   String query = inputQuery.getText();
   statement = connection.createStatement();
   resultSet = statement.executeQuery( query );
   //在表格中显示查询结果
   displayResultSet( resultSet );
  }
  catch ( SQLException sqlex ) {
   sqlex.printStackTrace();
  }
 }
 
 private void displayResultSet( ResultSet rs )throws SQLException
 {
  //定位到达第一条记录
  boolean moreRecords = rs.next();
  //如果没有记录,则提示一条消息
  if ( ! moreRecords ) {
   JOptionPane.showMessageDialog( this,
   "结果集中无记录" );
   setTitle( "无记录显示" );
   return;
  }
  Vector columnHeads = new Vector();
  Vector rows = new Vector();
  try {
   //获取字段的名称
   ResultSetMetaData rsmd = rs.getMetaData();
   for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
   columnHeads.addElement( rsmd.getColumnName( i ) );
   //获取记录集
   do {
     rows.addElement( getNextRow( rs, rsmd ) );
   } while ( rs.next() );
   //在表格中显示查询结果
   table = new JTable( rows, columnHeads );
   JScrollPane scroller = new JScrollPane( table );
   Container c = getContentPane();
   c.remove(1);
   c.add( scroller, BorderLayout.CENTER );
   //刷新Table
   c.validate();
  }
  catch ( SQLException sqlex ) {
   sqlex.printStackTrace();
  }
 }
 
 
 private Vector getNextRow( ResultSet rs, ResultSetMetaData rsmd )throws SQLException
 {
  Vector currentRow = new Vector();
  for ( int i = 1; i <= rsmd.getColumnCount(); ++i )
  {
   currentRow.addElement( rs.getString( i ) );
  }
  //返回一条记录
  return currentRow;
 }
 
 public void shutDown()
 {
  try {
   //断开数据库连接
   connection.close();
  }
  catch ( SQLException sqlex ) {
   System.err.println( "Unable to disconnect" );
   sqlex.printStackTrace();
  }
 }
 
 public static void main( String args[] )
 {
  final FirstJDBCPro app = new FirstJDBCPro();
  app.addWindowListener( new WindowAdapter()
   { public void windowClosing( WindowEvent e )
     {
      app.shutDown();
      System.exit( 0 );
     }
   });
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值