JDBC-API连接数据库
一、引言JDBC就是Java Database Connectivity 就是Java连接数据库,可以使用Java语言连接数据库完成CRUD(CRUD是指增加Create、读取Retrieve、更新Update、删除Delete)操作二、JDBC-APIJDBC-API就是一个标准的SQL数据库访问界面,JDBC-API定义了一系列Java类,用来表数据库连接、SQL语句、结果集、数据库元数据等。
一、引言
JDBC就是Java Database Connectivity 就是Java连接数据库,可以使用Java语言连接数据库完成CRUD(CRUD是指增加Create、读取Retrieve、更新Update、删除Delete)操作
二、JDBC-API
JDBC-API就是一个标准的SQL数据库访问界面,JDBC-API定义了一系列Java类,用来表数据库连接、SQL语句、结果集、
数据库元数据等。
java.sql.DriverManager;//完成驱动程序的安装和建立新的数据库连接
java.sql.Connection;//数据库的连接,通过
Connection connection = DriverManager.getConnection(url,user,password)
java.sql.Statement;//表示管理再一指定数据库连接上的SQL语句的执行,通过
Statement statement = connection.createStatement();
java.sql.ResultSet;//保存查询语句的查询到的结果集
ResultSet resultSet = statement.executeQuery(sql);
java.sql.PreparedStatement;//解决sql查询语句注入的问题对于特殊意义的字符加上斜杠(/)来编译
2.2 MySql数据库驱动
mysql-connector-java-8.1.X适用于8.X版本
三、环境搭建
- 在项目下右键新建lib文件,用于存放jar文件
- 将mysql驱动mysql-connector-java-8.1.X复制到项目的lib文件夹中
- 选中lib文件夹右键Add as Library
四、JDBC开发步骤
3.1 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
3.2 连接数据库
通过
String url = "jdbc:mysql://localhost:3308/database";
String user = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url,user,password)
3.3 获取发送SQL的对象
通过Connection对象获取Statement对象,用于对数据库进行通用访问
Statement statement = connection.createStatement();
3.4 执行SQL语句
DML语句:增删改时,返回受影响的行数
String sql = "insert into t_jobs(id,username,password) values(1,'lili','2222');";
int result = statement.executeUpdate(sql);
DQL语句:查询时,返回结果数据(ResulttSet结果集)
String sql = "select * from t_jobs where id = 1;";
ResultSet resultset = statement.executeQuery(sql);
if(resultset.next()){
int id = resultset.getInt("id");
String username = resultset.getString("username");
String password = resultset.getString("password");
Person person = new Person(id,username,password);
reture person;
}
3.5 处理结果、释放资源
resultset.close();
statement.close();
conn.close();
五、SQL注入问题
5.1 存在的问题
如下从控制台输入username和password查询,如果用以上方式查询
sql语句中包含:“or 1=1 ; #”,
or 后面1=1一定为真,所以相当于执行代码 select * from t_user ;
sql语句分号表示结束,#表示注释,后面代码不会显示
5.2 preparedStatement
使用PreparedStatement,它继承了Statement接口
JDBC中sql语句所有的参数都由?符号占位,被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。
通过preparedstatement.setXxx(下标,值),进行动态参数绑定
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection(url,user,password);
String sql = "insert into Person(name,password) values(?,?);";
//id是PRIMARY KEY AUTO_INCREMENT,自动增长的
PreparedStatement preparedstatement = connection.preparedStatement(sql);
//sql里面的2个?占位符
preparedstatement.setString(1,'xiaobai');
preparedstatement.setString(2,'23343');
int result = preparedstatement.executeUpdate();
return result;
更多推荐
所有评论(0)