通过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访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

通过JDBC访问数据库

Hive数据仓库--Java代码JDBC方式访问Hive中表的数据

java通过jdbc访问mysql,update数据返回值的思考

通过JDBC访问数据库

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

简单的JSP访问数据库