jdbc连接数据库:

主要内容:

  •  JDBC连接数据库步骤。
  • 一个简单详细的查询数据的例子。
  • 封装连接数据库,释放数据库连接方法。
  • 实现查询,插入,删除,更新等十一个处理数据库信息的功能。(包括事务处理,批量更新等)
  • 把十一个功能都放在一起。
  • 安装下载的数据库驱动程序jar包,不同的数据库需要不同的驱动程序(这本该是第一步,但是由于属于安装类,所以我们放在最后)

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

1.注册驱动: Class.forName("com.mysql.jdbc.Driver");显示的加载到JVM中
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);//DriverManager下的方法:getConnection(String url,String username,String password)

            (2)接下来我们分析下url:"jdbc(这是协议以jdbc开头):mysql(这是子协议,数据库管理系统名称)://localhost(数据库来源地址):3306(目标端口)/test(要查询的表)?"
   "useUnicode=true&characterEncoding=UTF8";添加这个是为了防止乱码,指定使用Unicode字符集 ,且使用UTF-8来编辑。

3.创建一个Statement语句对象(主要三种方法): Statement stmt=conn.createStatement();//Connection接口下的方法:Statement 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();

Statement接口下的方法:
boolean execute(String sql):执行SQL语句,如果返回值是结果集则为true,否则为false
ResultSet  executeQuery(String sql):执行SQL语句,返回值为ResultSet
int executeUpdate(String sql):执行SQL语句,返回值为所影响的行数

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

?

1

2

3

4

5

6

7

8

9

