1.JDBC是什么?
JDBC:Java数据库连接。期望使用一套JAVA代码操作所有的关系型数据库。
JDBC本质:定义了一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口,但真正执行的是jar包中的实现类。
2.JDBC访问数据库需要用到的类、接口、方法?
2.1 java.sql包DriverManager类–负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接。 驱动程序,会将自身加载到DriverManager中。
2.1.1数据驱动程序(Driver)根据所连接的数据库不同需要下载对应数据库的驱动程序。
例如:MySQL数据库----https://downloads.mysql.com/archives/c-j/
mysql-connector-java-5.1.38-bin.jar
通过java的反射机制,来给DriverManager,提供被加载的数据库驱动名称。
Class.forName(“数据库驱动名称【包名+类名】”);
数据库驱动名称来自mysql-connector-java-5.1.38-bin.jar中Driver的java类的全名称。
Class.forName(“com.mysql.jdbc.Deiver”);
2.1.2向调用者返回相应的数据库连接
DriverManager类中的静态方法getConnection(url,username,password)向调用者返回相应的数据库连接
static Connection getConnection(url,username,password)
参数url—指定被连接的数据库位置
【jdbc:mysql://数据库服务器IP:端口/数据库名称】
参数username—登陆数据库服务器的用户名
参数password----登陆数据库服务器的密码
2.2 java.sql包Connection接口—数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
1.产生用以执行SQL的Statement。
[用以执行SQL查询和更新(针对静态SQL语句和单次执行)]
Statement createStatement()
select * from t_user where uid=12;[需要给sql拼接参数值]
2.产生用以执行SQL的PreparedStatement。
[用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)]
PreparedStatement prepartatement(Sql)
参数sql—包含动态参数的SQL语句
select * from t_user where uid=?;【需要给sql动态传递参数值】
?—占位符
2.3 java.sql包Statement接口—用以执行SQL查询和更新(针对静态SQL语句和单次执行)
以执行SQL更新【insert / update /delete】
int executeUpdate(SQL)
参数SQL—[insert / update /delete]字符串类型的sql语句。
以执行SQL查询【select】
ResultSet executeQuery(SQL)
参数SQL—[select]字符串类型的sql语句。
2.4 java.sql包PreparedStatement接口–用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)
以执行SQL更新【insert / update /delete】
int executeUpdate()
以执行SQL查询【select】
ResultSet executeQuery()
注意:PreparedStatement需要执行的sql语句
1.sql语句是在创建PreparedStatement对象的时候传入执行,不是在调用executeUpdate()/executeQuery()的时候传入。
2.PreparedStatement对象所执行的sql语句中有“?【占位符】”
有一组填补sql语句占位符的方法
setInt(参数1,参数2) int–int
setLong(参数1,参数2) long—bigint
setDouble(参数1,参数2) double–double
setString(参数1,参数2) String–varchar/char
…
参数1—SQL语句中“?”的位置【从1开始】
参数2—SQL语句中“?”具体数据值
2.5.java.sql包ResultSet接口 — 数据库结果集的数据表,通常通过执行查询数据库的语句生成。
ResultSet 对象具有指向其当前数据行的指针。最初,指针被置于第一行之前。next 方法将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。
默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。
boolean next()–将指针移动到下一行;因为该方法在 ResultSet 对象中没有下一行时返回 false。在 while 循环中使用它来迭代结果集。
由于通过next方法将指针移动到下一行,我们现在就可以取出指针指向的当前行的数据值。要获取当前行中保存的数据值,就需要一列一列的取出数据值,所以ResultSet会有一组获取指定列数据的方法。
getXXXX(int colindex)—int colindex[当前需要获取数据值的列在当前行中的位置【从0开始】]
getXXXX(String colname)–String colname[当前需要获取数据值的列名称]
通过ResultSet对象得到第一行数据值
int id=ResultSet对象.getInt(0);
int id=ResultSet对象.getInt(“id”);
//id=1
String name=ResultSet对象.getString(1);
String name=ResultSet对象.getString(“name”);
//name=zhangsan
int age=ResultSet对象.getInt(2);
int age=ResultSet对象.getInt(“age”);
//age==23