准备工作
首先去maven中央仓库中下载需要的jar包
然后把下载好的jar包放到我们项目中的lib文件夹下
然后添加依赖
核心代码
案例
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/mydb01";
String userName="root"; //用户名
String password="123456"; //密码
Connection connection = DriverManager.getConnection(url, userName, password);//获取connect对象
Statement statement = connection.createStatement();
String sql1="select * from emp" ; //sql语句
ResultSet resultSet = statement.executeQuery(sql1);//查询数据
while (resultSet.next()){
int eno = resultSet.getInt(1);
String ename = resultSet.getString(2);
System.out.println("eno:"+eno+" ename"+ename);
}
String sql3="update emp set comm=10 where comm is null" ;
int raw = statement.executeUpdate(sql3);//删除、添加、修改数据
System.out.println(raw);
resultSet.close();
statement.close();
connection.close();
开发套路
(1)注册数据库驱动
(2)和数据库建立连接
(3)获取执行SQL语句的对象
(4)获取数据库返回的结果
(5)处理数据集(逻辑代码)
(6)释放资源,关闭连接
需要熟悉的几个类
Connection
通过配置文件可以创建一个connect对象、
Statement
通过connect对象获取操作数据库的Statement对象,
通过它来实现对数据库增删改查操作。
executeQuery():查,返回数据集
executeUpdate():增删改,返回int的数据,影响的行数
ResultSet
数据集,可以理解就是一个集合。
取出数据:
通过下标:从1开始
通过字段名:SQL语句中select后面跟的字段,有可能和数据库一样,也可能不一样(别名)
企业优化
平时开发和项目上线之后使用的数据库是不一样的,不是同一个,这也就是我们说的,开发环境不一样
项目:开发环境 -》 测试环境 -》生产(正式)环境
数据库的三项要素是不是需要变化的?????
但是我们目前将这个“三要素”放.java,只要修改了,一定的编译。
也就是意味着 项目要上线:
测试环境-》修改配置 –》重新编译 –》生产环境
基于上面的问题????我们怎么解决????
测试环境-》修改配置 –》重新编译 –》生产环境
修改了XXX,不要编译呗,不放在.java文件就可以了。
我们将这些配置放到一个单独的文件中:配置文件(_ .xml/.properties_)
A(测试)
/opt/mysql/jdbc.properties
B(生产)
/opt/mysql/ jdbc.properties
往往创建一个properties文件,JAVA也有Properties类(Map),
作业:配置信息同配置文件中读取。
分层DAO
Data Access Object数据访问对象是一个面向对象的数据库接口
会建立一个包:dao,里面的类都是用来操作数据库的。
通常情况下,有几张表,就有一个DAO
命名上也有猫腻,自己体会、
分层Entity、bean、pojo
实体,也就是一个一个类,该类里面只有属性,和对应set.get方法
往往一个表一个实体,实体的属性和表的字段有没有关系,名字一般一样,类型相对应
使用逆向工程,通过表导出实体。
SQL注入的攻击
现象
SQL语句中拼接参数,但是你永远都不知道 精神有问题的用户到底会输入啥???
“select * from emp where empno=”+id
精神正常:123
变态:234567 or 1=1
死变态:234567 or 1=1;drop table user/t_user/t_account/account/t_number/number
Properties properties =new Properties();//Properties类表示一组持久的属性。 Properties可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。
BufferedInputStream bufferedInputStream =null;
try {
bufferedInputStream =
new BufferedInputStream(new FileInputStream("D:\\IDEAProject\\javaBase\\src\\jdbc\\jdbc.properties"));//输入输出流只能读绝对路径
properties.load(bufferedInputStream);
// 获取key对应的value值
URL=properties.getProperty("jdbc.url");
USERNAME=properties.getProperty("jdbc.userName");
PASSWORD=properties.getProperty("jdbc.password");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
bufferedInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}