📄 dbapplet.java
字号:
package eight;
/**
* @author wangmj
* @mail <a mailto="wangmingjie_2002@hotmail.com"> 2005-4-6 2005
*
* DBApplet.java 用JApplet做的Applet和一般的Applet有些不同。主要是因为Swing库类的单线程原则,
* 所以当JApplet的界面生成后,由其它线程(一般是消息分发线程)试图改变界面(如setText())
* 可能会导致问题发生。这是可以借助SwingUtilities.invokeLater()
* 或SwingUtilities.invokeAndWait()来解决。下面是一个用JApplet访问数据库的例子。
* ------------------------------------------------------ 不错,测试通过,可以正确的执行。
*/
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class DBApplet extends javax.swing.JApplet {
final static private String[] jdbcDriver = { "com.mysql.jdbc.Driver",
"com.informix.jdbc.IfxDriver", "sun.jdbc.odbc.JdbcOdbcDriver",
"com.borland.datastore.jdbc.DataStoreDriver",
"com.sybase.jdbc.SybDriver", "oracle.jdbc.driver.OracleDriver",
"COM.ibm.db2.jdbc.net.DB2Driver", "interbase.interclient.Driver",
"weblogic.jdbc.mssqlserver4.Driver" };
private boolean connected = false;
//判断是否连接成功
private Connection connection = null;
private ResultSet rs = null;
private String query = null;
//查询的sql语句
private String rsLine = null;
private String driver = null;
//数据库驱动程序
private String url = null;
//数据库连接url
private String user = null;
//数据库用户名
private String password = null;
//数据库用户密码
public DBApplet() {
initComponents();
postInit();
}
private void postInit() {
for (int i = 0; i < jdbcDriver.length; i++) {
cbDriver.addItem(jdbcDriver[i]);
}
}
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
taResponse = new javax.swing.JTextArea();
//显示sql查询结果的文本区域
jPanel2 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jLabel6 = new javax.swing.JLabel();
tfSql = new javax.swing.JTextField();
//输入sql语句的文本区域。
btnExecute = new javax.swing.JButton();
//sql执行按钮
jPanel3 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
cbDriver = new javax.swing.JComboBox();
//数据库驱动下拉框
jLabel7 = new javax.swing.JLabel();
tfUrl = new javax.swing.JTextField();
//连接数据库的url
jLabel9 = new javax.swing.JLabel();
tfUser = new javax.swing.JTextField();
//录入用户名的文本框
jLabel10 = new javax.swing.JLabel();
tfPassword = new javax.swing.JTextField();
//录入用户密码的文本框
btnConnect = new javax.swing.JButton();
//连接button
btnDisconnect = new javax.swing.JButton();
//释放数据库连接的button
setFont(new java.awt.Font("Verdana", 0, 12));
//设置字体
jScrollPane1.setViewportView(taResponse);
getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel2, java.awt.BorderLayout.EAST);
jLabel6.setText("SQL:");
//label Sql:
jPanel1.add(jLabel6);
tfSql.setPreferredSize(new java.awt.Dimension(300, 21));
jPanel1.add(tfSql);
btnExecute.setText("Execute Query");
btnExecute.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnExecuteActionPerformed(evt);
}
});
jPanel1.add(btnExecute);
//将jPanel1放到上边
getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH);
jPanel3.setPreferredSize(new java.awt.Dimension(550, 100));
jPanel3.setMinimumSize(new java.awt.Dimension(550, 100));
jPanel3.setMaximumSize(new java.awt.Dimension(550, 100));
jLabel3.setText("JDBC Driver:");
jPanel3.add(jLabel3);
//label JDBC Driver:
jPanel3.add(jPanel4);
cbDriver.setPreferredSize(new java.awt.Dimension(450, 26));
cbDriver.setMinimumSize(new java.awt.Dimension(100, 26));
jPanel3.add(cbDriver);
jLabel7.setText("Database URL:");
jPanel3.add(jLabel7);
//label Database URL:
tfUrl.setPreferredSize(new java.awt.Dimension(450, 21));
jPanel3.add(tfUrl);
jLabel9.setText("User:");
jPanel3.add(jLabel9);
//label User:
tfUser.setPreferredSize(new java.awt.Dimension(100, 21));
jPanel3.add(tfUser);
jLabel10.setText("Password:");
jPanel3.add(jLabel10);
//label PassWord:
tfPassword.setPreferredSize(new java.awt.Dimension(100, 21));
jPanel3.add(tfPassword);
btnConnect.setPreferredSize(new java.awt.Dimension(89, 27));
btnConnect.setMaximumSize(new java.awt.Dimension(89, 27));
btnConnect.setText("Connect");
btnConnect.setMinimumSize(new java.awt.Dimension(89, 27));
btnConnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnConnectActionPerformed(evt);
}
});
jPanel3.add(btnConnect);
btnDisconnect.setText("Disconnect");
btnDisconnect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnDisconnectActionPerformed(evt);
}
});
jPanel3.add(btnDisconnect);
//放在布局管理器的北边
getContentPane().add(jPanel3, java.awt.BorderLayout.NORTH);
}
//执行查询的sql语句
private void btnExecuteActionPerformed(java.awt.event.ActionEvent evt) {
if (!connected) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("No database connected.\n");
}
});
} else {
if (connection == null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Database connection error.\n");
}
});
} else {
try {
query = tfSql.getText();
Statement stmt = connection.createStatement();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Executing query: " + query
+ "\n");
}
});
rs = stmt.executeQuery(query);
//使用元数据
ResultSetMetaData rsmd = rs.getMetaData();
//还使用了元数据来判断有多少个字段
int count = rsmd.getColumnCount();
int i;
rsLine = "\n 表的字段名如下:\n";
for (int it = 1; it <= count; it++) {
rsLine += rsmd.getColumnName(it) + " ";
}
rsLine += "\n";
while (rs.next()) {
for (i = 1; i <= count; i++) {
rsLine += rs.getString(i) + " ";
}
rsLine += "\n";
}
rsLine += "\n";
stmt.close();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append(rsLine);
}
});
} catch (SQLException e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Query failed.\n");
}
});
e.printStackTrace();
}
}
}
}
//释放数据库连接
private void btnDisconnectActionPerformed(java.awt.event.ActionEvent evt) {
if (connected) {
try {
if (connection != null) {
connection.close();
connection = null;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Database disconnected.\n");
}
});
}
} catch (SQLException e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Database disconnecting error.\n");
}
});
e.printStackTrace();
}
connected = false;
driver = null;
url = null;
user = null;
password = null;
} else {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Database already disconnected.\n");
}
});
}
}
//连接数据库
private void btnConnectActionPerformed(java.awt.event.ActionEvent evt) {
if (connected) {
taResponse.append("Database already connected.\n");
} else {
driver = (String) cbDriver.getSelectedItem();
url = tfUrl.getText();
user = tfUser.getText();
password = tfPassword.getText();
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse
.append("Using JDBC driver: " + driver + "\n");
}
});
//注册数据库驱动 通过jdbc的方式连接数据库
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(url, user, password);
//连接数据库
if (connection != null) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Database " + url
+ " connected.\n");
}
});
connected = true;
}
} catch (ClassNotFoundException e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Cannot load the driver.\n");
}
});
e.printStackTrace();
} catch (SQLException e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
taResponse.append("Cannot connect to the database.\n");
}
});
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea taResponse;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JLabel jLabel6;
private javax.swing.JTextField tfSql;
private javax.swing.JButton btnExecute;
private javax.swing.JPanel jPanel3;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JComboBox cbDriver;
private javax.swing.JLabel jLabel7;
private javax.swing.JTextField tfUrl;
private javax.swing.JLabel jLabel9;
private javax.swing.JTextField tfUser;
private javax.swing.JLabel jLabel10;
private javax.swing.JTextField tfPassword;
private javax.swing.JButton btnConnect;
private javax.swing.JButton btnDisconnect;
public static void main(String[] args) {
JFrame frame = new JFrame("通过JApplet连接数据库...");
DBApplet hwj = new DBApplet();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.getContentPane().add(hwj);
hwj.init();
frame.setSize(400, 300);
frame.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -