1、JDBC是什么?
Java中用于执行SQL语句的API,可以实现对数据库的操作。
2、如何使用JDBC编程
一、加载并注册数据库驱动
在lib包里添加MySQL的jar包(可以到官网下载),右击Add As Library
二、获取数据库的连接
在这之前创建好数据库。
方法一:
通过DriverManager类获取:
Connection conn=DriverManager.getConnection(String url,String user,String pwd);
URL 代表着是统一资源定位符(Uniform Resource Locator)MySQL数据库的书写格式为:
jdbc:mysql://hostname:port/database
如果数据库在本机则hostname为localhost或127.0.0.1,端口号默认是3306,这两个可以省略。
如果在其他计算机中,hostname可以连接计算机的IP地址。
三、通过connection对象获取Statement对象
如果将Connection看做是一条连接数据库与程序的索道,那Statement对象就可以看做是索道上的缆车,他为数据库传送SQL语句。
Statement stmt=conn.createStatement();
四、使用Statement执行SQL语句
先创建实现功能的SQL语句
String sql=“select name from users where id=1”;
ResultSet rs=stmt.executeQuery(sql);
Statement 有三个可以执行SQL语句的方法:
:execute() 可以执行任何SQL语句
:executeQuery()可以执行查询语句,返回ResultSet结果集。
注意SQL语句里的变量名应该和表的变量名一样
sql=“insert into tb_brand(brand_name,company_name,ordered,description,status)values(?,?,?,?,?)”;
:executeUpdate()执行DDL(返回0)和DML语句(返回受影响的行数)
五、操作结果集
如果返回的是结果集,就可以通过rs.next()将游标移动获取结果,也可以通过getString(int columnindex)方法获取参数columnindex索引处的值
六、释放资源
关闭顺序与声明顺序相反。先关闭ResultSet对象,再关闭Statement对象,再关闭Connection对象。
3、升级
为了防止SQL注入(通过SQL语句,实现无账号登录,甚至修改数据库。)我们会使用PreparedStatement来建立连接,同时为了提高效率,也可以使用数据池(为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去)
下面例子是使用的Druid数据库连接池。
1、首先配置文件
Properties文件,后缀为“.properties”,属文本文件,文件的内容格式是“键=值”的格式,可以用“#”作为注释。java应用通过JDBC连接数据库时,通常需要在代码中写数据库连接字符串。
Properties类配置文件的操作类,常用方法:load(InputStream inStream)
从输入流中读取属性列表(键和元素对)。
在idea中创建文本文件:
数据池初始有五个数据,最多可以有十个。URL存放的是本机的数据库a
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///a?useSSL=false&useServerPrepStmts=true
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
实现查询功能的代码如下:
查询所有信息 用数据连接池
public void testSelectAll() throws Exception {
//1、获取connection
// 加载配置文件
Properties prop=new Properties();
prop.load(new FileInputStream("D:\\code\\javatest1\\javatest2\\src\\druid.properties"));//properties的位置
//获取连接池对象
DataSource dataSource= DruidDataSourceFactory.createDataSource(prop);
//获取数据库连接connection
Connection connection=dataSource.getConnection();
//2、定义SQL语句
String sql="select *from tb_brand";
//3、获取pre对象
PreparedStatement ps=connection.prepareStatement(sql);
//4、设置参数
//5、执行SQL
ResultSet rs= ps.executeQuery();
//6、处理结果 List<Brand>
List<Brand> list=new ArrayList<>();
Brand brand=null;
while(rs.next()) {
//获取数据
int id = rs.getInt("id");
String brandName = rs.getString("brand_name");
String companyName=rs.getString("company_name");
int ordered = rs.getInt("ordered");
String description = rs.getString("description");
int status = rs.getInt("status");
//封装Brand对象
brand=new Brand(id,brandName,companyName,ordered,description,status);
//封装集合
list.add(brand);
}
System.out.println(list);
//7、释放资源
rs.close();
ps.close();
connection.close();
}