通过java_JDBC链接数据库
jdbc:
java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
驱动:jdbc的实现类.由数据库厂商提供.
我们就可以通过一套规范操作不同的数据库了(多态)
jdbc作用:
连接数据库
发送sql语句
处理结果
步骤:
导入jar包:
- 注册驱动
- 获取链接
- 获取执行者
- 执行sql语句
- 对结果进行操作
jdbc-api详解:
所有的包 都是 java.sql 或者 javax.sql
DriverManager:管理了一组jdbc的操作 类
常用方法:
了解:注册驱动
static void registerDriver(Driver driver) :
通过查看 com.mysql.jdbc.Driver的源码 有如下代码
static {
try {
java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
} catch (SQLException E) {
throw new RuntimeException("Can‘t register driver!");
}
}
驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
现在只需要将类加载到内存中即可:
方式1:
★Class.forName("全限定名");//包名+类名 com.mysql.jdbc.Driver
方式2:
类名.class;
方式3:
对象.getClass();
掌握:获取连接
static Connection getConnection(String url, String user, String password)
参数1:告诉我们连接什么类型的数据库及连接那个数据库
协议:数据库类型:子协议 参数
mysql: jdbc:mysql://localhost:3306/数据库名称
oracle: jdbc:oracle:[email protected]:[email protected]实例
参数2:账户名 root
参数3:密码
(了解)Driver:java.sql 接口 驱动
Connection:连接 接口
常用方法:
获取语句执行者:
(了解)Statement createStatement() :获取普通的语句执行者 会出现sql注入问题
★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
(了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者
了解:
setAutoCommit(false) :手动开启事务
commit():提交事务
rollback():事务回滚
Statement:语句执行者 接口
PreparedStatement:预编译语句执行者 接口
常用方法:
设置参数:
setXxx(int 第几个问号,Object 实际参数);
常见的方法:
setInt
setString
setObject
执行sql:
ResultSet executeQuery() :执行 r 语句 返回值:结果集
int executeUpdate() :执行cud 语句 返回值:影响的行数
ResultSet:结果集 接口
执行查询语句之后返回的结果
常用方法:
boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false
光标一开始处于第一条记录的上面
获取具体内容
getXxx(int|string)
若参数为int :第几列
若参数为string:列名(字段名)
例如:
获取cname的内容可以通过
getString(2)
getString("cname")
常用方法:
getInt
getString 也可以获取int值
getObject 可以获取任意
1 //代码演示: 2 //我们封装一个工具类来提高代码的扩展性 3 public class JDBCUtils { 4 private static final String url="jdbc:mysql://localhost:3306/test"; 5 private static final String username="root"; 6 private static final String password = "root"; 7 /** 8 * 注册驱动 9 */ 10 static { 11 try { 12 Class.forName("com.mysql.jdbc.Driver"); 13 } catch (ClassNotFoundException e) { 14 // TODO Auto-generated catch block 15 e.printStackTrace(); 16 } 17 } 18 /** 19 * 获取链接 20 * @return 21 */ 22 public static Connection getConnention() { 23 Connection connection=null; 24 try { 25 connection = DriverManager.getConnection(url,username,password); 26 } catch (SQLException e) { 27 // TODO Auto-generated catch block 28 e.printStackTrace(); 29 } 30 return connection; 31 } 32 /** 33 * 通过可变参关闭连接 34 * @param objects 35 */ 36 public static void colse(Object ...objects) { 37 try { 38 if (objects!=null && objects.length>0) { 39 for(int i = 0;i<objects.length;i++) { 40 if(objects[i] instanceof Statement) { 41 ((Statement)objects[i]).close(); 42 }else if(objects[i] instanceof Connection) { 43 ((Connection)objects[i]).close(); 44 } 45 } 46 } 47 } catch (Exception e) { 48 e.printStackTrace(); 49 } 50 } 51 }
1 // 对工具类的使用 2 public class JDBCDemo { 3 public static void main(String[] args) { 4 //获取链接 5 Connection connection = JDBCUtils.getConnention(); 6 //获取执行者 7 ResultSet resultSet=null; 8 PreparedStatement pStatement=null; 9 10 //定义将要执行的sql语句 11 String sql = "select * from products where cno=?"; 12 //存放结果集对象 13 List<Product> list = new ArrayList<Product>(); 14 try { 15 //获取语句执行者对象 16 pStatement = connection.prepareStatement(sql); 17 //设置参数 18 pStatement.setInt(1, 1); 19 //执行查询操作 20 resultSet = pStatement.executeQuery(); 21 //遍历结果集 22 while (resultSet.next()) { 23 Product product = new Product(); 24 product.setId(resultSet.getInt("pid")); 25 product.setName(resultSet.getString("pname")); 26 product.setPrice(resultSet.getInt("price")); 27 product.setNum(resultSet.getInt("pnum")); 28 product.setCno(resultSet.getInt("cno")); 29 product.setTimestamp(resultSet.getTimestamp("pdate")); 30 list.add(product); 31 } 32 } catch (SQLException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 }finally { 36 //关闭连接 37 JDBCUtils.colse(pStatement,connection); 38 } 39 for (Product product : list) { 40 System.out.println(product); 41 } 42 } 43 }