你的位置:首页 > 数据库

[数据库]JDBC连接数据库(MySql)步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。


主要内容:

  •  JDBC连接数据库步骤。
  • 一个简单详细的查询数据的例子。
  • 封装连接数据库,释放数据库连接方法。
  • 实现查询,插入,删除,更新等十一个处理数据库信息的功能。
  • 把十一个功能都放在一起。

 一.JDBC连接数据库(编辑)步骤(主要有六个步骤)。

       1.注册驱动: Class.formName("com.mysql.jdbc.Driver");

       2.获取连接:(1) param1:  要连接数据库的url-----》 String url="jdbc:mysql://localhost:3306/test?"+ "useUnicode=true&characterEncoding=UTF8";//防止乱码

                            param2:要连接数据库的用户名--》 String user="h4"; 

                            param3:要连接数据库的密码----》 String pass="111"; 

                            Connection conn=DriverManager.getConnection(url,user,pass);

                       (2)接下来我们分析下url:"jdbc(这是协议以jdbc开头):mysql(这是子协议,数据库管理系统名称)://localhost(数据库来源地址):3306(目标端口)/test(要查询的表)?"

                                                   "useUnicode=true&characterEncoding=UTF8";添加这个是为了防止乱码,指定使用Unicode字符集 ,且使用UTF-8来编辑。

       3.创建一个Statement语句对象(主要三种方法): Statement stmt=conn.createStatement();

                                                                               PreparedStatement pstmt = conn.PreparedStatement() ;

                                                                  CallableStatement cstmt =  conn.prepareCall("{CALL demoSp(? , ?)}") ;

                                     下面我们来分析下他们:(1) Statement与 PreparedStatement对象的区别,后者可以动态设置查询参数

                                                  (2)设置参数的方法 PreparedStatement.setXXXX(parameterIndex,value),如果数据库参数类型是varchar 则用setString,如果参数类型是Integer 则用setInt

                                                                                                    (3)CallableStatement.setXXXX(parameterIndex,value)   //按照参数的顺序设置value

                                                                                                          CallableStatement.setXXXX(parameterName,value)  //按照参数的名字来设置value,这个名字是在定义存储过程的时候的形式参数的名字

                                                                                (4)CallableStatement.registerOutParameter方法用于声明一个存储过程输出类型的参数,用以接收存储过程的输出值

        4.执行SQL语句: ResultSet rs=stmt.executeQuery(Sql);除了查询语句是executeQuery();其他全部是executeUpdate();

       5.处理结果集:ResultSet对象的getXxxx方法,取决于数据库中表的字段的类型,例如:varchar2  对应方法是getString ,如果是 integer 对应方法是getInt/getLong

                               While(rs.next()){

                                     rs.getInt(columnIndex);  //通过列的序号来获取字段的值

                                            rs.getString(columnName);//通过列的名字来获取字段的值

        6.关闭资源: 操作完以后要关闭jdbc来释放jdbc资源。但是顺序要和你定义对象的时候相反,就像关门一样,从里面先关,一直往外关。

                       如下示例:

                                     if(rs !=null){//1.关闭结果集
                                             try{
                                                    rs.close();
                                                } catch (SQLException e){
                                                     e.printStackTrace();
                                               }
                                           }
                                   if(stmt !=null){//2.关闭声明的对象
                                            try{
                                                  stmt.close();
                                              }catch(SQLException e){
                                                    e.printStackTrace();
                                                  }
                                           }
                                   if(conn !=null){//3.关闭连接 (记住一定要先关闭前面的1.2.然后在关闭连接)
                                           try{
                                                 conn.close();
                                           }catch(Exception e){
                                              e.printStackTrace();
                                             }
                                        }
       


                             
二.下面是一个简单的(详细的)查询数据的例子。

 1 package javacore1;//这是你建的一个包名。 2  3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet;     //左边这五个是你在写程序时要导入的包名,记住是要在java.sql下的包。 8 import java.sql.SQLException; 9 import java.sql.Statement;10 public class jdbc { //定义一个类11  public static void main(String[] args){ //主方法12    try{13      String driver="com.mysql.jdbc.Driver";       //1.定义驱动程序名为driver内容为com.mysql.jdbc.Driver14      String url="jdbc:mysql://localhost:3306/test?"   //2.定义url;jdbc是协议;mysql是子协议:表示数据库系统管理名称;localhost:3306是你数据库来源的地址和目标端口;test是我本人建的表位置所在处,你以你的为标准。15          + "useUnicode=true&characterEncoding=UTF8"; //防止乱码;useUnicode=true表示使用Unicode字符集;characterEncoding=UTF8表示使用UTF-8来编辑的。16      String user="h4";                  //3.定义用户名,写你想要连接到的用户。17      String pass="111";                 //4.用户密码。18      String querySql="select * from employees";     //5.你想要查找的表名。19      Class.forName(driver);               //6.注册驱动程序,用java.lang包下面的class类里面的Class.froName();方法 此处的driver就是1里面定义的driver,也可以 Class.forName("com.mysql.jdbc.Driver");21      Connection conn=DriverManager.getConnection(url,user,pass);//7.获取数据库连接,使用java.sql里面的DriverManager的getConnectin(String url , String username ,String password )来完成22                                       //括号里面的url,user,pass便是前面定义的2,3,4步骤内容;23      Statement stmt=conn.createStatement();  //8.构造一个statement对象来执行sql语句:主要有Statement,PreparedStatement,CallableStatement三种实例来实现24                          //  三种实现方法分别为:Statement stmt = con.createStatement() ; 25                           //          PreparedStatement pstmt = conn.prepareStatement(sql) ;  26                           //          CallableStatement cstmt = conn.prepareCall("{CALL demoSp(? , ?)}") ;27      ResultSet rs=stmt.executeQuery(querySql);//9.执行sql并返还结束 ;ResultSet executeQuery(String sqlString):用于返还一个结果集(ResultSet)对象。28   while(rs.next()){  //10.遍历结果集 29      System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary")+"姓名:"+rs.getString("last_name"));//使用getString()方法获取你表里的资料名30       }31   if(rs !=null){//11.关闭记录集32      try{33        rs.close();34      } catch (SQLException e){35       e.printStackTrace();36       }37      }38   if(stmt !=null){//12.关闭声明的对象39      try{40        stmt.close();41      }catch(SQLException e){42       e.printStackTrace();43       }44      }45   if(conn !=null){//13.关闭连接 (记住一定要先关闭前面的11.12.然后在关闭连接,就像关门一样,先关里面的,最后关最外面的)46      try{47        conn.close();48      }catch(SQLException e){49       e.printStackTrace();50      }51     }52      }catch(Exception e){53       e.printStackTrace();54      }55     }56   }

 三.为了更加直观,我们把获取数据库连接和释放连接封装在方法里,以便于后面更好的操作。

 1 package javacore1; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5  6 public class jdbc{ 7   public static void main(String[] args){ 8       9   Connection conn= getConnection("h4", "111"); //获取数据库连接10 11   /*,,,,此处为方法名来获取连接,例如 query(conn),,,,,*/12   13     releaseConnection(conn); // 释放数据库连接14   }15   16   /*,,,,,,,,,,此处构建一个你想要的功能的方法,,,,,,,,,,,,*/17 18 19 //数据库连接20 public static Connection getConnection(String user, String pass) {21       22        Connection conn = null;//声明连接对象23        String driver = "com.mysql.jdbc.Driver";// 驱动程序类名24        String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL25             + "useUnicode=true&characterEncoding=UTF8";// 防止乱码26    try {27       Class.forName(driver);// 注册(加载)驱动程序28       conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接29      } catch (Exception e) {30        e.printStackTrace();31      }32       return conn;33      }34 // 释放数据库连接35 public static void releaseConnection(Connection conn) {36     try {37        if (conn != null)38           conn.close();39       } catch (Exception e) {40         e.printStackTrace();41        }42      }43   }

四.实现查询、插入、删除、更新等十一个处理数据库信息的功能。

1.查询数据

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 import java.sql.Statement; 7 public class Query { 8   public static void main(String[] args) { 9     Connection conn = getConnection("h4", "111");// 获取数据库连接10       query(conn);   //方法名调用数据库连接11     releaseConnection(conn);//释放数据库连接12  }13 //查询数据,定义的query方法14 public static void query(Connection conn){15     String Sql="select * from employees";16     try{17       Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做18       ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束19                           20    while(rs.next()){//遍历结果集                21       System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary"));22       }23      if(rs !=null){24       try{25         rs.close();26       } catch (SQLException e){27       e.printStackTrace();28       }29     }30     if(stmt !=null){31       try{32         stmt.close();33       }catch(SQLException e){34        e.printStackTrace();35      }36     }37     if(conn !=null){38       try{39         conn.close();40        }catch(SQLException e){41         e.printStackTrace();42       }43     }44   }catch(Exception e){45     e.printStackTrace();46    }47  }48 //数据库连接49  public static Connection getConnection(String user, String pass) {50       Connection conn = null;//声明连接对象51       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名52       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL53            + "useUnicode=true&characterEncoding=UTF8";// 防止乱码54   try {55      Class.forName(driver);// 注册(加载)驱动程序56      conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接57     } catch (Exception e) {58       e.printStackTrace();59     }60      return conn;61     }62 //释放数据库连接63  public static void releaseConnection(Connection conn) {64    try {65       if (conn != null)66          conn.close();67      } catch (Exception e) {68        e.printStackTrace();69       }70     }71  }

2.插入数据

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class Insert { 7   public static void main(String[] args) { 8     Connection conn = getConnection("h3", "111111");  // 获取数据库连接 9       insert(conn);  //方法名调用数据库连接10     releaseConnection(conn);// 释放数据库连接11    }12 //插入数据  13   public static void insert(Connection conn) { 14       try { 15          String sql = "insert into employees(employee_id,last_name,salary,department_id,userid)" 16             + " values ('100010', 'xiaogou', '7000','004','9')"; // 插入数据的sql语句 17          Statement stmt1 =conn.createStatement();  // 创建用于执行静态sql语句的Statement对象 18          int count = stmt1.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数    19        System.out.println("向biao中插入了 " + count + " 条数据"); //输出插入操作的处理结果 20        conn.close();  //关闭数据库连接 21         } catch (SQLException e) { 22          e.printStackTrace(); 23        } 24     }   25 //数据库连接26   public static Connection getConnection(String user, String pass) {27       Connection conn = null;//声明连接对象28       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名29       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL30           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码31       try {32         Class.forName(driver);// 注册(加载)驱动程序33         conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接34       } catch (Exception e) {35         e.printStackTrace();36       }37       return conn;38     }39 //释放数据库连接40   public static void releaseConnection(Connection conn) {41       try {42         if (conn != null)43           conn.close();44       } catch (Exception e) {45         e.printStackTrace();46       }47     }48 }

3.删除数据

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class Delete { 7   public static void main(String[] args) { 8     Connection conn = getConnection("h3", "111111");  // 获取数据库连接 9       delete(conn);  //方法名调用数据库连接;10     releaseConnection(conn);// 释放数据库连接11 }12 //删除数据13   public static void delete(Connection conn){14     String Sql = "delete from employees where employee_id=100009";15   try {16     Statement stmt = conn.createStatement();// 或者用PreparedStatement方法17     stmt.executeUpdate(Sql);//执行sql语句18   if (stmt != null) {19   try {20      stmt.close();21     } catch (SQLException e) {22      e.printStackTrace();23      }24     }25   } catch (SQLException e) {26      e.printStackTrace();27     }28     29   }30 //数据库连接31   public static Connection getConnection(String user, String pass) {32     Connection conn = null;//声明连接对象33     String driver = "com.mysql.jdbc.Driver";// 驱动程序类名34     String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL35         + "useUnicode=true&characterEncoding=UTF8";// 防止乱码36     try {37       Class.forName(driver);// 注册(加载)驱动程序38       conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接39     } catch (Exception e) {40       e.printStackTrace();41     }42     return conn;43   }44 // 释放数据库连接45   public static void releaseConnection(Connection conn) {46     try {47       if (conn != null)48         conn.close();49     } catch (Exception e) {50       e.printStackTrace();51     }52   }53 }

4.更新数据

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 import java.sql.Statement; 6 public class Update { 7   public static void main(String[] args) { 8     Connection conn = getConnection("h3", "111111");  // 获取数据库连接 9       update(conn);   //方法名调用数据库连接10     releaseConnection(conn);// 释放数据库连接11    }12 //更新数据 13  public static void update(Connection conn){14      String Sql = "update employees set salary=8000 where employee_id=100005";15   try {16     Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法17     stmt1.executeUpdate(Sql);//执行sql语句18   if (stmt1 != null) {19     try {20       stmt1.close();21     } catch (SQLException e) {22       e.printStackTrace();23      }24    }25     } catch (SQLException e) {26       e.printStackTrace();27      }28    }29 //数据库连接30   public static Connection getConnection(String user, String pass) {31     Connection conn = null;//声明连接对象32     String driver = "com.mysql.jdbc.Driver";// 驱动程序类名33     String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL34         + "useUnicode=true&characterEncoding=UTF8";// 防止乱码35     try {36       Class.forName(driver);// 注册(加载)驱动程序37       conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接38     } catch (Exception e) {39       e.printStackTrace();40     }41     return conn;42   }43 // 释放数据库连接44   public static void releaseConnection(Connection conn) {45     try {46       if (conn != null)47         conn.close();48     } catch (Exception e) {49       e.printStackTrace();50     }51   }52 }

5.转账

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.Statement; 5 public class TransCash { 6   public static void main(String[] args) { 7     Connection conn = getConnection("h3", "111111");// 获取数据库连接 8       transCash(conn);  //方法名调用数据库连接 9     releaseConnection(conn);// 释放数据库连接10  }11 //转账(数据调换)(原来数据为100和500,实现这个功能后变成500和100,其实说白了就是更新数据,改数据)12  public static void transCash(Connection conn){13     Statement stmt = null;14   try{15      conn.setAutoCommit(false);//关闭自动提交16       String sql = "update employees set salary=500 where employee_id=100001";17       stmt = conn.createStatement();18       stmt.executeUpdate(sql);      19          sql = "update employees set salary=100 where employee_id=100002";20       stmt.executeUpdate(sql);//执行sql语句,上面的两个工资将会调换21      conn.commit();//提交事务22    }catch(Exception e){23      e.printStackTrace();24    }finally{25   try{26     if(stmt != null)stmt.close();27       }catch(Exception e){28        e.printStackTrace();29       }30      }31     }32 //数据库连接33   public static Connection getConnection(String user, String pass) {34     Connection conn = null;//声明连接对象35     String driver = "com.mysql.jdbc.Driver";// 驱动程序类名36     String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL37         + "useUnicode=true&characterEncoding=UTF8";// 防止乱码38     try {39       Class.forName(driver);// 注册(加载)驱动程序40       conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接41     } catch (Exception e) {42       e.printStackTrace();43     }44    return conn;45   }46 //释放数据库连接47   public static void releaseConnection(Connection conn) {48     try {49       if (conn != null)50         conn.close();51     } catch (Exception e) {52       e.printStackTrace();53     }54   }55 }

6.查找存储过程无参数的

 1 package javacore1; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 public class ExecProc { 7   public static void main(String[] args) { 8     Connection conn = getConnection("h3", "111111");  // 获取数据库连接 9      execProc(conn);//方法名调用数据库连接10     releaseConnection(conn);// 释放数据库连接11   }12 //调用无参存储过程;13    public static void execProc(Connection conn){14        String sql = "{call raisesalary}";15      try {16        CallableStatement cstmt = conn.prepareCall(sql);17        cstmt.executeUpdate();18      } catch (SQLException e) {19       e.printStackTrace();20      }21     }22 //数据库连接23     public static Connection getConnection(String user, String pass) {24         Connection conn = null;//声明连接对象25         String driver = "com.mysql.jdbc.Driver";// 驱动程序类名26         String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL27             + "useUnicode=true&characterEncoding=UTF8";// 防止乱码28         try {29           Class.forName(driver);// 注册(加载)驱动程序30           conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接31         } catch (Exception e) {32           e.printStackTrace();33         }34         return conn;35       }36 // 释放数据库连接37     public static void releaseConnection(Connection conn) {38         try {39           if (conn != null)40             conn.close();41         } catch (Exception e) {42           e.printStackTrace();43         }44       }45   }

7.查找存储过程有参数的  

 1 package javacore1; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.Types; 6 public class GetMulti { 7   public static void main(String[] args) { 8     Connection conn = getConnection("h3", "111111");  // 获取数据库连接 9       int cnt = getMulti(conn);      //查找存储过程;  10       System.out.println("人员编号:" + cnt); 11     releaseConnection(conn);// 释放数据库连接12   }13 //查找存储过程有参14   public static int getMulti(Connection conn) {15      int dept_id = 100001;16      int cnt = 0;17      String sql = "{call calc_emp_count(?,?)}";18     try {19        CallableStatement cstmt = conn.prepareCall(sql);//初始化Statement对象20        cstmt.setInt(1, dept_id);//CallableStatement.setxxx(参数,值)或者(数字,值),而PreparedStatement.setxxx(数字,值)只能这样21        cstmt.setInt(2, cnt);  //22        cstmt.registerOutParameter(2, Types.INTEGER);//声明输出参数23        cstmt.executeUpdate();//执行sql语句24        cnt = cstmt.getInt(2);//获取结果25      if (cstmt != null) {26         cstmt.close();// 释放Statement对象27        }28       } catch (Exception e) {29        e.printStackTrace();30      }31      return cnt;32    }33 //数据库连接34   public static Connection getConnection(String user, String pass) {35       Connection conn = null;//声明连接对象36       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名37       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL38           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码39       try {40         Class.forName(driver);// 注册(加载)驱动程序41         conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接42       } catch (Exception e) {43         e.printStackTrace();44       }45       return conn;46     }47 //释放数据库连接48   public static void releaseConnection(Connection conn) {49       try {50         if (conn != null)51           conn.close();52       } catch (Exception e) {53         e.printStackTrace();54       }55     }56 }

8.普通处理

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.Date; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 public class PlanInsert { 8   public static void main(String[] args) { 9     Connection conn = getConnection("h3", "111111");  // 获取数据库连接10      planInsert(conn);  //方法名调用数据库连接11     releaseConnection(conn);// 释放数据库连接12    }13 //普通处理14   public static void planInsert(Connection conn) { 15     try { 16        String sql = "insert into test_user1(userid,username,loadingtime)" 17           + " values (?,?,?)"; // 插入数据的sql语句 18        PreparedStatement pstmt=conn.prepareStatement(sql);19        long startTime=System.currentTimeMillis();20       for(int i=0;i<1000;i++){21         pstmt.setLong(1, i);22         pstmt.setString(2, "user"+i);23         pstmt.setDate(3, new Date(System.currentTimeMillis()));24          pstmt.executeUpdate();25        }26     System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));27        pstmt.close();  //关闭数据库连接 28      } catch (SQLException e) { 29        e.printStackTrace(); 30      } 31    }  32 //数据库连接33   public static Connection getConnection(String user, String pass) {34       Connection conn = null;//声明连接对象35       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名36       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL37           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码38       try {39         Class.forName(driver);// 注册(加载)驱动程序40         conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接41       } catch (Exception e) {42         e.printStackTrace();43       }44       return conn;45     }46 //释放数据库连接47   public static void releaseConnection(Connection conn) {48       try {49         if (conn != null)50           conn.close();51       } catch (Exception e) {52         e.printStackTrace();53       }54     }55 }

9.批量处理

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.Date; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.SQLException; 7 public class BatchInsert { 8   public static void main(String[] args) { 9     Connection conn = getConnection("h3", "111111");  // 获取数据库连接10      batchInsert(conn);  //方法名调用数据库连接11     releaseConnection(conn);// 释放数据库连接12    }13 //批量插入的速度要比普通处理的速度快14   public static void batchInsert(Connection conn) { 15     try { 16        String sql = "insert into test_user1(userid,username,loadingtime)" 17           + " values (?,?,?)"; // 插入数据的sql语句 18        PreparedStatement pstmt=conn.prepareStatement(sql);19        long startTime=System.currentTimeMillis();20       for(int i=0;i<1000;i++){21         pstmt.setLong(1, i);22         pstmt.setString(2, "user"+i);23         pstmt.setDate(3, new Date(System.currentTimeMillis()));24         pstmt.addBatch();//添加到批量处理25        }26       int[] result=pstmt.executeBatch();27      System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));28       pstmt.close();  //关闭数据库连接 29      } catch (SQLException e) { 30        e.printStackTrace(); 31      } 32    }  33 //数据库连接34   public static Connection getConnection(String user, String pass) {35       Connection conn = null;//声明连接对象36       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名37       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL38           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码39       try {40         Class.forName(driver);// 注册(加载)驱动程序41         conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接42       } catch (Exception e) {43         e.printStackTrace();44       }45       return conn;46     }47 //释放数据库连接48   public static void releaseConnection(Connection conn) {49       try {50         if (conn != null)51           conn.close();52       } catch (Exception e) {53         e.printStackTrace();54       }55     }56 }

10.分页显示

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 public class Paging { 8   public static void main(String[] args) { 9     Connection conn = getConnection("h3", "111111");  // 获取数据库连接10       paging(conn,1,3);//方法名调用数据库连接,且定义显示第几行到第几行11     releaseConnection(conn);// 释放数据库连接12   }13 //分页查询14   public static void paging(Connection conn,int startIndex,int total){15     try{16       String sql="select * from employees limit ?,?";17       PreparedStatement pstmt=conn.prepareStatement(sql);18       pstmt.setInt(1, startIndex);19       pstmt.setInt(2, total);20       ResultSet rs=pstmt.executeQuery();21     while(rs.next()){22         System.out.print("工号:"+rs.getInt(1));23        System.out.println("部门编号:"+rs.getInt("department_id"));24       }rs.close();25       pstmt.close();26      }catch(SQLException e){27       e.printStackTrace();28     }29   }30 //数据库连接31   public static Connection getConnection(String user, String pass) {32       Connection conn = null;//声明连接对象33       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名34       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL35           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码36       try {37         Class.forName(driver);// 注册(加载)驱动程序38         conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接39       } catch (Exception e) {40         e.printStackTrace();41       }42       return conn;43     }44 // 释放数据库连接45   public static void releaseConnection(Connection conn) {46       try {47         if (conn != null)48           conn.close();49       } catch (Exception e) {50         e.printStackTrace();51       }52     }53 }

11.结果集可以滚动

 1 package javacore1; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 public class ScrpllResult { 8   public static void main(String[] args) { 9      Connection conn = getConnection("h3", "111111");  // 获取数据库连接10       scrpllResult(conn);//方法名调用数据库连接11      releaseConnection(conn);// 释放数据库连接12    }13 //结果集滚动显示14   public static void scrpllResult(Connection conn){15     try{16       String sql="select * from employees";             //结果集可以滚动                        //并发性,结果集只读,不可以修改17       PreparedStatement pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);18       ResultSet rs=pstmt.executeQuery();19     while(rs.next()){ //向下一行遍历20         System.out.print("工号:"+rs.getLong(1));21         System.out.println("名字"+rs.getString("last_name"));22      }while(rs.previous()){//向上一行遍历23         System.out.print("工号:"+rs.getLong(1));24         System.out.println("工资"+rs.getInt("salary"));25        }26        rs.absolute(6);//表示直接跳到第几行27       if(rs.next()){28         System.out.print("工号:"+rs.getLong(1));29         System.out.println("..........部门编号:"+rs.getString("department_id"));30        }31         rs.close();32         pstmt.close();33       }catch(SQLException e){34         e.printStackTrace();35       }36     }  37 //数据库连接38   public static Connection getConnection(String user, String pass) {39       Connection conn = null;//声明连接对象40       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名41       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL42           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码43       try {44         Class.forName(driver);// 注册(加载)驱动程序45         conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接46       } catch (Exception e) {47         e.printStackTrace();48       }49       return conn;50     }51 // 释放数据库连接52   public static void releaseConnection(Connection conn) {53       try {54         if (conn != null)55           conn.close();56       } catch (Exception e) {57         e.printStackTrace();58       }59     }60 }

五.把上面十一个放在一起当然最方便省事。(需要用谁,只需把前面的注释打开便行)

 1 package javacore1; 2 import java.sql.CallableStatement; 3 import java.sql.Connection; 4 import java.sql.Date; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 import java.sql.SQLException; 9 import java.sql.Statement; 10 import java.sql.Types; 11 public class jdbcMySql { 12 public static void main(String[] args) { 13   Connection conn = getConnection("h3", "111111");  // 获取数据库连接 14      //query(conn); //1.查询数据 15      //insert(conn);//2.插入数据 16      //delete(conn);//3.删除数据 17      //update(conn);//4.更新数据 18      //transCash(conn);//5.转账 19      //execProc(conn);//6.查找存储过程无参数的 20      //int cnt = getMulti(conn);//7.查找存储过程有参数的   21      //System.out.println("人员编号:" + cnt);//查找存储过程有参数的 22      //planInsert(conn);//8.普通处理 23      //batchInsert(conn);//9.批量处理 24      // paging(conn,1,3);//10.分页显示 25      //scrpllResult(conn);//11.结果集可以滚动 26     releaseConnection(conn);// 释放数据库连接 27    } 28 //1.查询数据,定义的query方法 29 public static void query(Connection conn){ 30     String Sql="select * from employees"; 31     try{ 32       Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做 33      ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束 34                           35   while(rs.next()){//遍历结果集                 36       System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary")); 37       } 38      if(rs !=null){ 39       try{ 40         rs.close(); 41       } catch (SQLException e){ 42       e.printStackTrace(); 43       } 44     } 45     if(stmt !=null){ 46       try{ 47         stmt.close(); 48       }catch(SQLException e){ 49        e.printStackTrace(); 50      } 51     } 52     if(conn !=null){ 53       try{ 54         conn.close(); 55        }catch(SQLException e){ 56         e.printStackTrace(); 57       } 58     } 59   }catch(Exception e){ 60     e.printStackTrace(); 61    } 62 } 63 //2.插入数据   64   public static void insert(Connection conn) {  65       try {  66          String sql = "insert into employees(employee_id,last_name,salary,department_id,userid)"  67             + " values ('100010', 'xiaogou', '7000','004','9')"; // 插入数据的sql语句  68          Statement stmt1 =conn.createStatement();  // 创建用于执行静态sql语句的Statement对象  69          int count = stmt1.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数     70        System.out.println("向biao中插入了 " + count + " 条数据"); //输出插入操作的处理结果  71        conn.close();  //关闭数据库连接  72         } catch (SQLException e) {  73          e.printStackTrace();  74        }  75     } 76 //3.删除数据 77   public static void delete(Connection conn){ 78       String Sql = "delete from employees where employee_id=100009"; 79     try { 80       Statement stmt = conn.createStatement();// 或者用PreparedStatement方法 81       stmt.executeUpdate(Sql);//执行sql语句 82     if (stmt != null) { 83     try { 84        stmt.close(); 85       } catch (SQLException e) { 86        e.printStackTrace(); 87        } 88       } 89     } catch (SQLException e) { 90        e.printStackTrace(); 91       } 92        93     } 94 //4.更新数据  95   public static void update(Connection conn){ 96        String Sql = "update employees set salary=8000 where employee_id=100005"; 97     try { 98       Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法 99       stmt1.executeUpdate(Sql);//执行sql语句100     if (stmt1 != null) {101       try {102         stmt1.close();103       } catch (SQLException e) {104         e.printStackTrace();105        }106      }107       } catch (SQLException e) {108         e.printStackTrace();109        }110      }  111 //5.转账(数据调换)(原来数据为100和500,实现这个功能后变成500和100,其实说白了就是更新数据,改数据)112  public static void transCash(Connection conn){113       Statement stmt = null;114     try{115        conn.setAutoCommit(false);//关闭自动提交116         String sql = "update employees set salary=500 where employee_id=100001";117         stmt = conn.createStatement();118         stmt.executeUpdate(sql);      119            sql = "update employees set salary=100 where employee_id=100002";120         stmt.executeUpdate(sql);//执行sql语句,上面的两个工资将会调换121        conn.commit();//提交事务122      }catch(Exception e){123        e.printStackTrace();124      }finally{125     try{126       if(stmt != null)stmt.close();127         }catch(Exception e){128          e.printStackTrace();129         }130        }131       }132 //6.调用无参存储过程;133  public static void execProc(Connection conn){134      String sql = "{call raisesalary}";135    try {136      CallableStatement cstmt = conn.prepareCall(sql);137      cstmt.executeUpdate();138    } catch (SQLException e) {139     e.printStackTrace();140    }141   } 142 //7.查找存储过程有参143  public static int getMulti(Connection conn) {144      int dept_id = 100001;145      int cnt = 0;146      String sql = "{call calc_emp_count(?,?)}";147     try {148        CallableStatement cstmt = conn.prepareCall(sql);//初始化Statement对象149        cstmt.setInt(1, dept_id);//CallableStatement.setxxx(参数,值)或者(数字,值),而PreparedStatement.setxxx(数字,值)只能这样150        cstmt.setInt(2, cnt);  //151        cstmt.registerOutParameter(2, Types.INTEGER);//声明输出参数152        cstmt.executeUpdate();//执行sql语句153        cnt = cstmt.getInt(2);//获取结果154      if (cstmt != null) {155         cstmt.close();// 释放Statement对象156        }157       } catch (Exception e) {158        e.printStackTrace();159      }160      return cnt;161    }162 //8.普通处理163   public static void planInsert(Connection conn) { 164     try { 165        String sql = "insert into test_user1(userid,username,loadingtime)" 166           + " values (?,?,?)"; // 插入数据的sql语句 167        PreparedStatement pstmt=conn.prepareStatement(sql);168        long startTime=System.currentTimeMillis();169       for(int i=0;i<1000;i++){170         pstmt.setLong(1, i);171         pstmt.setString(2, "user"+i);172         pstmt.setDate(3, new Date(System.currentTimeMillis()));173          pstmt.executeUpdate();174        }175     System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));176        pstmt.close();  //关闭数据库连接 177      } catch (SQLException e) { 178        e.printStackTrace(); 179      } 180    } 181 //9.批量插入的速度要比普通处理的速度快182   public static void batchInsert(Connection conn) { 183       try { 184          String sql = "insert into test_user1(userid,username,loadingtime)" 185             + " values (?,?,?)"; // 插入数据的sql语句 186          PreparedStatement pstmt=conn.prepareStatement(sql);187          long startTime=System.currentTimeMillis();188         for(int i=0;i<1000;i++){189           pstmt.setLong(1, i);190           pstmt.setString(2, "user"+i);191           pstmt.setDate(3, new Date(System.currentTimeMillis()));192           pstmt.addBatch();//添加到批量处理193          }194         int[] result=pstmt.executeBatch();195        System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));196         pstmt.close();  //关闭数据库连接 197        } catch (SQLException e) { 198          e.printStackTrace(); 199        } 200      }201 //10.分页查询202  public static void paging(Connection conn,int startIndex,int total){203       try{204         String sql="select * from employees limit ?,?";205         PreparedStatement pstmt=conn.prepareStatement(sql);206         pstmt.setInt(1, startIndex);207         pstmt.setInt(2, total);208         ResultSet rs=pstmt.executeQuery();209       while(rs.next()){210           System.out.print("工号:"+rs.getInt(1));211          System.out.println("部门编号:"+rs.getInt("department_id"));212         }rs.close();213         pstmt.close();214        }catch(SQLException e){215         e.printStackTrace();216       }217     }218 //11.结果集滚动显示219   public static void scrpllResult(Connection conn){220     try{221       String sql="select * from employees";             //结果集可以滚动                        //并发性,结果集只读,不可以修改222       PreparedStatement pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);223       ResultSet rs=pstmt.executeQuery();224     while(rs.next()){ //向下一行遍历225         System.out.print("工号:"+rs.getLong(1));226         System.out.println("名字"+rs.getString("last_name"));227       }while(rs.previous()){//向上一行遍历228         System.out.print("工号:"+rs.getLong(1));229         System.out.println("工资"+rs.getInt("salary"));230        }231         rs.absolute(6);//表示直接跳到第几行232       if(rs.next()){233         System.out.print("工号:"+rs.getLong(1));234         System.out.println("..........部门编号:"+rs.getString("department_id"));235         }236          rs.close();237          pstmt.close();238       }catch(SQLException e){239          e.printStackTrace();240        }241      } 242 //数据库连接243 public static Connection getConnection(String user, String pass) {244      Connection conn = null;//声明连接对象245      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名246      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL247           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码248  try {249     Class.forName(driver);// 注册(加载)驱动程序250     conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接251    } catch (Exception e) {252      e.printStackTrace();253    }254     return conn;255    }256 //释放数据库连接257 public static void releaseConnection(Connection conn) {258   try {259      if (conn != null)260         conn.close();261     } catch (Exception e) {262       e.printStackTrace();263      }264    }265 }