1. 概念:Java DataBase Connectivity Java数据库连接 , Java语言操作数据库
JDBC本质:其实就是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
2. 使用步骤:
public static void main(String[] args) throws Exception{
//1.导入驱动包
//2.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//3.获取数据库连接对象Connection
Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/db3?useUnicode=true&characterEncoding=UTF-8&useSSL=false","root","你的密码");
//新版jdbc需要加上useUnicode=true&characterEncoding=UTF-8&useSSL=false
//4.定义sql语句
String sql = "update account set account = 500 where id = 1";
//5.获取执行SQL语句的对象Statement
Statement stmt = conn.createStatement();
//6.执行sql,接受返回结果
int count = stmt.executeUpdate(sql);
//7.处理结果
System.out.println(count);
//8.释放资源
stmt.close();
conn.close();
}
3.jdbc的各个对象
DriverManger:驱动管理对象
功能:1.注册驱动,static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager。
(mysql5后可忽略注册驱动,即Class.forName("com.mysql.cj.jdbc.Driver");可以忽略不写)
2.获取数据库连接
方法:static Connection getConnection(String url,String user,String password)
参数:url:指定路径 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称(如果是本机数据库,且端口号默认3306,则可简写为:jdbc:mysql:///数据库名称 )
user:用户名 password:密码
Connection:数据库连接对象
功能:1.获取执行sql的对象 Statement createStatement() ; PrepareStatement prepareStatement(String sql)
2.管理事务:开启事务:setAutoCommit(boolean autoCommit) : 调用该方法设置参数为false
提交事务:commit()
回滚事务:rollback()
Statement:执行sql对象
执行sql boolean execute(String sql):可以执行任意的sql
int executeUpdate(String sql):执行DML(inseret,update,delete)语句; DDL(create,alter,drop) 语句
返回值:影响的行数,可以通过这个影响行数判断DML语句是否执行,返回值大于0则执行成功,否则就失败
ResultSet executeQuery(String sql):执行 DQL(select)语句
ResultSet:结果集对象
next():游标向下移动一行
getXxx(参数):获取数据
Xxx:代表数据类型 如:int getInt() String getString()
int:代表列的编号,从1开始 如:getString(1)
String:代表列名称。如:getDouble(列的下标)
遍历:(与使用迭代器获取数据类似)
//遍历获取
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString("name");
double account = rs.getDouble(3);
System.out.println(id+"---"+name+"---"+account);
}
PreparedStatement:执行sql的对象
sql注入问题:在拼接sql时,有一些sql关键字参与字符串拼接,会造成安全性问题。
使用PrepareStatement对象来解决这类问题
预编译的sql:参数使用?作为占位符
如:
String sql = "select *from user where username = ? and password= ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,username);
pstmt.setString(2,password);
rs = pstmt.executeQuery();