①加载并注册数据库驱动
DriverManager.registerDriver(Driver driver); //这一步主要是告知JVM使用的是哪一个数据库的驱动
上面的那一种写***出数据库驱动被注册两次,这是因为Driver类的源码中,已经在静态代码块中完成了数据库驱动的注册
所有就有了下面这一种写法 Class.forName("com.mysql.jdbc.Driver");
②获得连接
Connection con = DriverManager.getConnection(String url,String user,String pass); // 使用JDBC中的类,完成对
MySQL数据库的连接
③获得语句执行平台Statement stmt = con.createStatement(); //通过连接对象获取对sql语句的执行者对象
这里有一个改进
由于Statement对象每次执行SQL语句时,都会对其进行编译,当相同的SQL语句执行多次时,Statement对象就会使数据库频繁编译相同的sql语句,从而降低数据库的访问效率,为解决这个问题,Statement提供了一个子类PreparedStatement,当相同的sql语句再次执行时,数据库只需使用缓冲区中的数据,而不需要对sql语句再次编译,从而有效提高数据的访问效率。
下面实例二进行了演示
④执行sql语句
这里要先写一个sql语句 如:String sql= "SELECT * FROM 表名"
ResultSet rs = stmt.exexute(sql); // 使用执行者对象,向数据库执行sql语句,获取到数据库的执行后的结果
⑤处理结果
也就是ResultSet中提供的一些方法
⑥释放资源
一堆close()
实例一:
//我内部建立个sort数据库
package cn.itcast.com;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.mysql.jdbc.Connection;
public class JDBCDemo1 {
 public static void main(String[] args) throws Exception {
 //1.注册驱动
 Class.forName("com.mysql.jdbc.Driver");
 //2.获取连接
 String url = "jdbc:mysql://localhost:3306/mybase";
 String username = "*****";
 String password = "**********";
 Connection con =  (Connection) DriverManager.getConnection(url,username,password);
 //3.获取执行SQL语句对象
 Statement stat = con.createStatement();
 //拼写查询的sql
 String sql = "SELECT * FROM sort";
 //4.调用执行者对象方法,执行sql语句获取结果集
 //ResultSet executeQuery(String sql) 执行sql语句中的select
 //返回值ResultSet 接口的实现类对象,实现类在mysql驱动中
 ResultSet rs = stat.executeQuery(sql);
 //5.处理结果集
 //ResultSet接口方法boolean next() 返回true ,有结果集,返回false没有结果集
 while(rs.next()) {
 //获取每列数据,使用是ResultSet 接口的方法getXX
 System.out.println(rs.getInt("sid")+"   "+rs.getString("sname")+"   "
                              +rs.getDouble("sprice")+"     "+rs.getString("sdesc"));
 }
 rs.close();
 stat.close();
 con.close(); 
 }
}
结果:
1   家电   2000.0     优惠的促销
2   家具   8000.0     家具价格上调,原材料涨价
3   儿童玩具   300.0     赚家长钱
4   生鲜   500.99     生鲜商品
5   服装   24000.0     换季销售
6   洗涤   50.0     洗发水促销
7 汽车用品 50000.0 疯狂涨价
实例二:
工具类:
package cn.itcast.com;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import  java.sql.Connection;
import com.mysql.jdbc.PreparedStatement;
public class JDBCUtils {
 private JDBCUtils() {}
 /*
  * 定义静态方法,返回数据库的连接对象
  */
 private static Connection con;
 static {
 try {
 Class.forName("com.mysql.jdbc.Driver");
 String url = "jdbc:mysql://localhost:3306/mybase";
 String username = "*******";
 String password = "************";
 con =   DriverManager.getConnection(url,username,password); 
 }catch(Exception e) {
 throw new RuntimeException(e+"数据库连接失败");
 }
 }
 public static void close(Connection con,Statement stat ) {
     if(con!=null) {
     try {
     stat.close();
     }catch(SQLException e) {}
     }
     if(stat!=null) {
     try {
     stat.close();
     }catch(SQLException e) {}
     }
    }
 /*
  * 定义静态方法,返回数据库的连接对象
  */
    public static Connection getConnection() {
     return con;
 }
    public static void close(Connection con2,Statement stat ,ResultSet rs) {
     if(rs!=null) {
     try {
     stat.close();
     }catch(SQLException e) {}
     }
     if(con2!=null) {
     try {
     stat.close();
     }catch(SQLException e) {}
     }
     if(stat!=null) {
     try {
     stat.close();
     }catch(SQLException e) {}
     }
    }
}
测试类:
package cn.itcast.com;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
public class TestJDBCUtils {
 public static void main(String[] args) throws Exception {
 Connection con = JDBCUtils.getConnection();
 PreparedStatement pst = con.prepareStatement("SELECT sname FROM sort");
 ResultSet rs = pst.executeQuery();
 while(rs.next()) {
 System.out.println(rs.getString("sname"));
 }
 JDBCUtils.close(con,pst,rs);
 
 }
}

京公网安备 11010502036488号