通过JDBC访问数据库
Posted timhliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过JDBC访问数据库相关的知识,希望对你有一定的参考价值。
使用建立一个Student类,利用数据库来存储多个Student,写完一个方法在main中写一段测试代码,运行以保证目前所做工作的正确性。有以下方法:
1)add(Student stu):可以向其中增加新的学生,并保存在数据库中
测试add方法是否正确:用add方法向数据库增加一个新的学生,然后在数据库的图形管理界面中查询,确认是否增加
2)dispAll():可以显示所有的学生信息
3)findById(long id):可以按照学号来查找,并显示符合条件的学生信息,查无该人的话显示错误信息
4)findByName(String name):可以按照姓名查找学生,找到后显示其信息,查无此人显示错误信息
5)delById(long id):可以按照id删除学生的信息,然后显示找到该人。若查无此人,显示相应的错误信息
6)sortByXXX:可以按照指定的字段排序,并显示排序后的信息
1 public class Student {
2
3 private long id;
4 private String name;
5 private String major;
6 private String clas;
7 private double mathScore;
8 private double osScore;
9
10 private double javaScore;
11
12 public void setId(long id){
13 this.id=id;
14 }
15 public void setName(String name){
16 this.name=name;
17 }
18 public void setMajor(String major) {
19 this.major = major;
20 }
21 public void setClas(String clas) {
22 this.clas = clas;
23 }
24 public void setMathScore(double mathScore) {
25 this.mathScore = mathScore;
26 }
27 public void setOsScore(double osScore) {
28 this.osScore = osScore;
29 }
30 public void setJavaScore(double javaScore){
31 this.javaScore=javaScore;
32 }
33 public long getId() {
34 return id;
35 }
36 public String getName() {
37 return name;
38 }
39 public String getMajor() {
40 return major;
41 }
42 public String getClas() {
43 return clas;
44 }
45 public double getMathScore() {
46 return mathScore;
47 }
48 public double getOsScore() {
49 return osScore;
50 }
51 public double getJavaScore() {
52 return javaScore;
53 }
54 public String show(){
55 String str=id+" "+name+" "+major+" "+clas+" "+mathScore+" "+osScore+" "+javaScore;
56 return str;
57 }
58 }
1 import java.sql.ResultSet;
2 import java.sql.SQLException;
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.Statement;
6 import java.util.Scanner;
7 import java.sql.PreparedStatement;
8
9 public class StuInfoManage {
10
11 //连接数据库
12 String driver="org.hsqldb.jdbcDriver";
13 String url="jdbc:hsqldb:hsql://localhost/";
14 String user="SA";
15 String pass="";
16 private Connection conn;
17 public StuInfoManage() throws ClassNotFoundException{
18 String sql = "create table if not exists students(id bigint,name varchar(20),";
19 sql+= "major varchar(10),class varchar(10),math double,os double,java double)";
20 try {
21 if(conn!=null) return;//已经初始化
22 Class.forName("org.hsqldb.jdbcDriver");// 动态加载mysql驱动
23 conn = DriverManager.getConnection(url,user,pass);//建立和数据库的连接
24 Statement stmt = conn.createStatement();
25 stmt.executeUpdate(sql);
26 stmt.close();
27 } catch (SQLException e) {
28 e.printStackTrace();
29 }
30 }
31
32
33
34
35
36 public void close() throws SQLException{
37 if(conn!=null) conn.close();
38 }
39
40
41
42
43
44 public void add(Student stu){
45 String sql="insert into students(id,name,major,class,math,os,java)"+"values(?,?,?,?,?,?,?)";
46 try {
47 PreparedStatement pstmt=(PreparedStatement) conn.prepareStatement(sql);
48 pstmt.setLong(1, stu.getId());
49 pstmt.setString(2,stu.getName());
50 pstmt.setString(3,stu.getMajor());
51 pstmt.setString(4,stu.getClas());
52 pstmt.setDouble(5,stu.getMathScore());
53 pstmt.setDouble(6,stu.getOsScore());
54 pstmt.setDouble(7,stu.getJavaScore());
55 pstmt.executeUpdate();
56 pstmt.close();
57 } catch (SQLException e) {
58 e.printStackTrace();
59 }
60 }
61
62
63
64
65
66 public void delById(long id) {
67 String sql="delete from students where id="+id;
68 try {
69 Statement stmt=conn.createStatement();
70 stmt.executeUpdate(sql);
71 stmt.close();
72 } catch (SQLException e) {
73 e.printStackTrace();
74 }
75 }
76
77
78
79
80
81 public void findById(long id){
82 String sql="select * from students where id="+id;
83 try {
84 Statement stmt=conn.createStatement();
85 ResultSet rs=stmt.executeQuery(sql);
86
87 while(rs.next()){
88 long id1=rs.getLong("id");
89 String name=rs.getString("name");
90 String major=rs.getString("major");
91 String clas=rs.getString("class");
92 double mathScore=rs.getDouble("math");
93 double osScore=rs.getDouble("os");
94 double javaScore=rs.getDouble("java");
95 Student stu=new Student();
96 stu.setId(id1);stu.setName(name);
97 stu.setMajor(major);stu.setClas(clas);
98 stu.setMathScore(mathScore);stu.setOsScore(osScore);stu.setJavaScore(javaScore);
99 System.out.println("学号 姓名 专业 班级: math: os: java:");
100 System.out.println(stu.show());
101 }
102 rs.close();
103 stmt.close();
104 } catch (SQLException e) {
105 e.printStackTrace();
106 }
107 }
108
109
110
111
112
113 public void findByName(String name){
114 String sql="select * from students where name=?";
115 try {
116 PreparedStatement pstmt=(PreparedStatement) conn.prepareStatement(sql);
117 pstmt.setString(1, name);
118 ResultSet rs=pstmt.executeQuery();
119 while(rs.next()) {
120 long id1=rs.getLong("id");
121 String name1=rs.getString("name");
122 String major=rs.getString("major");
123 String clas=rs.getString("class");
124 double mathScore=rs.getDouble("math");
125 double osScore=rs.getDouble("os");
126 double javaScore=rs.getDouble("java");
127 Student stu=new Student();
128 stu.setId(id1);stu.setName(name1);
129 stu.setMajor(major);stu.setClas(clas);
130 stu.setMathScore(mathScore);
131 stu.setOsScore(osScore);
132 stu.setJavaScore(javaScore);
133 System.out.println("学号 姓名 专业 班级: math: os: java:");
134 System.out.println(stu.show());
135 }
136 if(!rs.next()) {
137 System.out.println("error");
138 }
139 rs.close();
140 pstmt.close();
141 } catch (SQLException e) {
142 e.printStackTrace();
143 }
144 }
145
146
147
148
149
150
151 public void sort(String course){
152 String sql = "select * from students";
153 try {
154 Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
155 ResultSet rs = stmt.executeQuery(sql);// executeQuery会返回结果的集合,否则返回空值
156 rs.last();//移动到最后一行
157 int total=rs.getRow();//得到总行数
158 Student[] stus=new Student[total];
159 int index=0;
160 rs.beforeFirst();//游标指向第一行前
161 while (rs.next()) {
162 long id1=rs.getLong("id");
163 String name1=rs.getString("name");
164 String major=rs.getString("major");
165 String clas=rs.getString("class");
166 double mathScore=rs.getDouble("math");
167 double osScore=rs.getDouble("os");
168 double javaScore=rs.getDouble("java");
169 Student stu=new Student();
170 stu.setId(id1);stu.setName(name1);
171 stu.setMajor(major);stu.setClas(clas);
172 stu.setMathScore(mathScore);stu.setOsScore(osScore);stu.setJavaScore(javaScore);
173 stus[index]=stu;
174 index++;
175 }
176 courseChoose(stus,course);
177 System.out.println("学号 姓名 专业 班级: math: os: java:");
178 for(int m=0;m<stus.length;m++){
179 System.out.println(stus[m].getId() + " " + stus[m].getName()+" " + stus[m].getMajor() + " " + stus[m].getClas()+" " +stus[m].getMathScore()+ " " + stus[m].getOsScore()+" "+stus[m].getJavaScore());// 入如果返回的是int类型可以用getInt()
180 }
181 rs.close();
182 stmt.close();
183 } catch (SQLException e) {
184 e.printStackTrace();
185 }
186 }
187
188
189
190
191 public void courseChoose(Student[] stus,String course){
192 if(course.equals("math")){
193 for(int i = 0 ; i <stus.length-1 ; i++){
194 for(int j = i+1 ; j < stus.length ; j++){
195 Student stu=new Student();
196 if(stus[i].getMathScore() <stus[j].getMathScore()){
197 stu = stus[i];
198 stus[i] = stus[j];
199 stus[j] = stu;
200 }
201 }
202 }
203 }
204 else if(course.equals("os")){
205 for(int i = 0 ; i <stus.length-1 ; i++){
206 for(int j = i+1 ; j < stus.length ; j++){
207 Student stu=new Student();
208 if(stus[i].getOsScore() <stus[j].getOsScore()){
209 stu = stus[i];
210 stus[i] = stus[j];
211 stus[j] = stu;
212 }
213 }
214 }
215
216 }
217 else if(course.equals("java")){
218 for(int i = 0 ; i <stus.length-1 ; i++){
219 for(int j = i+1 ; j < stus.length ; j++){
220 Student stu=new Student();
221 if(stus[i].getJavaScore()<stus[j].getJavaScore()){
222 stu = stus[i];
223 stus[i] = stus[j];
224 stus[j] = stu;
225 }
226 }
227 }
228 }
229 }
230
231
232
233
234 public void dispAll(){
235 String sql = "select * from students";
236 try {
237 Statement stmt = conn.createStatement();
238 ResultSet rs = stmt.executeQuery(sql);// executeQuery会返回结果的集合,否则返回空值
239 System.out.println("学号 姓名 专业 班级: math: os: java:");
240 while (rs.next()) {
241 System.out
242 .println(rs.getLong(1) + " " + rs.getString(2)+" "
243 + rs.getString(3) + " " + rs.getString(4)+" " + rs.getDouble(5)
244 + " " + rs.getDouble(6)+" "+rs.getDouble(7));// 如果返回的是int类型可以用getInt()
245 }
246 rs.close();
247 stmt.close();
248 } catch (SQLException e) {
249 e.printStackTrace();
250 }
251 }
252
253
254
255
256 public void menu(){
257 Long id;
258 String name;
259 String major;
260 String clas;
261 double mathScore;
262 double osScore;
263 double javaScore;
264 Scanner scanner=new Scanner(System.in);
265 System.out.println("1.显示学生信息");
266 System.out.println("2.录入学生信息");
267 System.out.println("3.学号查找学生");
268 System.out.println("4.姓名查找学生");
269 System.out.println("5.删除学生信息");
270 System.out.println("6.排序");
271 System.out.println("0.退出");
272 System.out.print("输入选择(0-6):");
273 switch(scanner.nextInt()){
274 case 1:
275 dispAll();
276 menu();
277 break;
278 case 2:
279 System.out.print("请输入学号:");
280 id=scanner.nextLong();
281 System.out.print("请输入姓名:");
282 name=scanner.next();
283 System.out.print("请输入专业:");
284 major=scanner.next();
285 System.out.print("请输入班级:");
286 clas=scanner.next();
287 System.out.print("请输入mathScore:");
288 mathScore=scanner.nextDouble();
289 System.out.print("请输入osScore:");
290 osScore=scanner.nextDouble();
291 System.out.print("请输入javaScore:");
292 javaScore=scanner.nextDouble();
293 Student stu=new Student();
294 stu.setId(id);stu.setName(name);
295 stu.setMajor(major);stu.setClas(clas);
296 stu.setMathScore(mathScore);stu.setOsScore(osScore);stu.setJavaScore(javaScore);
297 add(stu);
298 System.out.println("添加学生信息成功!");
299 menu();
300 break;
301 case 3:
302 System.out.print("请输入你要查找的学生的学号:");
303 id=scanner.nextLong();
304 findById(id);
305 menu();
306 break;
307 case 4:
308 System.out.print("请输入你要查找的学生的姓名:");
309 name=scanner.next();
310 findByName(name);
311 menu();
312 break;
313 case 5:
314 System.out.print("请输入你要删除的学生的学号:");
315 id=scanner.nextLong();
316 delById(id);
317 System.out.println("删除学生信息成功!");
318 menu();
319 break;
320 case 6:
321 System.out.println("1 math 2 os 3 java");
322 System.out.println("*************************************************");
323 System.out.print("请输入选择(1-3):");
324 int choice=scanner.nextInt();
325 if(choice==1){
326 sort("math");
327 }
328 else if(choice==2){
329 sort("os");
330 }
331 else if(choice==3){
332 sort("java");
333 }
334 else{
335 System.out.println("Input error!");
336 }
337 menu();
338 break;
339 case 0:
340 scanner.close();
341 break;
342 default:
343 System.out.println("Input error!");
344 menu();
345 }
346 }
347
348
349
350
351
352 public static void main(String[] args) throws Exception {
353 StuInfoManage stuinfomanage=new StuInfoManage();
354 stuinfomanage.menu();
355 stuinfomanage.close();
356 }
357 }
以上是关于通过JDBC访问数据库的主要内容,如果未能解决你的问题,请参考以下文章
Hive数据仓库--Java代码JDBC方式访问Hive中表的数据
java通过jdbc访问mysql,update数据返回值的思考
关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段