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文件中找启动类。

posted @ 2021-09-11 11:01  贪玩的阿柒  阅读(43)  评论(0编辑  收藏  举报