经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Oracle » 查看文章
oracle学习笔记(六) JDBC使用 - Stars-one
来源:cnblogs  作者:Stars-one  时间:2019/4/26 8:44:52  对本文有异议

JDBC使用

1. 导包

直接使用IDEA导入依赖包即可
新建一个lib,把jar包放在这里

2. 加载驱动

  1. Class.forName("oracle.jdbc.driver.OracleDriver");

3. 创建Connection对象

连接数据库,从而获得Connection对象

  1. String url = "jdbc:oracle:thin:@localhost:1521:ORCL";//具体的实例名可以查看自己的服务管理,有个
  2. Connection conn = DriverManager.getConnection(url,"scott","tiger");//后面的两个参数分别为连接数据库的用户名和密码

PS:查看实例名

  1. 开始->运行->输入services.msc
  2. 找到服务
  3. 后面的就是我们的oracle数据库的实例名

4. 创建Statement对象

  1. Statement stmt = conn.createStatement();
  • Statement: 普通语句类型,只能执行一条完整的语句
  • PreparedStatement: 预编译语句,它支持占位符“?”, 如:select * from emp WHERE ename LIKE ? and sal>?
  • CallableStatement: 支持存储过程的调用

PreparedStatementCallableStatement都是继承Statement,比Statement要强大
补充链接(暂时未写):
PreparedStatement的使用
CallableStatement的使用

5. 执行SQL语句

  1. //执行查询语句,会返回有个结果集ResultSet
  2. ResultSet rs = stmt.executeQuery("select * from student");

6. 使用ResultSet获取数据库数据

  1. //遍历结果集, 每次调用next方法时会使结集的游标后移,最初游标位于第一行之前
  2. //Student累是我们写的一个bean类,就是把数据库中的每一条数据当作为一个对象,每一列都当作为Student类的属性
  3. while (rs.next()){
  4. //第循环一次封装一条记录
  5. Student student = new Student();
  6. student.setNum(rs.getInt("num"));
  7. student.setName(rs.getString("name"));
  8. //获取其它字段rs.getXxx("列名") Xxx表示相应的数据类型
  9. //或者也可以re.getXxx(int columnNum) 参数为第几列
  10. //如果不知道列的具体类型,也可以使用rs.getObject
  11. }

oracle与java的类型对应

oracle java
varchar/varchar(2) String
int int
number double
date date

7. 关闭

依次关闭ResultSet Statement Connection

补充

  • 一般将连接方法和关闭方法封装为静态方法调用,连接方法和关闭方法封装在JdbcUtil工具类中
  • 开启数据库链接的三个参数一般我们不会更改,所以我们直接写死在资源文件里面
    1. 设置编码UTF-8,使用中文字符就会自动转为Unicode
    2. 一般写在与src同目录,代码如下
      jdbc.url = jdbc:oracle:thin:@localhost:1521:ORCL jdbc.driver = oracle.jdbc.driver.OracleDriver jdbc.username = stars jdbc.password = stars
  • 写一个Dao类,其中有update,save,delete,find等方法,从而实现对数据库的增删改查

