欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC学习日记--java实现SQLServel数据库的基本增删改查操作

程序员文章站 2022-05-06 20:56:40
...

数据库的基本操作

课前了解:

了解加载数据库驱动

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 

通过反射的方式加载数据区驱动,
也是数据库的注册操作 这是一个简化了的写法(原本写法如下)

DriverManager.registerDriver(Class.forName(driverClass).new Instance());

但Driver中有一个静态代码块会执行相关语句,所以省略了。

**了解DriverManager**

DriverManager是驱动的管理类,可以注册多个驱动程序,可以通过它的getConnection(url,user,password)方法直接获得一个Connection

代码

(1)为了便于解耦和程序的健壮性,我们将driverClass,url,user,password写成一个配置文件
JDBC学习日记--java实现SQLServel数据库的基本增删改查操作
(2)将Connection的获取抽取成一个方法

private static Connection getConnection() throws Exception {
  
  //输入流
  InputStream in = SelectOperator.class.getResourceAsStream("jdbc.properties");
 //创建一个Properties对象
  Properties properties = new Properties();
  //读取配置文件中的数据
  properties.load(in);
  
  Connection conn;
  //加载驱动
  String driverName = properties.getProperty("driverName");
  //String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  Class.forName(driverName); 
  
  //填写数据库url
  String url = properties.getProperty("url");
  //String url = "jdbc:sqlserver://localhost:1433; DatabaseName=sc";
  
  //sql账号
  String user = properties.getProperty("user");
  //String user = "username";
  
  //密码
  String password = properties.getProperty("password");
  //String password = "12356789";
  
  //获得数据库连接
  conn = DriverManager.getConnection(url, user, password);
  
  return conn;
 }

(3)将资源的关闭抽象成一个方法

private static void connectionClose(Connection conn, Statement stmt, ResultSet res) {
  //conn不为空则关闭
  if(conn != null) {
   try {
    conn.close();
   } catch (Exception e) {
    // TODO: handle exception
   }
  }
  
  //stmt不为空则关闭
  if(stmt != null) {
   try {
    stmt.close();
   } catch (Exception e) {
    // TODO: handle exception
   }
  }
  
  //res不为空则关闭
  if(res != null) {
   try {
    res.close();
   } catch (Exception e) {
    // TODO: handle exception
   }
  }
 }

注:res是一个ResultSet对象,用于存储SQL返回的数据(后文会提到)
(4)实现插入、删除、修改操作

public static void main(String[] args) {
  System.out.println("Open database:");
  
  Connection conn = null;
  Statement stmt = null;
  ResultSet res = null;
  
  try {
   //得到数据库连接
   conn = getConnection();
   
   //得到执行SQL语句的对象
   stmt = conn.createStatement();
   
   //写SQL语句(更新记录)
   String sql = "Delete from student where name='aa' ";
   
   	//写SQL语句(插入一条记录)
   //String sql = "insert into student(name,age) values ('aa',33)";
	 //写SQL语句(更新记录)
   //String sql = "update student set name = 'JIN1' where name = 'jin' ";
   stmt.executeUpdate(sql);
   
  } catch (Exception e) {
   // TODO: handle exception
   e.printStackTrace();
  }finally {
   //关闭资源
   connectionClose(conn,stmt,res);
  }
  
  System.out.println("end");
  
 }

在插入、修改、删除中SQL没有返回结果(不需要ResultsSet)
(5)实现查找操作
在查询操作时需要用res(ResultSet对象来接受返回值)
稍作修改

//写SQL语句(查找记录)
   String sql = "select name,age from student";
   
   res = stmt.executeQuery(sql);
   
   while(res.next()) {
    System.out.println(res.getString(1) + " " + res.getString(2));
   }

注解:
res.next()是将光标指向下一个元组(刚开始光标在第一个元组之前)
getString(1)是得到元组中第一个数据项的字符串(这儿第一个数据项是name)也可以用get(“name”)来得到对应的值

本次学习笔记中用的数据表是Student(name,age)

希望您有所收获