10

            While(rs.next()){

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

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

   ResultSet接口下常见的方法:beforeFirst();将游标移动到ResultSet中第一条记录(的前面)

                 afterLast();将游标移动到ResultSet中最后一条记录(的后面)

                 absolute(intcolumn):将游标移动到相对于第一行的指定行,负数则为相对于最后一条记录

                 previous():将游标上移一行

                 next():将游标下移一行

ResultSet.TYPE_SCROLL_SENSITIVE     结果集可以滚动

                 ResultSet.CONCUR_READ_ONLY  结果集只读,不能修改

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

                       如下示例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

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

package javacore1;//这是你建的一个包名。

 

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;     //左边这五个是你在写程序时要导入的包名,记住是要在java.sql下的包。

import java.sql.SQLException;

import java.sql.Statement;

public class jdbc { //定义一个类

  public static void main(String[] args){ //主方法

   try{

     String driver="com.mysql.jdbc.Driver";       //1.定义驱动程序名为driver内容为com.mysql.jdbc.Driver

     String url="jdbc:mysql://localhost:3306/test?"   //2.定义url;jdbc是协议;mysql是子协议:表示数据库系统管理名称;localhost:3306是你数据库来源的地址和目标端口;test是我本人建的表位置所在处,你以你的为标准。

         + "useUnicode=true&characterEncoding=UTF8"; //防止乱码;useUnicode=true表示使用Unicode字符集;characterEncoding=UTF8表示使用UTF-8来编辑的。

     String user="h4";                  //3.定义用户名,写你想要连接到的用户。

     String pass="111";                 //4.用户密码。

     String querySql="select * from employees";     //5.你想要查找的表名。

     Class.forName(driver);               //6.注册驱动程序,用java.lang包下面的class类里面的Class.froName();方法 此处的driver就是1里面定义的driver,也可以 Class.forName("com.mysql.jdbc.Driver");

     Connection conn=DriverManager.getConnection(url,user,pass);//7.获取数据库连接,使用java.sql里面的DriverManager的getConnectin(String url , String username ,String password )来完成

                                       //括号里面的url,user,pass便是前面定义的2,3,4步骤内容;

     Statement stmt=conn.createStatement();  //8.构造一个statement对象来执行sql语句:主要有Statement,PreparedStatement,CallableStatement三种实例来实现

                          //  三种实现方法分别为:Statement stmt = con.createStatement() ;

                           //          PreparedStatement pstmt = conn.prepareStatement(sql) ; 

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

     ResultSet rs=stmt.executeQuery(querySql);//9.执行sql并返还结束 ;ResultSet executeQuery(String sqlString):用于返还一个结果集(ResultSet)对象。

   while(rs.next()){  //10.遍历结果集

     System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary")+"姓名:"+rs.getString("last_name"));//使用getString()方法获取你表里的资料名

      }

   if(rs !=null){//11.关闭记录集

     try{

       rs.close();

     } catch (SQLException e){

      e.printStackTrace();

      }

     }

   if(stmt !=null){//12.关闭声明的对象

     try{

       stmt.close();

     }catch(SQLException e){

      e.printStackTrace();

      }

     }

   if(conn !=null){//13.关闭连接 (记住一定要先关闭前面的11.12.然后在关闭连接,就像关门一样,先关里面的,最后关最外面的)

     try{

       conn.close();

     }catch(SQLException e){

      e.printStackTrace();

     }

    }

     }catch(Exception e){

      e.printStackTrace();

     }

    }

  }

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

?

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

package javacore1;

 

import java.sql.Connection;

import java.sql.DriverManager;

 

public class jdbc{

  public static void main(String[] args){

      

  Connection conn= getConnection("h4", "111"); //获取数据库连接

 

  /*,,,,此处为方法名来获取连接,例如 query(conn),,,,,*/

   

    releaseConnection(conn); // 释放数据库连接

  }

    

  /*,,,,,,,,,,此处构建一个你想要的功能的方法,,,,,,,,,,,,*/

 

 

//数据库连接

public static Connection getConnection(String user, String pass) {

        

       Connection conn = null;//声明连接对象

       String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

       String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

             + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

    try {

      Class.forName(driver);// 注册(加载)驱动程序

      conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

       e.printStackTrace();

     }

      return conn;

     }

// 释放数据库连接

public static void releaseConnection(Connection conn) {

     try {

       if (conn != null)

          conn.close();

       } catch (Exception e) {

        e.printStackTrace();

       }

     }

   }

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

1.查询数据

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Query {

  public static void main(String[] args) {

    Connection conn = getConnection("h4", "111");// 获取数据库连接

      query(conn);   //方法名调用数据库连接

    releaseConnection(conn);//释放数据库连接

 }

//查询数据,定义的query方法

public static void query(Connection conn){

    String Sql="select * from employees";

    try{

      Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做

      ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束

                                     

    while(rs.next()){//遍历结果集 ,向下一行              

      System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary"));

      }

     if(rs !=null){

      try{

        rs.close();

      } catch (SQLException e){

      e.printStackTrace();

      }

    }

    if(stmt !=null){

      try{

        stmt.close();

      }catch(SQLException e){

       e.printStackTrace();

     }

    }

    if(conn !=null){

      try{

        conn.close();

        }catch(SQLException e){

        e.printStackTrace();

      }

    }

   }catch(Exception e){

    e.printStackTrace();

   }

 }

//数据库连接

 public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

            + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

   try {

     Class.forName(driver);// 注册(加载)驱动程序

     conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

     } catch (Exception e) {

      e.printStackTrace();

    }

     return conn;

    }

//释放数据库连接

 public static void releaseConnection(Connection conn) {

    try {

      if (conn != null)

         conn.close();

      } catch (Exception e) {

       e.printStackTrace();

      }

    }

  }

?

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

//查询数据,结果倒着显示,倒序

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class Query {

  public static void main(String[] args) {

    Connection conn = getConnection("h4", "111");// 获取数据库连接

      query(conn);   //方法名调用数据库连接

    releaseConnection(conn);//释放数据库连接

 }

//查询数据,定义的query方法

public static void query(Connection conn){

    String Sql="select * from employees";

    try{

      Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做

      ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束

      rs.afterLast();   //先跳到最后一行                

    while(rs.previous()){//遍历结果集 ,向上一行              

      System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary"));

      }

     if(rs !=null){

      try{

        rs.close();

      } catch (SQLException e){

      e.printStackTrace();

      }

    }

    if(stmt !=null){

      try{

        stmt.close();

      }catch(SQLException e){

       e.printStackTrace();

     }

    }

    if(conn !=null){

      try{

        conn.close();

        }catch(SQLException e){

        e.printStackTrace();

      }

    }

   }catch(Exception e){

    e.printStackTrace();

   }

 }

//数据库连接

 public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

            + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

   try {

     Class.forName(driver);// 注册(加载)驱动程序

     conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

     } catch (Exception e) {

      e.printStackTrace();

    }

     return conn;

    }