JdbcUtil工具类:

  1. package homework;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. import java.util.ResourceBundle;
  8. /**
  9. * @author StarsOne
  10. * @date Create in 2019/4/24 0024 22:18
  11. * @description
  12. */
  13. class JdbcUtil {
  14. private static final String DRIVER = getValue("jdbc.driver");
  15. private static final String URL = getValue("jdbc.url");
  16. private static final String USERNAME = getValue("jdbc.username");
  17. private static final String PASSWORD = getValue("jdbc.password");
  18. static{
  19. try {
  20. //注册数据库驱动程序
  21. Class.forName(DRIVER);
  22. } catch (ClassNotFoundException e) {
  23. System.err.println("注册数据库驱动程序失败。" + e.getMessage());
  24. }
  25. }
  26. /**
  27. * 获取数据库连接
  28. * @return 一个Connection
  29. */
  30. public static Connection getConnection() {
  31. try {
  32. Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
  33. return conn;
  34. } catch (SQLException e) {
  35. System.err.println("a获得数据连接失败。" + e.getMessage());
  36. }
  37. return null;
  38. }
  39. /**
  40. * 关闭
  41. * @param conn
  42. * @param stmt
  43. * @param rs
  44. */
  45. public static void close(Connection conn, Statement stmt, ResultSet rs) {
  46. try {
  47. //关闭数据库的资源的顺序最好与使用的顺序相反
  48. if(rs != null){
  49. rs.close();
  50. }
  51. if(stmt != null){
  52. stmt.close();
  53. }
  54. if(conn != null){
  55. conn.close();
  56. }
  57. } catch (SQLException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. /**
  62. * 读取属性文件中的信息
  63. *
  64. * @param key
  65. * @return
  66. */
  67. private static String getValue(String key) {
  68. // 资源包绑定
  69. ResourceBundle bundle = ResourceBundle.getBundle("jdbc");
  70. return bundle.getString(key);
  71. }
  72. public static void main(String[] args) {
  73. System.out.println(getValue("jdbc.driver"));
  74. System.out.println(getConnection());
  75. }
  76. }

StudentDao.java

我的代码还没有补全,使用的Statement语句

  1. package homework;
  2. import java.sql.Connection;
  3. import java.sql.Date;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. /**
  10. * @author StarsOne
  11. * @date Create in 2019/4/24 0024 22:24
  12. * @description
  13. */
  14. class StudentDao {
  15. /**
  16. * 添加一个
  17. * @param student
  18. */
  19. public void save(Student student) {
  20. String name = student.getName();
  21. int num = student.getNum();
  22. Connection connection = null;
  23. Statement statement = null;
  24. try {
  25. connection = JdbcUtil.getConnection();
  26. statement = connection.createStatement();
  27. //拼接SQL语句,把数据插入到数据库中
  28. statement.execute("insert into STUDENT value(" + num + "," + name + ") ");
  29. } catch (SQLException e) {
  30. e.printStackTrace();
  31. } finally {
  32. JdbcUtil.close(connection, statement, null);
  33. }
  34. }
  35. public void update(Student student) {
  36. }
  37. /**
  38. * 删除指定编号的学生
  39. * @param num
  40. */
  41. public void delete(Integer num) {
  42. Connection connection = null;
  43. Statement statement = null;
  44. try {
  45. connection = JdbcUtil.getConnection();
  46. statement = connection.createStatement();
  47. //拼接SQL语句,把数据插入到数据库中
  48. boolean flag = statement.execute("delete from STUDENT where num = " + num);
  49. if (flag) {
  50. System.out.println("删除成功!");
  51. } else {
  52. System.out.println("删除失败!");
  53. }
  54. } catch (SQLException e) {
  55. e.printStackTrace();
  56. } finally {
  57. JdbcUtil.close(connection, statement, null);
  58. }
  59. }
  60. /**
  61. * 主键查询
  62. * @param number
  63. */
  64. public void findByPK(Integer number) {
  65. Connection connection = null;
  66. Statement statement = null;
  67. ResultSet resultSet=null;
  68. try {
  69. connection = JdbcUtil.getConnection();
  70. statement = connection.createStatement();
  71. //查询query,返回一个数据集
  72. resultSet = statement.executeQuery("select * from STUDENT where num =" + number);
  73. while (resultSet.next()) {
  74. int num = resultSet.getInt("num");
  75. String name = resultSet.getString("name");
  76. String sex = resultSet.getString("sex");
  77. int age = resultSet.getInt("age");
  78. Date birthdate = resultSet.getDate("birthdate");
  79. double grade = resultSet.getDouble("grade");
  80. //新建一个对象
  81. new Student(num, age, grade, name, sex, birthdate);
  82. }
  83. } catch (SQLException e) {
  84. e.printStackTrace();
  85. } finally {
  86. JdbcUtil.close(connection, statement, resultSet);
  87. }
  88. }
  89. /**
  90. * 查询全部
  91. * @return
  92. */
  93. public List<Student> findAll() {
  94. List<Student> list = new ArrayList<>();
  95. Connection connection = null;
  96. Statement statement = null;
  97. ResultSet resultSet=null;
  98. try {
  99. connection = JdbcUtil.getConnection();
  100. statement = connection.createStatement();
  101. //查询query,返回一个数据集
  102. resultSet = statement.executeQuery("select * from STUDENT" );
  103. while (resultSet.next()) {
  104. int num = resultSet.getInt("num");
  105. String name = resultSet.getString("name");
  106. String sex = resultSet.getString("sex");
  107. int age = resultSet.getInt("age");
  108. Date birthdate = resultSet.getDate("birthdate");
  109. double grade = resultSet.getDouble("grade");
  110. //新建一个对象
  111. list.add(new Student(num, age, grade, name, sex, birthdate));
  112. }
  113. } catch (SQLException e) {
  114. e.printStackTrace();
  115. } finally {
  116. JdbcUtil.close(connection, statement, resultSet);
  117. }
  118. return list;
  119. }
  120. }

原文链接:http://www.cnblogs.com/kexing/p/10770470.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号