MySql - 基础学习 - JDBC
一.为什么要学习JDBC
SUM公司为了简化开发人员的操作(对数据库的统一),提供了一个规范(Java操作数据库的规范),俗称:JDBC
这些规范的实现是由厂商们去做~
对于开发人员来说,我们只需要掌握JDBC即可。
我们如果要使用JDBC,还需要导入一个数据库驱动包(我选择maven导入):
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.48</version> </dependency>
编写第一JDBC程序
1.创建一个数据库测试表:
CREATE TABLE `users` ( `id` int(11) NOT NULL, `NAME` varchar(40) DEFAULT NULL, `PASSWORD` varchar(40) DEFAULT NULL, `email` varchar(60) DEFAULT NULL, `birthday` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `users`(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values (1,'zhangsan','123456','zs@sina.com','1980-12-04'), (2,'lisi','123456','lisi@sina.com','1981-12-04'), (3,'wangwu','123456','wangwu@sina.com','1979-12-04');
2.导入数据库驱动:
这里我使用maven自动导入
3.在Java中代码实现
public static void main(String[] args) throws ClassNotFoundException, SQLException { // 1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 固定写法 ,加载驱动用 // 2.用户信息和url :useUnicode=true&characterEncoding=utf8&useSSL=true String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false"; String username="root"; String password="123456"; //3.创建连接,创建数据库对象 Connection connection = DriverManager.getConnection(url, username, password); //4.执行sql的对象 Statement statement = connection.createStatement(); //5.使用sql对象去执行 SQL 可能存在返回,需要输出 String sql="SELECT * FROM `users`"; ResultSet resultSet = statement.executeQuery(sql);// 把查询sql命令的数据内容全部放到了 resultSet 中,返回了一个结果集 while (resultSet.next()){ System.out.println("id="+resultSet.getObject("id")); System.out.println("name="+resultSet.getObject("NAME")); System.out.println("password="+resultSet.getObject("PASSWORD")); System.out.println("email="+resultSet.getObject("email")); System.out.println("birthday="+resultSet.getObject("birthday")); } //6.释放连接 resultSet.close(); statement.close(); connection.close(); }
Java实现步骤:
- 加载驱动
- 连接数据库 DriverManger
- 获得执行的sql对象,statement(不安全的)
- 获得返回的结果集
- 释放链接
二。JDBC对象的解释
Driver:
Class.forName("com.mysql.jdbc.Driver"); // 固定写法 ,加载驱动用
URL:
String url="jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&uesSSL=false";
jdbc:mysql://主机地址:端口号(3306)/数据库名?参数1&参数2&参数3
jdbc:oracle:thin:@localhost:1521:sid
DriverManager:
Connection connection = DriverManager.getConnection(url, username, password);
- connection 代表数据库
- 数据库设置的自动提交
- 事务提交
- 事务回滚
- connection.rollback()事务回滚
- connection.xommit()事务提交
- connection.setAutoCommit() 自动提交
statement:执行类 -----Preparestatement:也可以执行sql对象
执行sql的对象
statement.executeQuery();//查询操作的专用语句 statement.execute(); //可以执行所有sql,但是非常慢,因为它有个判断的过程 statement.executeUpdate();//跟新,插入,删除记录都是它,返回一个受影响的行数
ResulSet :查询语句产生的结果集(statement.executeQuery()),封装了所有的查询结果
//获得返回的数据类型 resultSet.getObject();//不知道返回类型的时候用最高级的 resultSet.getInt(); //返回值为int resultSet.getString();//返回值为字符串 resultSet.getFloat(); //返回值为单精度浮点数
resultSet.beforeFirst(); // 指针移动到最前面 resultSet.afterLast(); //指针移动到最后面 resultSet.next(); //指针移动到下一个数据 resultSet.absolute(row);//移动到指定行
释放资源必须做;很占用资源
resultSet.close();
statement.close();
connection.close();
三.statement对象详解
executeUpdate:插入数据(insert)
public static void main(String[] args) { Connection conn=null; Statement st=null; ResultSet rs=null; try { conn=JdbcUtils.getConnection(); //获取数据库链接 st=conn.createStatement();// 获得SQL的执行对象 String sql="insert into `users`(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(6,'maming','1234567','1247238460@qq.com','2022-11-04')"; int i =st.executeUpdate(sql); if(i>0) { System.out.println("插入成功"); } } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtils.release(conn,st,rs); } }
executeUpdate:删除数据(delete)
public static void main(String[] args) { Connection conn =null; Statement tr=null; ResultSet rs=null; try { conn=JdbcUtils.getConnection(); tr=conn.createStatement(); String sql="delete from `users` where id <=6 and id>=4"; int i=tr.executeUpdate(sql); if(i>0){ System.out.println("删除成功!"); } } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtils.release(conn,tr,rs); } }
executeUpdate:修改数据(update)
public static void main(String[] args) { Connection conn=null; Statement st =null; ResultSet rs =null; try { conn=JdbcUtils.getConnection(); st=conn.createStatement(); String sql="update `users` set `NAME`='maming' where id=1"; int i =st.executeUpdate(sql); if(i>0){ System.out.println("更改成功!"); } } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtils.release(conn,st,rs); } }
executeQuery:查询数据(select)
public static void main(String[] args) { Connection conn=null; Statement st =null; ResultSet rs =null; try { conn= JdbcUtils.getConnection(); st=conn.createStatement(); String sql="select * from `users` WHERE id=1"; rs = st.executeQuery(sql); while (rs.next()){ System.out.println("name="+rs.getString("NAME")); } } catch (SQLException e) { e.printStackTrace(); }finally { JdbcUtils.release(conn,st,rs); } }
提取工具类
public class JdbcUtils { public static String driver =null; private static String url =null; private static String username =null; private static String password =null; static { try{ InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); properties.load(in); driver = properties.getProperty("driver"); url = properties.getProperty("url"); username = properties.getProperty("username"); password = properties.getProperty("password"); // 驱动只需要要加载一次 Class.forName("driver"); } catch (Exception e) { e.printStackTrace(); } } // 获取链接 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, username, password); } //释放链接 public static void release(Connection conn, Statement st, ResultSet re){ if(re!=null){ try { re.close(); } catch (SQLException e) { e.printStackTrace(); } } if(st!=null){ try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }