现在免费的jsp空间太少了,因此想到了applet既然能在网页上运行java程序,而且不用host,那么岂不是可以在免费的非java空间上运行java程序了?也就是说,借助免费的asp、php空间,可以运行包含java类的html(即applet程序)。
网上说applet不适合连接数据库,原因是考虑到安全问题;有的是用servelet + applet来完成数据库的连接,但这岂不是又用到了java的Host?明知山有虎,偏向虎山行,我用applet连接数据库,在eclipse上能运行,但是嵌入到网页中运行时,就不能连接数据库了,查网,得知引用的mysql的jar包未包含进去,有的说用到数字钥匙,有的说怎样怎样,但通过一番努力,未解决。
以下是程序:
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class AppAndJDBC extends JApplet implements ActionListener {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String name = null;
JLabel idLabel = new JLabel("号");
JTextField idTF = new JTextField(5);
JButton btn = new JButton("查询");
JTextField nameTF = new JTextField(5);
@Override
public void init() {
setLayout(new GridLayout(2,2));
add(idLabel);
add(idTF);
add(btn);
add(nameTF);
btn.addActionListener(this);
}
public void paint(Graphics g) {
/*try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=root&password=root");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM emp");
int i = 10;
while(rs.next()) {
g.drawString(rs.getString("id"),30,20 + i);
g.drawString(rs.getString("name"),50,20 + i);
i+=20;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}*/
// g.drawString("Hello Java",30,30);// 在绘图区内写上字符串
}
private String getName(int id) {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=root&password=root");
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT * FROM emp");
while(rs.next()) {
if(rs.getInt("id") == id) {
name = rs.getString("name");
rs.afterLast();
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return name;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btn) {
getName(Integer.valueOf(idTF.getText()));
nameTF.setText(name);
}
}
}