点击蓝字|关注我们
前言:尽管后期jdbc会被mybatis所取代,但是mybatis的底层逻辑也是运用jdbc技术,所以一定要注重jdbc技术的学习。(面试也会问这方面的问题)
JDBC技术
JDBC:java数据库连接
使用java程序去访问和操作数据库的技术,由SUN公司制定的一组接口规范。
为什么SUN把JDBC技术制定成接口规范?
接口:一组设计规范,低耦合-------屏蔽底层的代码实现差异
JDBC技术去访问不同的数据库类型。
接口的实现?
由数据库厂商提供 —> 驱动jar包 ojdbc6.jar
JDBC技术访问思想
创建数据库连接
这是第一步,所有的一切都要建立在这个基础之上。连接的步骤如下:
1.写一个文件名叫jdbc.properties的文件,放在src目录下,内容如下
url=jdbc:mysql://127.0.0.1:3306/lbz
username=root
password=root
driverClassName=com.mysql.cj.jdbc.Driver
2.导包,一般开发中用的都是druid这个包
3.连接的代码如下
@Test public void test() throws Exception {
Properties properties = new Properties(); InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid"); properties.load(is);// 造数据库连接池 DataSource source = DruidDataSourceFactory.createDataSource(properties); Connection connection = source.getConnection(); System.out.println(connection); }
使用的是类加载器来读取文件。
JDBC程序演示
修改型的sql语句,可以没有返回值,如果有只能为int,其表示一共修改了几行。
sql语句中的update,insert,delete在jdbc中都可以用一下代码,仅仅是修改sql语句而已。
public int Update(String sql, Object...args) {
Connection connection = null; PreparedStatement prepareStatement = null; try {
// 获取连接 connection = javaUtils.getConnection();// 预编译sql语句,返回prepareStatement实例 prepareStatement = connection.prepareStatement(sql);// 填充占位符 for(int i =0; i < args.length; i++) {
prepareStatement.setObject(i+1,args[i]); }// 执行 return prepareStatement.executeUpdate(); } catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace(); }finally {
// 关闭资源 javaUtils.close(connection, prepareStatement); } return 0; }
以上是修改型的sql语句,下面我们来写一下有返回内容的select查询语句。
这是一个泛型方法,确保可以对不同的javaBean类进行查询
/** * @author bozhi *不同表查询 返回表中的一条记录 */public class PrepareStatementTest {
public T test(Class clazz,String sql,Object...args) {
Connection connection = null; PreparedStatement prepareStatement = null; ResultSet executeQuery = null; try {
connection = javaUtils.getConnection(); prepareStatement = connection.prepareStatement(sql); for(int i = 0; i < args.length;i++) {
prepareStatement.setObject(i+1, args[i]); } executeQuery = prepareStatement.executeQuery(); ResultSetMetaData metaData = executeQuery.getMetaData(); int columnCount = metaData.getColumnCount(); if(executeQuery.next()) {
// Customer customer = new Customer(); T t = clazz.newInstance(); for(int i = 0; i < columnCount; i++) {
Object object = executeQuery.getObject(i+1);// 获取列的列名// String columnName = metaData.getColumnName(i+1); String columnLabel = metaData.getColumnLabel(i+1);// String columnLabel = metaData.getColumnLabel(i+1); 获取列的别名 (推荐) Field declaredField = clazz.getDeclaredField(columnLabel); declaredField.setAccessible(true); declaredField.set(t, object); } return t; } } catch (Exception e) {
// TODO Auto-generated catch block