JDBC入门
JDBC
JDBC是一种 专门用来 通过java程序操作数据库的标准
我们需要导入mysql的jar包
这里写是解决SQL注入攻击的方案
public class TestJDBC {
public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//请求案例
String str1 = "http://127.0.0.1:8848/cgb2106/test04.html?user=1&age=123&sex=1&like=ppq&like=ps&edu=2";
String[] arr1 = str1.split("\\?");
String str2 = arr1[1];
String[] arr2 = str2.split("\\&");
//获取和数据库的连接,指定链接的数据库,这里为study
String url = "jdbc:mysql://localhost:3306/study?characterEncoding = utf8";
Connection connection = DriverManager.getConnection(url, "root", "root");
String sql = "insert into test values(?,?,?,?,?,?)";//?叫占位符 ,SQL的骨架
PreparedStatement ps = connection.prepareStatement(sql);//先把SQL骨架发给数据库执行
//给每一个问号设置值
for (int i = 0; i < arr2.length; i++) {
String[] arr3 = arr2[i].split("\\=");
ps.setString(i + 1, arr3[1]);
}
ps.execute();//执行拼接好的SQL 查询使用ps.executeQuery()
}
}
注意用完之后释放资源
后打开的先关
ps.close;
connection.close;
注意:try-catch处理异常
Class.forName这句话
Class.forName可以指定class类路径进行动态创建对象实例,可JDBC这句话没有返回对象啊,那写这句有什么作用呢?看看java.sql.Driver.class的源码就找到真相了,原来它用了静态代码块创建对象。
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
不写也能执行!!!
Java提供了SPI机制,用户可以自行配置类,JDBC高版本驱动就都引入了这个支持。如果用户使用了Class.forName方式就自己指定了驱动,如果未写这句话,则Java自动去META-INF/services/java.sql.Driver文件中找启动类。