//释放数据库连接

 public static void releaseConnection(Connection conn) {

    try {

      if (conn != null)

         conn.close();

      } catch (Exception e) {

       e.printStackTrace();

      }

    }

  }

2.插入数据

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

public class Insert {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      insert(conn);  //方法名调用数据库连接

    releaseConnection(conn);// 释放数据库连接

   }

//插入数据 

   public static void insert(Connection conn) {

      try {

         String sql = "insert into employees(employee_id,last_name,salary,department_id,userid)"

            + " values ('100010', 'xiaogou', '7000','004','9')"; // 插入数据的sql语句

         Statement stmt1 =conn.createStatement();  // 创建用于执行静态sql语句的Statement对象

         int count = stmt1.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数   

        System.out.println("向biao中插入了 " + count + " 条数据"); //输出插入操作的处理结果

        conn.close();  //关闭数据库连接

        } catch (SQLException e) {

         e.printStackTrace();

       }

    }  

//数据库连接

  public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

          + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

      try {

        Class.forName(driver);// 注册(加载)驱动程序

        conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

        e.printStackTrace();

      }

       return conn;

    }

//释放数据库连接

  public static void releaseConnection(Connection conn) {

      try {

        if (conn != null)

          conn.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

    }

}

3.删除数据

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

public class Delete {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");  // 获取数据库连接

       delete(conn);  //方法名调用数据库连接;

    releaseConnection(conn);// 释放数据库连接

}

//删除数据

  public static void delete(Connection conn){

    String Sql = "delete from employees where employee_id=100009";

  try {

     Statement stmt = conn.createStatement();// 或者用PreparedStatement方法

     stmt.executeUpdate(Sql);//执行sql语句

  if (stmt != null) {

  try {

     stmt.close();

     } catch (SQLException e) {

     e.printStackTrace();

     }

    }

  } catch (SQLException e) {

     e.printStackTrace();

    }

     

  }

//数据库连接

  public static Connection getConnection(String user, String pass) {

    Connection conn = null;//声明连接对象

    String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

    String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

        + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

    try {

      Class.forName(driver);// 注册(加载)驱动程序

      conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

    } catch (Exception e) {

      e.printStackTrace();

    }

    return conn;

  }

// 释放数据库连接

  public static void releaseConnection(Connection conn) {

    try {

      if (conn != null)

        conn.close();

    } catch (Exception e) {

      e.printStackTrace();

    }

  }

}

4.更新数据

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;

public class Update {

  public static void main(String[] args) {

     Connection conn = getConnection("h3", "111111");  // 获取数据库连接

       update(conn);   //方法名调用数据库连接

     releaseConnection(conn);// 释放数据库连接

   }

//更新数据

 public static void update(Connection conn){

     String Sql = "update employees set salary=8000 where employee_id=100005";

  try {

     Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法

     stmt1.executeUpdate(Sql);//执行sql语句

  if (stmt1 != null) {

     try {

      stmt1.close();

     } catch (SQLException e) {

      e.printStackTrace();

     }

   }

    } catch (SQLException e) {

      e.printStackTrace();

     }

   }

//数据库连接

  public static Connection getConnection(String user, String pass) {

    Connection conn = null;//声明连接对象

    String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

    String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

        + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

    try {

      Class.forName(driver);// 注册(加载)驱动程序

      conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

    } catch (Exception e) {

      e.printStackTrace();

    }

     return conn;

  }

// 释放数据库连接

