数据库查询
利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如getXXX()的方法从结果集中读取数据。经过这样的一系列步骤就能实现对数据库的查询。
【例】Java应用程序访问数据库。应用程序打开考生信息表ksInfo,从中取出考生的各项信息。设考生信息数据库的结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.sql.*; public class Example10_9 extends JFrame implements ActionListener{ public static Connection connectByJdbcodbc(String url, String username,String password){ Connection con = null ; try { Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); //加载ODBC驱动程序 } catch (Exception e){ e.printStackTrace(); return null ; //加载失败,连接不成功 } try { con = DriverManager.getConnection(url, username, password); } catch (SQLException e){ e.printStackTrace(); return null ; //连接失败 } return con; //连接成功 } String title[] ={ "考号" , "姓名" , "成绩" , "地址" , "简历" }; JTextField txtNo = new JTextField( 8 ); JTextField txtName = new JTextField( 10 ); JTextField txtScore = new JTextField( 3 ); JTextField txtAddr = new JTextField( 30 ); JTextArea txtresume = new JTextArea(); JButton prev = new JButton( "前一个" ); JButton next = new JButton( "后一个" ); JButton first = new JButton( "第一个" ); JButton last = new JButton( "最后一个" ); Statement sql; //SQL语句对象 ResultSet rs; //存放查询结果对象 Example10_9(Connection connect){ super ( "考生信息查看窗口" ); setSize( 450 , 350 ); try { sql = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = sql.executeQuery( "SELECT * FROM ksInfo" ); Container con = getContentPane(); con.setLayout( new BorderLayout( 0 , 6 ); JPanel p[] = new JPanel[ 4 ]; for ( int i = 0 ; i < 4 ; i++){ p[i] = new JPane( new FlowLayout(FlowLayout.LEFT, 8 , 0 )); p[i].add( new JLabel(title[i])); } p[ 0 ].add(txtNo); p[ 1 ].add(txtName); p[ 2 ].add(txtScore); p[ 3 ].add(txtAddr); JPanel p1 = new JPane( new GridLayout94, 1 , 0 , 8 )); JScrollPane jsp = new JScrollPane(txtResume, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setPreforredSize( new Dimension( 300 , 60 ); for ( int i = 0 ; i < 4 ; i++){ p1.add(p[i]); } JPanel p2 = new JPanel( new FlowLayout(FlowLayout.LEFT, 10 , 0 ); p2.add( new JLabel(title[ 4 ])); p2.add(jsp); Jpanel p3 = new Jpanel(); p3.add(prev); p3.add(next); p3.add(first); p3.add(last); prev.addActionListener( this ); next.addActionListener( this ); first.addActionListener( this ); last.addActionlistener( this ); rs.first(); readRecord(); } catch (Exception e){ e.printStackTrace(): } setVisible(ture); } public void modifyRecord(Connection connect){ String stuNo = (String)JOptionPane.showInputDialog( null , "请输入考生考号" , "输入考号对话框" , JOptionPane.PLAIN_MESSAGE, null , null , "" ); try { sql = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = sql.executeQuery( "SELECT * FROM ksInfo" ); Container con = getContentPane(); con.setLayout( new Boarderlayout( 0 , 6 )); Jpanel p[] = new JPanel[ 4 ]; for ( int i = 0 ; i < ; i++){ p[i] = new JPane( new FlowLayout(flowLayout.LEFT, 8 , 0 )); p[i].add( new JLabel(title[i])); } p[ 0 ].add(txtNo); p[ 1 ].add(txtName); p[ 2 ].add(txtScore); p[ 3 ].add(txtAddr); Jpanel p1 = new Jpane( new GridLayout( 4 , 1 , 0 , 8 )); JScrollPane jsp = new JScrollPane(txtResume, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); jsp.setPreferredSize ( new dimension( 300 , 60 )); for ( int i = 0 ; i < 4 ; i++){ p1.add(p[i]); } Jpanel p2 = new JPanel( new FlowLayout(FlowLayout.LEFT, 10 , 0 )); p2.add( new JLableI(title[ 4 ])); p2.add(jsp); JPanel p3 = new JPanel(); p3.add(prev); p3.add(next); p3.add(first); p3.add(last); prev.addActionListener( this ); next.addActionListener( this ); first.addActionListenerIthis); last.addActionListener( this ); rs.first(); readRecord(); } catch (Exception e){ e.printStackTrace(); } setVisible( true ); } boolean readRecord(){ try { txtNo.setText(rs.getString( "考号" )); txtName.setText(rs.getString( "姓名" )); txtScore.setText(rs.getString( "成绩" )); txtAddr.setText(rs.getString( "地址" )); txtResume.setText(rs.getString( "简历" )); } catch (SQLException e){ e.printStackTrace(); return false ; } return true ; } public void actionPerformed(ActionEvent e){ try { if (e.getSource() == prev)rs.previous(); else if (e.getSource() == next)rs.next(); else if (e.getSource() == first)rs.first(); else if (e.getSource() == last)rs.last(); readRecord(); } catch (Exception e2){} } public static void main(String args[]){ connection connect = null ; JFrame .setDefaultLookAndFeeDecorated( true ); Font font = new Font( "JFrame" , Font.PLAIN, 14 ); if ((connect =connectByJdbcOdbc( "jdbc:odbc:redsun" , "xia" , "1234" )) == null ){ JOptionPane.showMessageDialog( null , "数据库连接失败!" ); System.exit ( - 1 ); } new Example10_9(connect); //创建对象 } } |
Java数据库更新
数据库更新操作包括数据表创建、删除、以及数据表记录的增加、删除、修改等操作。如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句,实现数据表的修改;执行SQL的insert语句,实现数据表记录的添加。
例如,在前面数据为查询例子基础上,再增加对数据表的修改和插入。限于篇幅,不再给出完整程序,只给出实现修改和插入的方法。程序可再增设插入、,,除保存按钮,通过已有的浏览,定位到数据表的特定位置,对痈疽记录进行编辑修改,或插入,或删除,然后按保存按钮,完成修改后的数据表保存。
下面用代码说明数据表更新的方法。与数据表连接时,需指定获得的ResultSet 对象是可更新的。
1
|
stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); |