import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class JdbcTest extends JFrame {
private Connection connection;
private Statement statement;
private ResultSet resultSet;
private ResultSetMetaData rsMetaData;
//GUI变量定义
private JTable table;
private JTextArea inputQuery;
private JButton submitQuery;
public JdbcTest()
{
//Form的标题
super( "输入SQL语句,按查询按钮查看结果。" );
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "root";
//加载驱动程序以连接数据库
try {
Class.forName( "com.mysql.jdbc.Driver" );
connection = DriverManager.getConnection(
url, username, password );
}
//捕获加载驱动程序异常
catch ( ClassNotFoundException ex ) {
System.err.println("装载 JDBC/ODBC 驱动程序失败。" );
ex.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 book";
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
show();
}
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 JdbcTest app =
new JdbcTest();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
app.shutDown();
System.exit( 0 );
}
}
);
}
}
分享到:
相关推荐
总结来说,这个项目涵盖了Java桌面应用开发的多个方面,包括UI设计、数据库操作、数据持久化、异常处理和测试等,是学习和实践Java Swing和JDBC技术的好例子。通过这样的系统,开发者可以深入理解如何在Java环境中...
它可能会介绍如何将数据库中的数据加载到`TableModel`,或者如何用`JDBC`(Java Database Connectivity)来处理数据库交互。 `Table_01`可能是一个Java类文件,实现了`JTable`的实例化和布局。在这个类中,开发者...
JPanel panel = new JPanel(); add(panel); textField = new JTextField(20); panel.add(textField); insertButton = new JButton("Insert"); insertButton.addActionListener(new ActionListener() { @...
首先,Java Swing 提供了一套组件(JComponents),如按钮(JButton)、文本框(JTextField)、面板(JPanel)等,这些组件可以用来构建用户交互的基本元素。Swing组件是轻量级的,意味着它们不依赖于操作系统,因此...
在这个例子中,我们看到了DAO模式如何与JDBC和前端UI相结合,实现一个简单的数据插入功能。在实际项目中,DAO模式通常会进一步扩展,包括更多的数据操作方法、更完善的事务管理和错误处理机制。
Swing包含了大量的组件,如JFrame(主窗口)、JPanel(面板)、JTable(表格)等,以及布局管理器如FlowLayout、BorderLayout、GridLayout和GridBagLayout,用于组织组件的位置。 在这个MySQLPlus项目中,开发者...
在这个例子中,你需要将`url`、`username`和`password`替换为实际的数据库连接信息。如果“fen”是一个自定义数据结构,你可能需要根据实际情况创建相应的类和方法来处理数据。 综上所述,这个Java小程序可能包含了...
JPanel panel = new JPanel(new GridLayout(5, 2)); panel.add(new JLabel("主机")); hostField = new JTextField(); panel.add(hostField); // 添加其他字段... connectButton = new JButton("连接"); ...
- **JPanel**:作为容器,用于存放其他组件。 - **JTabbedPane**:提供了选项卡式布局的功能,可以容纳多个面板或组件。 ### 2. JDBC (Java Database Connectivity) JDBC 是 Java 开发工具包中用于连接数据库的...
在这个例子中,数据库名为`SalaryManagement`,并且包含一个名为"职工表"的数据表,用来存储员工的基本信息如工号、姓名、性别、年龄、家庭住址和联系电话等。为了与Java应用程序连接,我们需要通过ODBC(Open ...
在这个例子中,`Login`类实现了这个接口,并重写了`actionPerformed`方法,当用户点击“登录”或“取消”按钮时,该方法会被调用。 4. **数据库连接**: - 使用了`java.sql.Connection`、`Statement`和`ResultSet`...
4. **数据库操作**:系统与数据库连接,实现了查询、删除、添加和修改学生成绩的功能,这通常涉及到JDBC(Java Database Connectivity)技术。 5. **输入输出流**:可能用于读取或写入文件,比如保存或加载学生数据...
描述中提到的`Window013.java`和`MyPanel`类就是这样的例子,`MyPanel`继承自JPanel,并覆盖了`paint()`方法,用于自定义绘图逻辑。 绘图技术在坦克大战中扮演了重要角色。Java的Graphics类是绘图的核心,它提供了...
JPanel panel = new JPanel(new FlowLayout()); JLabel usernameLabel = new JLabel("用户名:"); JLabel passwordLabel = new JLabel("密码:"); usernameField = new JTextField(20); passwordField = new ...
- 使用JDBC-ODBC桥接驱动在现代Java开发中已不再推荐,更建议使用JDBC驱动直接连接到特定数据库,如MySQL、Oracle等,这通常提供更好的性能和稳定性。 总结起来,Java学生管理系统展示了如何使用Swing构建用户界面...
在本Java Swing代码例子中,我们关注的是一个ATM登陆取款小程序的实现,这涉及到Swing组件的使用、事件处理以及基本的程序结构。 1. **Swing组件**: - `JFrame`:这是所有Swing应用程序的基础,它代表了窗口。在...
这里使用了JDBC(Java Database Connectivity)API来连接ODBC数据源(`jdbc:odbc:renshi`),并执行SQL查询来检查用户登录信息。这显示了如何在Java中进行数据库操作的基本步骤,包括加载驱动(`Class.forName`)和...
- `JPanel`:用于组合其他组件,如`StudentManageInterFrm.class`, `SchoolClassManageInterFrm.class`等可能包含多个`JPanel`来组织UI。 - `JTable`:可能用于展示学生或班级的列表,方便用户浏览和操作。 - `...