  public static void releaseConnection(Connection conn) {

    try {

      if (conn != null)

        conn.close();

    } catch (Exception e) {

      e.printStackTrace();

    }

  }

}

5.转账(事物处理)

JDBC处理事务通过关闭连接的自动提交实现的:

Connection.setAutoCommit(false);
提交事务:
Connection.commit();
回滚事务
回滚部分:
Connection.rollback(Savepoint);
全部回滚:
Connection.rollback();

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class TransCash {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");// 获取数据库连接

      transCash(conn);  //方法名调用数据库连接

    releaseConnection(conn);// 释放数据库连接

 }

//转账(数据调换)(原来数据为100和500,实现这个功能后变成500和100,其实说白了就是更新数据,改数据)

 public static void transCash(Connection conn){

    Statement stmt = null;

  try{

     conn.setAutoCommit(false);//关闭自动提交

      String sql = "update employees set salary=500 where employee_id=100001";

      stmt = conn.createStatement();

      stmt.executeUpdate(sql);     

         sql = "update employees set salary=100 where employee_id=100002";

      stmt.executeUpdate(sql);//执行sql语句,上面的两个工资将会调换

 

       //int i=1/0;如果这样,那么将不可以完成任务,因为这是一个完整的事物,有一点失败,将全部失败

     conn.commit();//提交事务

    }catch(Exception e){

     e.printStackTrace();

    }finally{

  try{

     if(stmt != null){ stmt.close();

      }catch(Exception e){

       e.printStackTrace();

      }

     }

    }

//数据库连接

  public static Connection getConnection(String user, String pass) {

    Connection conn = null;//声明连接对象

    String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

    String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

        + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

    try {

      Class.forName(driver);// 注册(加载)驱动程序

      conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

    } catch (Exception e) {

      e.printStackTrace();

    }

    return conn;

  }

//释放数据库连接

  public static void releaseConnection(Connection conn) {

    try {

      if (conn != null)

        conn.close();

    } catch (Exception e) {

      e.printStackTrace();

    }

  }

}

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

?

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

package javacore1;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class ExecProc {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      execProc(conn);//方法名调用数据库连接

    releaseConnection(conn);// 释放数据库连接

  }

//调用无参存储过程;

   public static void execProc(Connection conn){

        String sql = "{call raisesalary}";

     try {

       CallableStatement cstmt = conn.prepareCall(sql);

       cstmt.executeUpdate();

     } catch (SQLException e) {

      e.printStackTrace();

     }

    }

//数据库连接

    public static Connection getConnection(String user, String pass) {

        Connection conn = null;//声明连接对象

        String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

        String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

            + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

        try {

          Class.forName(driver);// 注册(加载)驱动程序

          conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

        } catch (Exception e) {

          e.printStackTrace();

        }

         return conn;

      }

// 释放数据库连接

    public static void releaseConnection(Connection conn) {

        try {

          if (conn != null)

            conn.close();

        } catch (Exception e) {

          e.printStackTrace();

        }

      }

  }

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

?

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

package javacore1;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Types;

public class GetMulti {

  public static void main(String[] args) {

     Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      int cnt = getMulti(conn);      //查找存储过程; 

      System.out.println("人员编号:" + cnt);

     releaseConnection(conn);// 释放数据库连接

  }

//查找存储过程有参

  public static int getMulti(Connection conn) {

      int dept_id = 100001;

      int cnt = 0;

      String sql = "{call calc_emp_count(?,?)}";

    try {

       CallableStatement cstmt = conn.prepareCall(sql);//初始化Statement对象

       cstmt.setInt(1, dept_id);//CallableStatement.setxxx(参数,值)或者(数字,值),而PreparedStatement.setxxx(数字,值)只能这样

       cstmt.setInt(2, cnt);  //

       cstmt.registerOutParameter(2, Types.INTEGER);//声明输出参数

       cstmt.executeUpdate();//执行sql语句

       cnt = cstmt.getInt(2);//获取结果

     if (cstmt != null) {

        cstmt.close();// 释放Statement对象

       }

      } catch (Exception e) {

       e.printStackTrace();

     }

      return cnt;

   }

//数据库连接

