1.连接数据库,用connection对象
Class.forName("com.mysql.jdbc.Driver");//注册驱动,固定代码
String url="jdbc:mysql://localhost:3306/first";
String user="root";
String password="admin";
Connection connection = DriverManager.getConnection(url, user, password);
//根据数据库的用户名,密码,地址创建一个connection对象
2.像数据库发送指令,用statement对象,statement对象由connection对象创建
statement=connection.createStatement();
String sql=" "; //这里就是要执行的数据库指令
statement.executeUpdate(sql); //将数据库指令发送给数据库
3.ResultSet对象 得到数据库中的数据,ResultSet由statement对象创建
ResultSet rs=statement.executeQuery(sql);
while(rs.next()) //遍历数据,使用方法类似迭代器
{
System.out.println(rs.getString("name"));
}
4.PreparedStatement对象,是statement类的一个子类
4.1解决sql注入问题
4.2 提高效率
4.3 简化书写
5.Class.forName("com.mysql.jdbc.Driver"); //注册驱动
注册驱动的目的:告诉操作系统我连接的是哪个数据库,操作系统根据这个调用不同的驱动程序
为什么一句话就能注册驱动?
因为class.forname("xxxxx")让jvm加载一个类
加载的过程一定会执行类的静态代码块,而静态代码块中代码如下 :
public class MyJDBCDriver implements Driver {static {
DriverManager.registerDriver(new MyJDBCDriver());
}
} 也就是说执行Class.forName("com.mysql.jdbc.Driver"); 也就执行了DriverManager.registerDriver(new MyJDBCDriver());
6.代理 //声明代理模板代码 Object xx= Proxy.newProxyInstance(
Main.class.getClassLoader(),
new Class[]{Connection.class},
//声明执行句柄,只对close方法设置拦截
new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //在这里执行被代理类的方法 }
return null; });