①加载并注册数据库驱动
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);
}
}