  public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

          + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

      try {

        Class.forName(driver);// 注册(加载)驱动程序

        conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

        e.printStackTrace();

      }

       return conn;

    }

//释放数据库连接

  public static void releaseConnection(Connection conn) {

      try {

        if (conn != null)

          conn.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

    }

}

8.普通处理

?

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

package javacore1;

import java.sql.Connection;

import java.sql.Date;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class PlanInsert {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      planInsert(conn);  //方法名调用数据库连接

    releaseConnection(conn);// 释放数据库连接

   }

//普通处理

   public static void planInsert(Connection conn) {

     try {

        String sql = "insert into test_user1(userid,username,loadingtime)"

           + " values (?,?,?)"; // 插入数据的sql语句

        PreparedStatement pstmt=conn.prepareStatement(sql);

        long startTime=System.currentTimeMillis();

       for(int i=0;i<1000;i++){

         pstmt.setLong(1, i);

         pstmt.setString(2, "user"+i);

         pstmt.setDate(3, new Date(System.currentTimeMillis()));

         pstmt.executeUpdate();

       }

     System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));

        pstmt.close();  //关闭数据库连接

      } catch (SQLException e) {

       e.printStackTrace();

     }

   

//数据库连接

  public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

          + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

      try {

        Class.forName(driver);// 注册(加载)驱动程序

        conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

        e.printStackTrace();

      }

       return conn;

    }

//释放数据库连接

  public static void releaseConnection(Connection conn) {

      try {

        if (conn != null)

          conn.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

    }

}

9.批量处理

获得原来JDBC事务的模式:

boolean currentTransactionModle = con.getAutoCommit();

设置成事务模式(关闭自动提交):
con.setAutoCommit(false);
Statement stm = con.createStatement();
三个异构的sql语句:
String sql1 = "delete from user where id = 8";
String sql2 = "update user set name='java' where id = 7";
String sql3 = "insert into user(name,password) values('jdbc','jdbc')";
添加到Statement的批量处理缓冲区中:
stm.addBatch(sql1);
stm.addBatch(sql2);
stm.addBatch(sql3);
执行批量更新:
stm.executeBatch();
提交本次批量更新的事务:
con.commit();
回复原来的事务模式:
con.setAutoCommit(currentTransactionModle);

?

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

package javacore1;

import java.sql.Connection;

import java.sql.Date;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class BatchInsert {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      batchInsert(conn);  //方法名调用数据库连接

    releaseConnection(conn);// 释放数据库连接

   }

//批量插入的速度要比普通处理的速度快

   public static void batchInsert(Connection conn) {

     try {

        String sql = "insert into test_user1(userid,username,loadingtime)"

           + " values (?,?,?)"; // 插入数据的sql语句

        PreparedStatement pstmt=conn.prepareStatement(sql);

        long startTime=System.currentTimeMillis();

       for(int i=0;i<1000;i++){

         pstmt.setLong(1, i);

         pstmt.setString(2, "user"+i);

         pstmt.setDate(3, new Date(System.currentTimeMillis()));

         pstmt.addBatch();//添加到批量处理

       }

       int[] result=pstmt.executeBatch();

     System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));

       pstmt.close();  //关闭数据库连接

     } catch (SQLException e) {

       e.printStackTrace();

     }

   

//数据库连接

  public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

          + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

      try {

        Class.forName(driver);// 注册(加载)驱动程序

        conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

        e.printStackTrace();

      }

       return conn;

    }

//释放数据库连接

  public static void releaseConnection(Connection conn) {

      try {

        if (conn != null)

          conn.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

    }

}

