亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

JDBC連接MySql數據庫步驟 以及查詢、插入、刪除、更新等

2024-07-14 08:40:39
字體:
來源:轉載
供稿:網友

主要內容:

  •  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

                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資源。但是順序要和你定義對象的時候相反,就像關門一樣,從里面先關,一直往外關。

                       如下示例:

                   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();                       }                    } 

二.下面是一個簡單的(詳細的)查詢數據的例子

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();     }    }  }

三.為了更加直觀,我們把獲取數據庫連接和釋放連接封裝在方法里,以便于后面更好的操作

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.查詢數據

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();      }    }  }
//查詢數據,結果倒著顯示,倒序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.插入數據

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.刪除數據

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.更新數據

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();

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.查找存儲過程無參數的

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.查找存儲過程有參數的

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.普通處理

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);

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.分頁顯示

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.結果集可以滾動

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();      }    }}

五.把上面十一個放在一起當然最方便省事。(需要用誰,只需把前面的注釋打開便行)

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();     }   } }

六.安裝下載的數據庫驅動程序jar包,不同的數據庫需要不同的驅動程序(但是安裝方法都是一樣的)

在使用JDBC編程時需要連接數據庫,導入JAR包是必須的,導入其它的jar包方法同樣如此,導入的方法是

打開eclipse
1.右擊要導入jar包的項目,點properties
2.左邊選擇java build path,右邊選擇libraries

3.選擇add External jars

4.選擇jar包的按照路徑下的
確定后就行了。

Java連接MySQL的最新驅動包下載地址

http://www.mysql.com/downloads/connector/j

1.鼠標放在你建的根目錄上面。右擊,然后選擇最下面的properties。

JDBC,連接,MySql,數據庫

2.然后左邊選擇java build path,右邊選擇libraries ,在選擇右邊的add External jars ,選擇jar包的路徑,點擊確定就可以了

JDBC,連接,MySql,數據庫

3.裝好后,圖如下出現你要添加的包。

JDBC,連接,MySql,數據庫

 

注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩午夜在线视频| 亚洲精品国产电影| 日韩av网站大全| 久久五月天综合| 亚洲国产日韩精品在线| 欧美午夜www高清视频| 亚洲自拍中文字幕| 久久久久女教师免费一区| 在线观看视频亚洲| 亚洲欧洲午夜一线一品| 亚洲天堂一区二区三区| 狠狠色香婷婷久久亚洲精品| 国产成+人+综合+亚洲欧美丁香花| 欧美日韩久久久久| 97人人爽人人喊人人模波多| 国产精品视频资源| 一区二区三区www| 精品免费在线观看| 68精品国产免费久久久久久婷婷| 成人女保姆的销魂服务| 欧美大片网站在线观看| 久久99久久亚洲国产| 亚洲欧洲高清在线| 亚洲男人第一av网站| 欧美高跟鞋交xxxxhd| 久久成人这里只有精品| 欧美成人精品在线| 亚洲一级黄色片| 91精品国产乱码久久久久久久久| 51久久精品夜色国产麻豆| 亚洲国产精品久久久| 欧美激情网站在线观看| 国产视频福利一区| 国产一区二区在线播放| 欧美体内谢she精2性欧美| 久久综合久久八八| 国产精品久久久久久av福利| 国产在线拍偷自揄拍精品| www.亚洲人.com| 91欧美精品午夜性色福利在线| 亚洲第一色在线| 亚洲国产日韩一区| 亚洲精品乱码久久久久久按摩观| 国产精品久久久久一区二区| 日韩电影大全免费观看2023年上| 国产精品xxx视频| 在线精品国产欧美| 精品国产老师黑色丝袜高跟鞋| 国产一区深夜福利| 国产精品视频999| 日本久久亚洲电影| 91亚洲精品一区二区| 国产精品影片在线观看| 国产成人免费av电影| 97久久精品视频| 欧美成人精品在线视频| 中文字幕在线精品| 久久久免费高清电视剧观看| 伊人精品在线观看| 亚洲专区在线视频| 都市激情亚洲色图| 日韩精品中文字幕在线| 国产精品aaaa| 日韩欧美有码在线| 精品久久久视频| 精品呦交小u女在线| 中文字幕日韩视频| 色香阁99久久精品久久久| 欧美精品免费播放| 久久久久这里只有精品| 5566成人精品视频免费| 精品国产一区二区三区久久久狼| 亚洲成人激情在线| 欧美国产日韩二区| 国产成人av在线播放| 91免费视频网站| 日韩av在线网站| 国产精品久久久久aaaa九色| 国产精品国产自产拍高清av水多| 亚洲乱码一区二区| 日韩电影在线观看中文字幕| 亚洲一区二区三区在线视频| 成人精品在线视频| 欧美日韩国产色| 国产日韩欧美在线| 一区二区三区美女xx视频| 欧美激情成人在线视频| 亚洲精品日韩av| 91国产精品视频在线| 91色精品视频在线| 日本精品一区二区三区在线| 亚洲91av视频| 精品毛片三在线观看| 91丨九色丨国产在线| 美女扒开尿口让男人操亚洲视频网站| 久久99久国产精品黄毛片入口| 国产一区二区丝袜| 亚洲午夜国产成人av电影男同| 国产精品美女在线观看| 国产精品pans私拍| 色综久久综合桃花网| 久久精品国产96久久久香蕉| 国产精品吴梦梦| 久久婷婷国产麻豆91天堂| 免费成人高清视频| 久久男人av资源网站| 黑人巨大精品欧美一区二区三区| 91sao在线观看国产| 久久成人人人人精品欧| 国产亚洲精品久久久久动| 在线亚洲国产精品网| 欧美极品xxxx| 亚洲全黄一级网站| 国产精品久久久久久中文字| 亚洲性生活视频在线观看| 精品日本美女福利在线观看| 91精品在线影院| 亚洲少妇激情视频| 久久精品99无色码中文字幕| 国产精品劲爆视频| 亚洲精品av在线| 精品一区二区三区四区在线| 日本高清+成人网在线观看| 亚洲字幕在线观看| 91伊人影院在线播放| 国产精品入口免费视| 4p变态网欧美系列| 九九视频直播综合网| 国产在线精品播放| 国产精品视频区1| 国产做受高潮69| 97精品视频在线播放| 福利二区91精品bt7086| 久久精彩免费视频| 国产午夜一区二区| 亚洲一级免费视频| 久久精品色欧美aⅴ一区二区| 成人天堂噜噜噜| 精品亚洲夜色av98在线观看| 亚洲人成网站999久久久综合| 欧美精品www在线观看| 在线视频日本亚洲性| 亚洲另类欧美自拍| 成人精品网站在线观看| 久久精品国产免费观看| 国产美女高潮久久白浆| 国产精品羞羞答答| 成人黄色午夜影院| 精品人伦一区二区三区蜜桃免费| 免费99精品国产自在在线| 国产精品电影网站| 91av视频在线免费观看| 成人国产精品av| 日韩成人性视频| 国产精品观看在线亚洲人成网| 国产在线拍揄自揄视频不卡99| 国产精品中文字幕在线观看| 久久免费视频观看| 日韩av在线网址| 欧美夫妻性生活视频| 国内揄拍国内精品| 亚洲天堂色网站| 成人国内精品久久久久一区| 中文字幕v亚洲ⅴv天堂|