java链接数据库---JDBC学习记录(一)
文章摘抄于课件整理,及自己总结等,倾向于笔记。
1.
JDBC是Java DataBase Connectivity(Java 数据连接)技术的简称,是一种可用于执行SQL语句的Java API。它由一些Java语言编写的类和接口组成;
JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。
JDBC主要功能:
(1)与数据库建立连接;
(2)向数据库发送SQL语句;
(3)处理数据返回的结果。
JDBC有两个程序包:
java.sql:核心包,这个包中的类主要完成数据库的基本操作,如生成连接、执行SQL语句及预处理SQL语句等;
javax.sql:扩展包,主要为数据库方面的高级操作提供了接口和类。
JDBC常用类和接口:
Driver接口:在内部创建连接
DriverManager类:装入所需的驱动程序,编程时调用它的方法来创建连接。
Connection接口:使用该类对象创建Statement对象或PreparedStatement对象等。
Statement接口:使用该类对象得到ResultSet对象。
使用JDBC进行数据库应用开发的主要步骤:
操作步骤:
- 创建数据源(使用JDBC-ODBC桥式驱动程序时必需),jdbc驱动方式则无需先配置数据源);
- 注册、加载特定的驱动程序;
- 创建Connection连接对象;
- 利用Connection对象生成Statement对象;
- 利用Statement对象执行SQL语句,如查询、更新、插入、删除等;
- 若是执行查询语句,还要从ResultSet读取数据;
- 关闭ResultSet、Statement、Connection等。
---2020-04-21
(1)创建数据源:
打开控制面板/管理工具/数据源(ODBC)(Windows操作系统)---这个我没有尝试过
(2)加载驱动程序:
格式:Class.forName("驱动程序名称");
请注意:不同类型的数据库加载的驱动程序不同:
JDBC-ODBC桥式
以前面配置的mysqlserver数据源名为例:
加载数据库驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
jdbc驱动方式(无需先配置数据源)
下载对应数据库的JDBC驱动程序jar包文件,放入classpath中,Class.forName("com.mysql.jdbc.Driver");
(3)创建数据库连接:
格式:Connection conn = DriverManager.getConnection(url,“用户名", "密码");
其中:url类似于互联网的地址,它由三部分组成,即:协议:子协议:数据源标识,协议通常是jdbc,子协议是接受DBMS的名称和版本,数据源标识通常是数据源。
JDBC-ODBC桥式:
String url="jdbc:odbc:mysqlserver";
Connection conn=DriverManager.getConnection(url,"root","123456");
JDBC驱动方式:
String url="jdbc:mysql://localhost:3306/db_mysise";
Connection conn=DriverManager.getConnection(url,"root","123456");
(4)利用Connection对象生成Statement对象(即语句):
格式:
Statement stmt = conn.createStatement( );
Statement stmt =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
//ResultSet.TYPE_SCROLL_SENSITIVE 数据集支持指针滚动,ResultSet.CONCUR_UPDATABLE 数据库更新和客户端同步更新;
(5)利用Statement对象执行SQL语句:
执行select语句:将返回一个 ResultSet 对象
格式:ResultSet rs = stmt.executeQuery(”Select 语句”);
例如:ResultSet rs = stmt.executeQuery(”Select * from students”);
结果集(即ResultSet 对象 ):符合查询条件的记录构成的集合,可以将它理解为一张二维表格。稍后将介绍从结果集中获取数据的方法。
执行update(更新)、insert(插入)、delete(删除)语句:
格式:
[int n=]stmt.executeUpdate(”update|insert|delete语句”);
例如:stmt.executeUpdate(”update students set majorgrade='SA07' where name='张三'”);
返回结果:SQL操作影响的行数或者 0(表示没有成功执行),可以不保存。
(6)若是执行查询语句,需要从ResultSet读取数据:
通过返回的ResultSet对象来获得查询结果:
ResultSet对象的指针一开始定位在第一条记录的前面。
ResultSet提供了指针下移的方法:next(),指针可以不断下移,直到最后。除此之外,还有其它移动指针的方法。
通常用rs.next()是否为false来判断结果集是否为空。
ResultSet提供了一些方法来获得当前行中的不同字段的值:getXXX(int 列序号) 或 getXXX(String 列名)
(7)调用close()方法,依次关闭ResultSet、Statement、Connection对象。
注意:关闭顺序与打开顺序相反。
例子:
jdbc驱动方式(无需先配置数据源),下载对应数据库的JDBC驱动程序jar包文件,放入classpath中即可
代码例子:
1 package jdbc_mysql; 2 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 6 public class JdbcTest { 7 public static void main(String[] args) { 8 String url = "jdbc:mysql://localhost:3306/a_test2"; 9 java.sql.Connection conn = null; 10 java.sql.Statement stmt = null; 11 java.sql.ResultSet rs = null; 12 String drivername="com.mysql.jdbc.Driver"; 13 try { 14 Class.forName(drivername);// 加载JDBC驱动 15 // 打开链接 16 System.out.println("连接数据库..."); 17 conn = DriverManager.getConnection(url, "用户名", "密码"); 18 // 执行查询 19 System.out.println("实例化Statement对象..."); 20 stmt = conn.createStatement(); 21 22 String sql1; 23 String sql2; 24 String sql3; 25 String sql4; 26 // 查询 27 sql1 = "select * from exam"; 28 rs = stmt.executeQuery(sql1); 29 System.out.println("工号\t校区\t班级\t老师"); 30 // 展开结果集数据库 31 while (rs.next()) { 32 // 通过字段检索 33 int id=rs.getInt("id"); 34 String testid = rs.getString("testid"); 35 String school = rs.getString("school"); 36 String classroom = rs.getString("classroom"); 37 String teacher = rs.getString("teacher"); 38 // 输出数据 39 System.out.println(id+"\t"+testid + "\t" + school + "\t" + classroom + "\t" + teacher); 40 } 41 // 插入 42 sql2 = "INSERT INTO exam(id,testid,school,classroom,teacher)" + "values('1004','1004','1004','1004','1004')"; 43 int count2 = stmt.executeUpdate(sql2); 44 if (count2 != 0) 45 System.out.println("成功插入一条记录"); 46 // 修改 47 sql3 = "update exam set classroom=2 where id=1"; 48 int count3 = stmt.executeUpdate(sql3); 49 if (count3 != 0) 50 System.out.println("成功修改一条记录"); 51 // 删除 52 sql4 = "delete from exam where testid=2"; 53 int count4 = stmt.executeUpdate(sql4); 54 if (count4 != 0) 55 System.out.println("成功删除一条记录"); 56 57 } catch (ClassNotFoundException e) { 58 e.printStackTrace(); 59 } catch (SQLException e) { 60 e.printStackTrace(); 61 } finally {// 关闭资源 62 try { 63 if (rs != null) 64 rs.close();// 有查询,才需要用到结果集对象 65 // 也才有关闭java.sql.ResultSet rs 66 if (stmt != null) 67 stmt.close(); 68 if (conn != null) 69 conn.close(); 70 } catch (SQLException e) { 71 e.printStackTrace(); 72 } 73 }System.out.println("Goodbye!"); 74 } 75 }
---2020-05-03
prepareStatement和createStatement
https://www.runoob.com/servlet/servlet-database-access.html
---2020-05-04