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进行数据库应用开发的主要步骤:
操作步骤:

  1. 创建数据源(使用JDBC-ODBC桥式驱动程序时必需),jdbc驱动方式则无需先配置数据源)
  2. 注册、加载特定的驱动程序;
  3. 创建Connection连接对象;
  4. 利用Connection对象生成Statement对象;
  5. 利用Statement对象执行SQL语句,如查询、更新、插入、删除等;
  6. 若是执行查询语句,还要从ResultSet读取数据;
  7. 关闭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("工号	校区	班级	老师");
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+"	"+testid + "	" + school + "	" + classroom + "	" + 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 }
JdbcTest

---2020-05-03


prepareStatement和createStatement

https://www.runoob.com/servlet/servlet-database-access.html

 

---2020-05-04

原文地址:https://www.cnblogs.com/jiuzhen/p/12742721.html