10.分页显示

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class Paging {

  public static void main(String[] args) {

    Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      paging(conn,1,3);//方法名调用数据库连接,且定义显示第几行到第几行

    releaseConnection(conn);// 释放数据库连接

  }

//分页查询

  public static void paging(Connection conn,int startIndex,int total){

    try{

      String sql="select * from employees limit ?,?";

      PreparedStatement pstmt=conn.prepareStatement(sql);

      pstmt.setInt(1, startIndex);

      pstmt.setInt(2, total);

      ResultSet rs=pstmt.executeQuery();

    while(rs.next()){

        System.out.print("工号:"+rs.getInt(1));

        System.out.println("部门编号:"+rs.getInt("department_id"));

      }rs.close();

      pstmt.close();

     }catch(SQLException e){

      e.printStackTrace();

    }

  }

//数据库连接

  public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

          + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

      try {

        Class.forName(driver);// 注册(加载)驱动程序

        conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

        e.printStackTrace();

      }

       return conn;

    }

// 释放数据库连接

  public static void releaseConnection(Connection conn) {

      try {

        if (conn != null)

          conn.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

    }

}

11.结果集可以滚动

?

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

package javacore1;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

public class ScrpllResult {

  public static void main(String[] args) {

     Connection conn = getConnection("h3", "111111");  // 获取数据库连接

       scrpllResult(conn);//方法名调用数据库连接

     releaseConnection(conn);// 释放数据库连接

   }

//结果集滚动显示

  public static void scrpllResult(Connection conn){

    try{

      String sql="select * from employees";             //结果集可以滚动   //并发性,结果集只读,不可以修改

      PreparedStatement pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

      ResultSet rs=pstmt.executeQuery();

    while(rs.next()){ //向下一行遍历

        System.out.print("工号:"+rs.getLong(1));

        System.out.println("名字"+rs.getString("last_name"));

      }while(rs.previous()){//向上一行遍历

        System.out.print("工号:"+rs.getLong(1));

        System.out.println("工资"+rs.getInt("salary"));

       }

        rs.absolute(6);//表示直接跳到第几行

      if(rs.next()){

        System.out.print("工号:"+rs.getLong(1));

        System.out.println("..........部门编号:"+rs.getString("department_id"));

       }

        rs.close();

        pstmt.close();

      }catch(SQLException e){

        e.printStackTrace();

      }

    

//数据库连接

  public static Connection getConnection(String user, String pass) {

      Connection conn = null;//声明连接对象

      String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

      String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

          + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

      try {

        Class.forName(driver);// 注册(加载)驱动程序

        conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

      } catch (Exception e) {

        e.printStackTrace();

      }

       return conn;

    }

// 释放数据库连接

  public static void releaseConnection(Connection conn) {

      try {

        if (conn != null)

          conn.close();

      } catch (Exception e) {

        e.printStackTrace();

      }

    }

}

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

?

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

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

package javacore1;

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.Date;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.sql.Types;

public class jdbcMySql {

public static void main(String[] args) {

  Connection conn = getConnection("h3", "111111");  // 获取数据库连接

      //query(conn); //1.查询数据

      //insert(conn);//2.插入数据

      //delete(conn);//3.删除数据

      //update(conn);//4.更新数据

      //transCash(conn);//5.转账

      //execProc(conn);//6.查找存储过程无参数的

      //int cnt = getMulti(conn);//7.查找存储过程有参数的 

      //System.out.println("人员编号:" + cnt);//查找存储过程有参数的

      //planInsert(conn);//8.普通处理

      //batchInsert(conn);//9.批量处理

      // paging(conn,1,3);//10.分页显示

      //scrpllResult(conn);//11.结果集可以滚动

    releaseConnection(conn);// 释放数据库连接

   }

//1.查询数据,定义的query方法

public static void query(Connection conn){

    String Sql="select * from employees";

    try{

      Statement stmt=conn.createStatement(); //也可以使用PreparedStatement来做

     ResultSet rs=stmt.executeQuery(Sql);//执行sql语句并返还结束

                           

   while(rs.next()){//遍历结果集               

      System.out.println("人员编号:"+rs.getString("employee_id")+"工资:"+rs.getString("salary"));

      }

     if(rs !=null){

      try{

        rs.close();

      } catch (SQLException e){

      e.printStackTrace();

      }

    }

    if(stmt !=null){

      try{

        stmt.close();

      }catch(SQLException e){

       e.printStackTrace();

     }

    }

    if(conn !=null){

      try{

        conn.close();

        }catch(SQLException e){

        e.printStackTrace();

      }

    }

   }catch(Exception e){

    e.printStackTrace();

   }

}

//2.插入数据 

