java程序操作数据库(JDBC)
JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。
本质:
1.sun公司官方定义的一套操作所有关系型数据库的规范、即接口。
2.各个数据库厂商去实现这套接口,提供数据库驱动jar包。
3.我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
01.入门程序:
1.需求:基于JDBC程序,执行update语句(update user set age = 25 where id = 1)
2.步骤:
准备工作:创建一个maven项目,引入依赖;并准备数据库表user
代码实现:编写JDBC程序,操作数据库
public void testUpdate() throws Exception {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库连接
//标准的 JDBC URL 格式:jdbc:mysql://hostname:port/databasename
String url="jdbc:mysql://localhost:3306/web01";//连接时一定注意这些数据不能错
String username = "root";
String password = "1234";
Connection connection = DriverManager.getConnection(url, username, password);
//3.获取SQL语句执行对象
Statement statement = connection.createStatement();
//4.执行SQL
int i = statement.executeUpdate("update user set age = 25 where id = 1");//DML
System.out.println("SQL执行完毕影响的记录数为:" + i);
//5.释放资源
statement.close();
connection.close();
}
02.JDBC-查询数据:
1.需求:基于JDBC执行如下select语句,将查询结果封装到User对象中。
2.SQL:select * from user where username = 'daoqiao' and password = '123456'
3.ResultSet(结果集对象):ResultSet re = statement.executeQuery(),next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为Boolean,返回值为true表示有效行,当前行有数据,false为无效行,当前行没有数据。getXxx():获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。
@Test
public void testSelect(){
String URL = "jdbc:mysql://127.0.0.1:3306/web01";
String USER = "root";
String PASSWORD = "1234";
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;//封装查询返回的结果
try{
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.打开链接
conn = DriverManager.getConnection(URL,USER,PASSWORD);
//3.执行查询
String sql = "select id,username,password,name,age from user where username = ? AND password = ?";//预编译SQL
stmt = conn.prepareStatement(sql);
stmt.setString(1,"daqiao");
stmt.setString(2,"123456");
rs = stmt.executeQuery();
//4.处理结果集
while (rs.next()){
User user = new User(
rs.getInt("id"),
rs.getString("username"),
rs.getString("password"),
rs.getString("name"),
rs.getInt("age")
);
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//5.关闭资源
try{
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if (conn!=null) conn.close();
} catch (SQLException se){
se.printStackTrace();
}
}
}
03.预编译SQL
优势一:可以防止SQL注入,更安全。
SQL注入:通过控制输入来修改实现定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
优势二:性能更高。