当我们在实际开发中,当用户数据发生改变,我们不可能在通过客户端操作执行SQL语句,因为操作量过大,无法保证效率和正确性,因此jdbc产生了,可以使用java语言链接数据库完成CRUD操作。
准备:添加数据库驱动,准备相应的数据库连接池的jar包
连接步骤:
1.注册驱动 Class.forName("com.mysql.jdbc.Driver");//加载驱动
2.连接数据库 Connection conn = DriverManager.getConnection("jdbc:mysql://连接url:数据库端口/数据库名", "用户名","密码");
3.获取发送SQL对象 :Statement statement = conn.createStatement(); 通过 Connection 对象获得 Statement 对象,用于对数据库进行通用访问。
4.执行SQL语句:编写SQL语句,int result = statement.executeUpdate(”SQL语句“);//执行SQL语句并接收结果
!!!!!!!
注意:在编写 DML 语句时,一定要注意字符串参数的符号是单引号 '值'
DML 语句:增删改时,返回受影响行数(int 类型)。
DQL 语句:查询时,返回结果数据(ResultSet 结果集)。
5.处理结果接受处理操作的结果
受影响行数:逻辑判断、方法返回。
查询结果集:迭代、依次获取。
6.释放资源,遵循先开后关原则,释放所有使用到的资源对象 statement.close(); conn.close();
java.lang.ClassNotFoundException:找不到类(类名书写错误、没有导入jar包)
java.sql.SQLException:与sql语句相关的错误 (约束错误、表名列名书写错误) 建议:在客户端工具中测试SQL语句之后再粘贴在代码中
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 原因:列值Sting类型没有加单引号
Duplicate entry '1' for key 'PRIMARY' 原因,主键值已存在或混乱,更改主键值或清空表
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'password' in
原因:可能输入的值的类型不对,确定是否插入的元素时对应的值的类型正确
sql注入
用户输入的数据中有 SQL 关键字或语法并且参与了 SQL 语句的编译,导致 SQL 语句编译后的条件含义为 true,一直得到正确的结果。这种现象称为 SQL 注入。
避免sql注入
由于编写的 SQL 语句是在用户输入数据,整合后再进行编译。所以为了避免 SQL 注入的问题,我们要使 SQL 语句在用户输入数据前就已进行编译成完整的 SQL 语句,再进行填充数据。
预编译SQL 语句,效率高。
安全,避免SQL注入 。
可以动态的填充数据,执行多个同构的 SQL 语句。
PreparedStatement pstmt = conn.prepareStatement("select * from user where username=? and password=?");
!!!注意:JDBC中的所有参数都由 ?符号占位,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值