   public static void insert(Connection conn) {

      try {

         String sql = "insert into employees(employee_id,last_name,salary,department_id,userid)"

            + " values ('100010', 'xiaogou', '7000','004','9')"; // 插入数据的sql语句

         Statement stmt1 =conn.createStatement();  // 创建用于执行静态sql语句的Statement对象

         int count = stmt1.executeUpdate(sql); // 执行插入操作的sql语句,并返回插入数据的个数   

        System.out.println("向biao中插入了 " + count + " 条数据"); //输出插入操作的处理结果

        conn.close();  //关闭数据库连接

        } catch (SQLException e) {

         e.printStackTrace();

       }

    }

//3.删除数据

  public static void delete(Connection conn){

      String Sql = "delete from employees where employee_id=100009";

    try {

       Statement stmt = conn.createStatement();// 或者用PreparedStatement方法

       stmt.executeUpdate(Sql);//执行sql语句

    if (stmt != null) {

    try {

       stmt.close();

       } catch (SQLException e) {

       e.printStackTrace();

       }

      }

    } catch (SQLException e) {

       e.printStackTrace();

      }

       

    }

//4.更新数据

  public static void update(Connection conn){

       String Sql = "update employees set salary=8000 where employee_id=100005";

    try {

       Statement stmt1 = conn.createStatement();//或者用PreparedStatement方法

       stmt1.executeUpdate(Sql);//执行sql语句

    if (stmt1 != null) {

       try {

        stmt1.close();

       } catch (SQLException e) {

        e.printStackTrace();

       }

     }

      } catch (SQLException e) {

        e.printStackTrace();

       }

     

//5.转账(数据调换)(原来数据为100和500,实现这个功能后变成500和100,其实说白了就是更新数据,改数据)

 public static void transCash(Connection conn){

      Statement stmt = null;

    try{

       conn.setAutoCommit(false);//关闭自动提交

        String sql = "update employees set salary=500 where employee_id=100001";

        stmt = conn.createStatement();

        stmt.executeUpdate(sql);     

           sql = "update employees set salary=100 where employee_id=100002";

        stmt.executeUpdate(sql);//执行sql语句,上面的两个工资将会调换

       conn.commit();//提交事务

      }catch(Exception e){

       e.printStackTrace();

      }finally{

    try{

       if(stmt != null)stmt.close();

        }catch(Exception e){

         e.printStackTrace();

        }

       }

      }

//6.调用无参存储过程;

 public static void execProc(Connection conn){

      String sql = "{call raisesalary}";

   try {

     CallableStatement cstmt = conn.prepareCall(sql);

     cstmt.executeUpdate();

   } catch (SQLException e) {

    e.printStackTrace();

   }

  }

//7.查找存储过程有参

 public static int getMulti(Connection conn) {

      int dept_id = 100001;

      int cnt = 0;

      String sql = "{call calc_emp_count(?,?)}";

    try {

       CallableStatement cstmt = conn.prepareCall(sql);//初始化Statement对象

       cstmt.setInt(1, dept_id);//CallableStatement.setxxx(参数,值)或者(数字,值),而PreparedStatement.setxxx(数字,值)只能这样

       cstmt.setInt(2, cnt);  //

       cstmt.registerOutParameter(2, Types.INTEGER);//声明输出参数

       cstmt.executeUpdate();//执行sql语句

       cnt = cstmt.getInt(2);//获取结果

     if (cstmt != null) {

        cstmt.close();// 释放Statement对象

       }

      } catch (Exception e) {

       e.printStackTrace();

     }

      return cnt;

   }

//8.普通处理

   public static void planInsert(Connection conn) {

     try {

        String sql = "insert into test_user1(userid,username,loadingtime)"

           + " values (?,?,?)"; // 插入数据的sql语句

        PreparedStatement pstmt=conn.prepareStatement(sql);

        long startTime=System.currentTimeMillis();

       for(int i=0;i<1000;i++){

         pstmt.setLong(1, i);

         pstmt.setString(2, "user"+i);

         pstmt.setDate(3, new Date(System.currentTimeMillis()));

         pstmt.executeUpdate();

       }

     System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));

        pstmt.close();  //关闭数据库连接

      } catch (SQLException e) {

       e.printStackTrace();

     }

   }

//9.批量插入的速度要比普通处理的速度快

