import java.awt.GridLayout;
為衡陽縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務,及衡陽縣網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務為成都做網(wǎng)站、成都網(wǎng)站設(shè)計、衡陽縣網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class test {
static String[] arr;
static boolean flag=true;
static ListString a;
static JTextField jtf;
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame=new JFrame();
frame.setLayout(new GridLayout(1,2));
JButton button = new JButton("抽獎");
jtf = new JTextField();
frame.add(jtf);
frame.add(button);
a = new ArrayListString();
arr = new String[]{"張三","李四","王五"};
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
int i=0;
fond:
while(true){
String str = arr[(int)(Math.random()*arr.length)];
for(String b:a){
if(b.equals(str)){
if(i=arr.length){
jtf.setText("沒有人了");
break fond;
}
continue fond;
}
i++;
}
a.add(str);
jtf.setText(str);
break;
}
}
});
frame.setSize(500, 500);
frame.setLocation(500, 500);
frame.setVisible(true);
}
}
可以試試看啊
以下方法實現(xiàn)了用戶界面登陸
import java.awt.*;
import java.awt.event.*;
public class DengLuJieMian extends Frame implements ActionListener
{
Label username=new Label("用戶名:");//使用文本創(chuàng)建一個用戶名標簽
TextField t1=new TextField();//創(chuàng)建一個文本框?qū)ο?/p>
Label password=new Label("密碼:");//創(chuàng)建一個密碼標簽
TextField t2=new TextField();
Button b1=new Button("登陸");//創(chuàng)建登陸按鈕
Button b2=new Button("取消");//創(chuàng)建取消按鈕
public DengLuJieMian()
{
this.setTitle("學生信息管理系統(tǒng)");//設(shè)置窗口標題
this.setLayout(null);//設(shè)置窗口布局管理器
username.setBounds(50,40,60,20);//設(shè)置姓名標簽的初始位置
this.add(username);// 將姓名標簽組件添加到容器
t1.setBounds(120,40,80,20);// 設(shè)置文本框的初始位置
this.add(t1);// 將文本框組件添加到容器
password.setBounds(50,100,60,20);//密碼標簽的初始位置
this.add(password);//將密碼標簽組件添加到容器
t2.setBounds(120,100,80,20);//設(shè)置密碼標簽的初始位置
this.add(t2);//將密碼標簽組件添加到容器
b1.setBounds(50,150,60,20);//設(shè)置登陸按鈕的初始位置
this.add(b1);//將登陸按鈕組件添加到容器
b2.setBounds(120,150,60,20);//設(shè)置取消按鈕的初始位置
this.add(b2);// 將取消按鈕組件添加到容器
b1.addActionListener(this);//給登陸按鈕添加監(jiān)聽器
b2.addActionListener(this);// 給取消按鈕添加監(jiān)聽器
this.setVisible(true);//設(shè)置窗口的可見性
this.setSize(300,200);//設(shè)置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});//通過內(nèi)部類重寫關(guān)閉窗體的方法
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)//處理登陸事件
{
String name=t1.getText();
String pass=t2.getText();
if(name!=nullpass.equals("000123"))//判斷語句
{
new StudentJieMian();
}
}
}
public static void main(String args[])//主函數(shù)
{
new DengLuJieMian();
}
}
以下方法實現(xiàn)了學生界面設(shè)計
import java.awt.*;
import java.awt.event.*;
class StudentJieMian extends Frame implements ActionListener
{
MenuBar m=new MenuBar();//創(chuàng)建菜單欄
Menu m1=new Menu("信息");//創(chuàng)建菜單“信息”
MenuItem m11=new MenuItem("插入");//創(chuàng)建“插入”的菜單項
MenuItem m12=new MenuItem("查詢");
Menu m2=new Menu("成績");//創(chuàng)建菜單“成績”
MenuItem m21=new MenuItem("查詢");
public StudentJieMian()
{
this.setTitle("學生界面");//設(shè)置窗口標題
this.setLayout(new CardLayout());//設(shè)置窗口布局管理器
this.setMenuBar(m);//將菜單欄組件添加到容器
m.add(m1);//將信息菜單放入菜單欄
m.add(m2);
m1.add(m11);//將“插入”菜單項添加到“信息”菜單
m1.add(m12); //將“查詢”菜單項添加到“信息”菜單
m2.add(m21); //將“查詢”菜單項添加到“成績”菜單
m11.addActionListener(this); //給“插入”菜單項添加監(jiān)聽器
m12.addActionListener(this); //給“查詢”菜單項添加監(jiān)聽器
m21.addActionListener(this); //給“查詢”菜單項添加監(jiān)聽器
this.setVisible(true); //設(shè)置窗口的可見性
this.setSize(300,200); //設(shè)置窗口的大小
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);//關(guān)閉窗口
}
});
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==m11) //處理“添加信息”事件
{
new AddStudent();
}
if(e.getSource()==m12) //處理“查詢信息”事件
{
new SelectStudent();
}
if(e.getSource()==m21) //處理“查詢成績”事件
{
new ChengJiStudent();
}
}
public static void main(String args[])
數(shù)據(jù)庫連接(Connection)
數(shù)據(jù)庫連接
獲取數(shù)據(jù)庫連接有兩種方法,一種是通過驅(qū)動程序管理器DriverManager類,另一種則是使用DataSource接口。這兩種方法都提供了了一個getConnection方法,用戶可以在程序中對它們進行相應處理后調(diào)用這個方法來返回數(shù)據(jù)庫連接。
? DriverManager類
? DataSource接口
? Connection接口
? JDBC URL
jdbc:subprotocol:subname
? 驅(qū)動程序注冊方法
(1)調(diào)用Class.forName方法
(2)設(shè)置jdbc.drivers系統(tǒng)屬性
? DriverManager方法
DriverManager類中的所有方法都是靜態(tài)方法,所以使用DriverManager類的方法時,不必生成實例。
DriverManager
? getConnection方法
作用是用于獲取數(shù)據(jù)庫連接,原型如下:
public static Connection getConnection(String url)
throws SQLException;
public static Connection getConnection(String url, String user, String password)
throws SQLException;
public static Connection getConnection(String url, Properties info)
throws SQLException;
? 使用DriverManager的getConnetion方法
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection
("jdbc:odbc:sqlserver", "sa", "sa");
? 使用設(shè)置jdbc.drivers系統(tǒng)屬性的方法
java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver test.java
DataSource 接口
……
//從上下文中查找數(shù)據(jù)源,并獲取數(shù)據(jù)庫連接
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("sqlserver");
Connection conn = ds.getConnection();
//查詢數(shù)據(jù)庫中所有記錄
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM student");
……
Connection 接口
Connection接口代表了已經(jīng)建立的數(shù)據(jù)庫連接,它是整個JDBC的核心內(nèi)容。Connnection接口中的方法按照它們所實現(xiàn)的功能,可以分為三類:
? 生成數(shù)據(jù)庫語句
? 管理數(shù)據(jù)庫事務
? 獲取數(shù)據(jù)庫信息
生成數(shù)據(jù)庫語句
JDBC將數(shù)據(jù)庫語句分成三種類型 :
? 生成Statement 語句 :
Connection.createStatement()
? 生成PreparedStatement 語句 :
Connection. prepareStatement()
? 生成CallableStatement 語句 :
Connection. prepareCall ()
管理數(shù)據(jù)庫事務
? 默認情況下,JDBC將一條數(shù)據(jù)庫語句視為一個完整的事務??梢躁P(guān)掉默認事務管理:
public void setAutoCommit(Boolean autoCommit) throws SQLException;
將autoCommit的值設(shè)置為false,就關(guān)掉了自動事務管理模式
? 在執(zhí)行完事務后,應提交事務:
public void commit() throws SQLException;
? 可以取消事務:
public void rollback() throws SQLException;
第二講 第四部分
數(shù)據(jù)庫語句
數(shù)據(jù)庫語句
JDBC數(shù)據(jù)庫語句共有三種類型:
? Statement:
Statement語句主要用于嵌入一般的SQL語句,包括查詢、更新、插入和刪除等等。
? PreparedStatement:
PreparedStatement語句稱為準備語句,它是將SQL語句中的某些參數(shù)暫不指定,而等到執(zhí)行時在統(tǒng)一指定。
? CallableStatement:
CallableStatement用于執(zhí)行數(shù)據(jù)庫的存儲過程。
Statement 語句
? executeQuery方法
? executeUpdate方法
? execute方法
? close方法
executeQuery方法
? executeQuery方法主要用于執(zhí)行產(chǎn)生單個結(jié)果集的SQL查詢語句(QL),即SELECT語句。executeQuery方法的原型如下所示:
? public ResultSet executeQuery(String sql) throws SQLException;
executeUpdate方法
? executeUpdate方法主要用于執(zhí)行 INSERT、UPDATE、DELETE語句,即SQL的數(shù)據(jù)操作語句(DML)
? executeUpdate方法也可以執(zhí)行類似于CREATE TABLE和DROP TABLE語句的SQL數(shù)據(jù)定義語言(DDL)語句
? executeUpdate方法的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計數(shù))。而對于CREATE TABLE 或 DROP TABLE等并不操作特定行的語句,executeUpdate的返回值總為零。
execute方法
execute方法用于執(zhí)行:
? 返回多個結(jié)果集
? 多個更新計數(shù)
? 或二者組合的語句
execute方法
? 返回多個結(jié)果集:首先要調(diào)用getResultSet方法獲得第一個結(jié)果集,然后調(diào)用適當?shù)膅etter方法獲取其中的值。要獲得第二個結(jié)果集,需要先調(diào)用getMoreResults方法,然后再調(diào)用getResultSet方法。
? 返回多個更新計數(shù):首先要調(diào)用getUpdateCount方法獲得第一更新計數(shù)。然后調(diào)用getMoreResults,并再次調(diào)用getUpdateCount獲得后面的更新計數(shù)。
? 不知道返回內(nèi)容:如果結(jié)果是ResultSet對象,則execute方法返回true;如果結(jié)果是int類型,則意味著結(jié)果是更新計數(shù)或執(zhí)行的語句是DDL命令。
execute方法
為了說明如果處理execute方法返回的結(jié)果,下面舉一個代碼例子:
stmt.execute(query);
while (true) {
int row = stmt.getUpdateCount();
//如果是更新計數(shù)
if (row 0) {
System.out.println("更新的行數(shù)是:" + row);
stmt.getMoreResults();
continue;
}
execute方法
//如果是DDL命令或0個更新
if (row == 0) {
System.out.println("沒有更新,或SQL語句是一條DDL語句!");
stmt.getMoreResults();
continue;
}
//如果是一個結(jié)果集
ResultSet rs = stmt.getResultSet;
if (rs != null) {
while (rs.next()) {
// 處理結(jié)果集
. . .
}
stmt.getMoreResults();
continue;
}
break;
}
PreparedStatement 語句
登錄一個網(wǎng)站或BBS時 :
? 使用Statement語句
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery
(“SELECT password FROM userinfo
WHERE id=userId");
? 使用PreparedStatement語句
PreparedStatement pstmt=conn.prepareStatement
(“SELECT password FROM userinfo
WHERE id=?");
pstmt.setString(1, userId);
PreparedStatement語句
? 常用的setter方法
public void setBoolean(int parameterIndex, boolean x) throws SQLException;
public void setByte(int parameterIndex, byte x) throws SQLException;
public void setShort(int parameterIndex, short x) throws SQLException;
public void setInt(int parameterIndex,int x) throws SQLException;
public void setLong(int parameterIndex, long x) throws SQLException;
public void setFloat(int parameterIndex, float x) throws SQLException;
public void setDouble(int parameterIndex, double x) throws SQLException;
public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException;
public void setString(int parameterIndex, String x) throws SQLException;
public void setBytes(int parameterIndex, byte[] x) throws SQLException;
public void setDate(int parameterIndex, Date x) throws SQLException;
public void setTime(int parameterIndex, Time x) hrows SQLException;
public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException;
PreparedStatement語句
? PreparedStatement接口是由Statement接口擴展而來的,重寫了executeQuery方法、executeUpdate方法和execute 方法
? public ResultSet executeQuery() throws SQLException
? public int executeUpdate() throws SQLException
? public boolean execute() throws SQLException
CallableStatement語句
? CallableStatement語句是由Connection接口的prepareCall方法創(chuàng)建的,創(chuàng)建時需要傳入字符串參數(shù),參數(shù)的形式為:
? {call procedure_name[(?, ?, ...)]}
? {? = call procedure_name[(?, ?, ...)]}
? {call procedure_name}
CallableStatement語句
? 其中的問號是參數(shù)占位符,參數(shù)共有兩種:
? IN參數(shù)
? OUT參數(shù)
? IN參數(shù)使用setter方法來設(shè)置
? OUT參數(shù)則使用registerOutParameter方法來設(shè)置
CallableStatement 語句
CallableStatement cstmt = con.prepareCall
("{call getTestData(?, ?)}");
cstmt.registerOutParameter
(1, java.sql.Types.TINYINT);
cstmt.registerOutParameter
(2, java.sql.Types.DECIMAL, 3);
cstmt.executeQuery();
byte x = cstmt.getByte(1);
java.math.BigDecimal n =
cstmt.getBigDecimal(2, 3);
第二講 第五部分
結(jié) 果 集
結(jié)果集
? JDBC為了方便處理查詢結(jié)果,又專門定義了一個接口,這個接口就是ResultSet接口。ResultSet接口提供了可以訪問數(shù)據(jù)庫查詢結(jié)果的方法,通常稱這個接口所指向的對象為結(jié)果集。
? 有兩種方法得到結(jié)果集,一種是直接執(zhí)行查詢語句,將結(jié)果存儲在結(jié)果集對象上;另一種是不存儲返回結(jié)果,而在需要時調(diào)用數(shù)據(jù)庫語句的getResultSet方法來返回結(jié)果集
結(jié)果集
? 結(jié)果集指針
由于返回的結(jié)果集可能包含多條數(shù)據(jù)記錄,因此ResultSet 接口提供了對結(jié)果集的所有數(shù)據(jù)記錄輪詢的方法。結(jié)果集自動維護了一個指向當前數(shù)據(jù)記錄的指針,初始時這個指針是指向第一行的前一個位置。 next 方法就是用于向前移動指針的
結(jié)果集
? 結(jié)果集屬性
默認情況下,結(jié)果集是一個不可更新集,并且結(jié)果集的指針也只能向前移動。也就是說,在得到了一個結(jié)果集之后,用戶只能按照從第一條記錄到最后一條記錄的順序依次向后讀取,而不能跳到任意條記錄上,也不能返回到前面的記錄。不僅如此,結(jié)果集的這種輪詢只能進行一次,而不能再將指針重置到初始位置進行多次輪詢
結(jié)果集
? 結(jié)果集屬性
類型
并發(fā)性
有效性
? 屬性的設(shè)置是在生成數(shù)據(jù)庫語句時通過向生成方法傳入相應的參數(shù)設(shè)定的,而當結(jié)果集已經(jīng)返回時就不能夠再改變它的屬性了。
結(jié)果集生成Statement語句共有三種方法
public Statement createStatement() throws SQLException;
public Statement createStatement
(int resultSetType, int resultSetConcurrency)
throws SQLException;
public Statement createStatement
(int resultSetType, int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
結(jié)果集
? 生成PreparedStatement語句共有六種方法
public PreparedStatement prepareStatement(String sql) throws SQLException;
public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency)
throws SQLException;
public PreparedStatement prepareStatement(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
public PreparedStatement prepareStatement(String sql. String[] columnNames)
throws SQLException;
結(jié)果集
? 生成CallableStatement語句共有三種方法
public CallableStatement prepareCall(String sql)
throws SQLException;
public CallableStatement prepareCall
(String sql, int resultSetType,
int resultSetConcurrency)
throws SQLException;
public CallableStatement prepareCall
(String sql, int resultSetType,
int resultSetConcurrency,
int resultSetHoldability)
throws SQLException;
結(jié)果集
結(jié)果集類型
? 結(jié)果集的類型共有三種,TYPE_FORWARD_ONLY類型的結(jié)果集只能向前移動指針,而TYPE_SCROLL_INSENSITIVE類型和TYPE_SCROLL_SENSITIVE類型的結(jié)果集則可以任意移動指針。后兩種類型的區(qū)別在于,前者對來自其它處的修改不敏感(靜態(tài)),而后者則對于別人的修改敏感(動態(tài)視圖)。
結(jié)果集
結(jié)果集類型
? 對于可以任意移動指針的結(jié)果集,可以用來移動指針的方法包括:
? next 和previous :
? absolute 和relative :參數(shù)可正可負
? afterLast 、beforeFirst 、last 和first :
結(jié)果集
結(jié)果集并發(fā)性
? 結(jié)果集的并發(fā)性共有兩種,CONCUR_READ_ONLY的結(jié)果集是只讀而不可更新的;而CONCUR_UPDATABLE的結(jié)果集則是可以通過update方法進行更新的。
? ResultSet接口提供了一組update方法,用于更新結(jié)果集中的數(shù)據(jù)。這些方法與PreparedStatement接口中定義的setter方法一樣,也是與類型相對應的。所有的update方法都以update開頭 。
? 所有的update方法都有兩個參數(shù),第一個參數(shù)用于指定更新的列,它可以是列名稱也可以是列的序號;第二個參數(shù)則表示將要更新列的值。
結(jié)果集
結(jié)果集并發(fā)性
? Statement stmt = conn.createStatement
? (ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
? ResultSet rs = stmt.executeQuery("SELECT * FROM student " +
? "WHERE grade=2 AND math60 AND physics60 AND " +
? "chemistry60 AND english60 AND chinese60");
? while(rs.next()){
? rs.updateString("grade", "3");
? rs.updateRow();
? }
結(jié)果集
結(jié)果集有效性
? 結(jié)果集的有效性是指在調(diào)用了Connection 接口的commit 方法后,結(jié)果集是否自動關(guān)閉。所以它只有兩個可選值,即HOLD_CURSORS_OVER_COMMIT 和CLOSE_CURSORS_AT_COMMIT 。前者表示調(diào)用commit 方法之后,結(jié)果集不關(guān)閉;而后者則表示關(guān)閉結(jié)果集。
結(jié)果結(jié)果集
? 結(jié)果集的getter方法
ResultSet接口還提供了一組getter方法,用于返回當前記錄的屬性值。它們都是以get開頭的,后接數(shù)據(jù)類型。比如,如果要返回一個float類型的列值,則應調(diào)用getFloat方法。每一種類型的getter方法都有兩種形式,它們的名稱相同而參數(shù)不同。這兩種形式的getter方法都只有一個參數(shù),第一種形式的getter方法參數(shù)是String類型的,用于指定列的名稱;另外一種形式的getter方法參數(shù)則是int類型的,用于指定列的序號。
試試這個
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;
public class SZJSQ extends JApplet implements ActionListener
{
boolean i=true;
private JButton num0=new JButton("0");
private JButton num1=new JButton("1");
private JButton num2=new JButton("2");
private JButton num3=new JButton("3");
private JButton num4=new JButton("4");
private JButton num5=new JButton("5");
private JButton num6=new JButton("6");
private JButton num7=new JButton("7");
private JButton num8=new JButton("8");
private JButton num9=new JButton("9");
private JButton zuok=new JButton("(");
private JButton youk=new JButton(")");
private JButton dian=new JButton(".");
private JButton NULL=new JButton("N");
private JButton plu=new JButton("+");
private JButton min=new JButton("-");
private JButton mul=new JButton("x");
private JButton div=new JButton("/");
private JButton equ=new JButton("=");
private JButton cle=new JButton("C");//清除
private JTextField space=new JTextField(30);
public void init()
{
JPanel text=new JPanel();
text.setLayout(new FlowLayout());
text.add(space);
JPanel buttons=new JPanel();
buttons.setLayout(new GridLayout(5,4));
buttons.add(num9);
buttons.add(num8);
buttons.add(num7);
buttons.add(plu);
buttons.add(num6);
buttons.add(num5);
buttons.add(num4);
buttons.add(min);
buttons.add(num3);
buttons.add(num2);
buttons.add(num1);
buttons.add(mul);
buttons.add(num0);
buttons.add(cle);
buttons.add(equ);
buttons.add(div);
buttons.add(zuok);
buttons.add(youk);
buttons.add(dian);
buttons.add(NULL);
(num9).addActionListener(this);
(num8).addActionListener(this);
(num7).addActionListener(this);
(num6).addActionListener(this);
(num5).addActionListener(this);
(num4).addActionListener(this);
(num3).addActionListener(this);
(num2).addActionListener(this);
(num1).addActionListener(this);
(num0).addActionListener(this);
(plu).addActionListener(this);
(min).addActionListener(this);
(mul).addActionListener(this);
(div).addActionListener(this);
(equ).addActionListener(this);
(cle).addActionListener(this);
(zuok).addActionListener(this);
(youk).addActionListener(this);
(dian).addActionListener(this);
setLayout(new BorderLayout());
add("North",text);
add("South",buttons);
space.setText("0");
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==num9)
{
if(i==true)
{
space.setText("9");
i=false;
}
else space.setText(space.getText()+'9');
}
if(e.getSource()==num8)
{
if(i==true)
{
space.setText("8");
i=false;
}
else space.setText(space.getText()+'8');
}
if(e.getSource()==num7)
{
if(i==true)
{
space.setText("7");
i=false;
}
else space.setText(space.getText()+'7');
}
if(e.getSource()==num6)
{
if(i==true)
{
space.setText("6");
i=false;
}
else space.setText(space.getText()+'6');
}
if(e.getSource()==num5)
{
if(i==true)
{
space.setText("5");
i=false;
}
else space.setText(space.getText()+'5');
}
if(e.getSource()==num4)
{
if(i==true)
{
space.setText("4");
i=false;
}
else space.setText(space.getText()+'4');
}
if(e.getSource()==num3)
{
if(i==true)
{
space.setText("3");
i=false;
}
else space.setText(space.getText()+'3');
}
if(e.getSource()==num2)
{
if(i==true)
{
space.setText("2");
i=false;
}
else space.setText(space.getText()+'2');
}
if(e.getSource()==num1)
{
if(i==true)
{
space.setText("1");
i=false;
}
else space.setText(space.getText()+'1');
}
if(e.getSource()==num0)
{
if(i==true)
{
space.setText("0");
i=false;
}
else space.setText(space.getText()+'0');
}
if(e.getSource()==zuok)
{
if(i==true)
{
space.setText("(");
i=false;
}
else space.setText(space.getText()+'(');
} if(e.getSource()==youk)
{
if(i==false)
space.setText(space.getText()+')');
}
if(e.getSource()==dian)
{
if(i==false)
space.setText(space.getText()+'.');
}
if(e.getSource()==plu)
{
space.setText(space.getText()+'+');
i=false;
}
if(e.getSource()==min)
{
space.setText(space.getText()+'-');
i=false;
}
if(e.getSource()==mul)
{
space.setText(space.getText()+'*');
i=false;
}
if(e.getSource()==div)
{
space.setText(space.getText()+'/');
i=false;
}
if(e.getSource()==equ)
{
space.setText(String.valueOf(Calculator(space.getText())));
i=true;
}
if(e.getSource()==cle)
{
space.setText("0");
i=true;
}
}
public double Calculator(String f)//科學計算
{
int i=0,j=0,k;
char c;
StringBuffer s=new StringBuffer();
s.append(f);
s.append('=');
String formula=s.toString();
char[] anArray;
anArray=new char[50];
StackCharacter mystack=new StackCharacter();
while(formula.charAt(i)!='=')
{
c=formula.charAt(i);
switch(c)
{
case '(': mystack.push(new Character(c));
i++;
break;
case ')':
while(mystack.peek().charValue()!='(')
{
anArray[j++]=mystack.pop().charValue();
}
mystack.pop();
i++;
break;
case '+':
case '-':
while(!mystack.empty()mystack.peek().charValue()!='(')
{
anArray[j++]=mystack.pop().charValue();
}
mystack.push(new Character(c));
i++;
break;
case '*':
case '/':
while(!mystack.empty()(mystack.peek().charValue()=='*'||mystack.peek().charValue()=='/'))
{
anArray[j++]=mystack.pop().charValue();
}
mystack.push(new Character(c));
i++;
break;
case' ': i++;
break;
default: while((c='0'c='9')||c=='.')
{
anArray[j++]=c;
i++;
c=formula.charAt(i);
}
anArray[j++]='#';
break;
}
}
while(!(mystack.empty()))
anArray[j++]=mystack.pop().charValue();
i=0;
int count;
double a,b,d;
StackDouble mystack1 =new StackDouble();
while(ij)
{
c=anArray[i];
switch(c)
{
case '+':
a=mystack1.pop().doubleValue();
b=mystack1.pop().doubleValue();
d=b+a;
mystack1.push(new Double(d));
i++;
break;
case '-':
a=mystack1.pop().doubleValue();
b=mystack1.pop().doubleValue();
d=b-a;
mystack1.push(new Double(d));
i++;
break;
case '*':
a=mystack1.pop().doubleValue();
b=mystack1.pop().doubleValue();
d=b*a;
mystack1.push(new Double(d));
i++;
break;
case '/':
a=mystack1.pop().doubleValue();
b=mystack1.pop().doubleValue();
if(a!=0)
{
d=b/a;
mystack1.push(new Double(d));
i++;
}
else
{
System.out.println("Error!");
}
break;
default:
d=0;count=0;
while((c='0'c='9'))
{
d=10*d+c-'0';
i++;
c=anArray[i];
}
if(c=='.')
{
i++;
c=anArray[i];
while((c='0'c='9'))
{
count++;
d=d+(c-'0')/Math.pow(10,count);
i++;
c=anArray[i];
}
}
if(c=='#')
mystack1.push(new Double(d));
i++;
break;
}
}
return(mystack1.peek().doubleValue());
}
}
package com.company.dao;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class BaseDao {
// 數(shù)據(jù)庫驅(qū)動
String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
//url
String url = "jdbc:sqlserver://數(shù)據(jù)庫ip:端口號;databaseName=數(shù)據(jù)庫名;";
//用戶名
String uname = "數(shù)據(jù)庫用戶名";
//密碼
String pwd = "數(shù)據(jù)庫密碼";
/**
* 獲得連接對象
* @return
*/
protected Connection getCon(){
//返回的連接
Connection con = null;
try {
//載入驅(qū)動
Class.forName(driver);
//得到連接
con = DriverManager.getConnection(url, uname, pwd);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
/**
* 關(guān)閉數(shù)據(jù)庫
* @param con
* @param stmt
* @param rs
*/
protected void closeDB(Connection con, Statement stmt, ResultSet rs){
if(rs != null){
try {
//關(guān)閉結(jié)果集
rs.close();
rs = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt != null){
try {
//關(guān)閉語句對象
stmt.close();
stmt = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con != null){
try {
//關(guān)閉連接對象
con.close();
con = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
protected void closeDB(Connection con, PreparedStatement pstmt, ResultSet rs){
if(rs != null){
//關(guān)閉結(jié)果集
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(pstmt != null){
try {
pstmt.close();
pstmt = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
con = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
這個是我寫的一個基本的連接sql2005數(shù)據(jù)庫的代碼,.! 不知道你能不能用,! 你看一下吧, 連接的時候需要sqljdbc.jar數(shù)據(jù)庫驅(qū)動,!