  public static void batchInsert(Connection conn) {

       try {

          String sql = "insert into test_user1(userid,username,loadingtime)"

             + " values (?,?,?)"; // 插入数据的sql语句

          PreparedStatement pstmt=conn.prepareStatement(sql);

          long startTime=System.currentTimeMillis();

         for(int i=0;i<1000;i++){

           pstmt.setLong(1, i);

           pstmt.setString(2, "user"+i);

           pstmt.setDate(3, new Date(System.currentTimeMillis()));

           pstmt.addBatch();//添加到批量处理

         }

         int[] result=pstmt.executeBatch();

       System.out.println("总共耗时:"+(System.currentTimeMillis() - startTime));

         pstmt.close();  //关闭数据库连接

       } catch (SQLException e) {

         e.printStackTrace();

       }

     }

//10.分页查询

  public static void paging(Connection conn,int startIndex,int total){

      try{

        String sql="select * from employees limit ?,?";

        PreparedStatement pstmt=conn.prepareStatement(sql);

        pstmt.setInt(1, startIndex);

        pstmt.setInt(2, total);

        ResultSet rs=pstmt.executeQuery();

      while(rs.next()){

          System.out.print("工号:"+rs.getInt(1));

          System.out.println("部门编号:"+rs.getInt("department_id"));

        }rs.close();

        pstmt.close();

       }catch(SQLException e){

        e.printStackTrace();

      }

    }

//11.结果集滚动显示

   public static void scrpllResult(Connection conn){

     try{

       String sql="select * from employees";             //结果集可以滚动                        //并发性,结果集只读,不可以修改

       PreparedStatement pstmt=conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

       ResultSet rs=pstmt.executeQuery();

     while(rs.next()){ //向下一行遍历

         System.out.print("工号:"+rs.getLong(1));

         System.out.println("名字"+rs.getString("last_name"));

      }while(rs.previous()){//向上一行遍历

         System.out.print("工号:"+rs.getLong(1));

         System.out.println("工资"+rs.getInt("salary"));

       }

        rs.absolute(6);//表示直接跳到第几行

       if(rs.next()){

         System.out.print("工号:"+rs.getLong(1));

         System.out.println("..........部门编号:"+rs.getString("department_id"));

        }

         rs.close();

         pstmt.close();

       }catch(SQLException e){

         e.printStackTrace();

       }

     }

//数据库连接

public static Connection getConnection(String user, String pass) {

     Connection conn = null;//声明连接对象

     String driver = "com.mysql.jdbc.Driver";// 驱动程序类名

     String url = "jdbc:mysql://localhost:3306/test?" // 数据库URL

           + "useUnicode=true&characterEncoding=UTF8";// 防止乱码

  try {

    Class.forName(driver);// 注册(加载)驱动程序

    conn = DriverManager.getConnection(url, user, pass);// 获取数据库连接

    } catch (Exception e) {

     e.printStackTrace();

   }

    return conn;

   }

//释放数据库连接

public static void releaseConnection(Connection conn) {

   try {

     if (conn != null)

        conn.close();

     } catch (Exception e) {

      e.printStackTrace();

     }

   }

 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值