JDBC-Java连接数据库
来源:互联网 发布:美国留学知乎 编辑:程序博客网 时间:2024/05/16 14:52
引言
有关数据库的概念,将数据库和java结合起来说明。
什么是JDBC?
使用java程序发送sql语句到数据库服务器端执行,这叫用到了JDBC技术!!!!jdbc是Oracle-Sun公司设计的一套专门用于java程序操作数据库的接口。
如下图所示:
使用jdbc发送sql条件
连接mysql数据库:
数据库主机
端口
数据库用户名
数据库密码
连接的数据库
* JDBC的核心API*
Driver接口: 数据库驱动程序的接口,所有具体数据库厂商需要的驱动程序需要实现此接口。
Connection connect(String url, Properties info) 用于获取数据库连接
演示三种连接数据库的方式
package com.jdbc.a_driver;import java.sql.Connection;import java.sql.DriverManager;import java.util.Properties;import com.mysql.jdbc.Driver;public class DriverStu { //jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称 private static String url="jdbc:mysql://localhost:3306/day20"; private static String user="root"; private static String password="root"; public static void main(String[] args) throws Exception { //conn1(); //conn2(); conn3(); } private static void conn3() throws Exception { //注册驱动 Class.forName("com.mysql.jdbc.Driver"); //连接数据库 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@6d17b6ce } private static void conn2() throws Exception { //使用驱动管理类,连管理我们的驱动程序,并获取连接 //注册驱动 Driver driver = new Driver(); DriverManager.registerDriver(driver); //获取链接 Connection connection = DriverManager.getConnection(url, user, password); System.out.println(connection); //com.mysql.jdbc.JDBC4Connection@44e5f21e } //直连 private static void conn1() throws Exception { //创建一个驱动类对象Driver Driver dri = new com.mysql.jdbc.Driver(); //获取java连接数据库的连接 //Connection connect(String url,Properties info)throws SQLException //创建一个properties集合 Properties prop = new Properties(); prop.setProperty("user", user); prop.setProperty("password", password); Connection connect = dri.connect(url, prop); System.out.println(connect); //com.mysql.jdbc.JDBC4Connection@73b9e5dc }}
相关的运行结果在代码中有注释。
后面为了方便与数据库进行连接,可以将与数据库连接的代码部分提取出来形成一个工具类,每一次与数据库建立连接时,只需要调用该类中的方法即可,该工具类如下所示:
package com.jdbc.Util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCUtil { private static String url="jdbc:mysql://localhost:3306/day20"; private static String user="root"; private static String password="root"; static{ try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //获取链接 public static Connection getConn(){ //注册驱动 try { Connection conn = DriverManager.getConnection(url, user, password); return conn; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException(); } } //释放资源 public static void close(Connection conn,Statement stmt,ResultSet rs){ if (conn!=null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (stmt!=null) { try { stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (rs!=null) { try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}
Connection接口:与具体的数据库的连接对象。
Statement createStatement() 创建一个静态sql语句对象
PreparedStatement prepareStatement(String sql) 创建预编译的sql语句对象
CallableStatement prepareCall(String sql) 创建存储过程的sql语句对象
Statement接口:用于执行静态 SQL 语句
int executeUpdate(String sql) 执行更新操作的sql语句 (create/alter/drop) DDL语句
(insert/update/delete)DML语句
ResultSet executeQuery(String sql) 执行查询操作的sql语句(select)(DQL查询语句)
相关代码如下(静态sql语句)
package com.jdbc.b_statement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;import com.jdbc.Util.JDBCUtil;public class Stu_02 { private static String url="jdbc:mysql://localhost:3306/day20"; private static String user="root"; private static String password="root"; public static void main(String[] args) { //testInsert();//给数据库加入一条记录 //testUpdate();//修改数据库的记录 testDelet();//删除一条记录 } private static void testDelet() { Connection conn=null; Statement stmt=null; try{ //注册驱动,获取链接 conn = JDBCUtil.getConn(); //获取语句执行者 stmt = conn.createStatement(); //准备sql语句 String sql="DELETE FROM student WHERE id=1;"; //执行sql语句 int i = stmt.executeUpdate(sql); System.out.println(i); //1 }catch(Exception e){ e.printStackTrace(); }finally{ //释放资源 } } private static void testUpdate() { Connection conn=null; Statement stmt=null; try{ //获取链接 conn = JDBCUtil.getConn(); //获取语句执行着 stmt = conn.createStatement(); //准备sql String sql="UPDATE student SET NAME='黄晓明' WHERE id=1;"; //执行sql语句 int i = stmt.executeUpdate(sql); System.out.println(i);//1 }catch(Exception e){ e.printStackTrace(); }finally{ //释放资源 JDBCUtil.close(conn, stmt, null); } } private static void testInsert() { Connection conn=null; Statement stmt=null; //注册驱动 try { Class.forName("com.mysql.jdbc.Driver"); //获取连接对象 conn = DriverManager.getConnection(url, user, password); //创建语句执行者 stmt = conn.createStatement(); //准备sql String sql="INSERT INTO student VALUES(1,'薛之谦');"; //执行sql语句 int i = stmt.executeUpdate(sql); System.out.println(i);//1 } catch (Exception e) { e.printStackTrace(); }finally{ //释放资源 if (conn!=null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (stmt!=null) { try { stmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }}
其中有关运行结果在代码中有注释
PreparedStatement接口:用于执行预编译的 SQL 语句(是Statement的子接口)
int executeUpdate() 执行更新操作的sql语句
ResultSet executeQuery() 执行查询操作的sql语句
ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。
boolean next() : 把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数据,返回false。
getXXX(列索引|列字段名称): 获取字段的数据
相关代码如下(动态sql语句,在这里主要介绍静态语句中所不具备的select操作)
package com.jdbc.c_preparedstatement;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import com.jdbc.Util.JDBCUtil;public class Stu_01 { public static void main(String[] args) { testSelect(); }private static void testSelect() { Connection conn=null; PreparedStatement stmt=null; ResultSet rs=null; try{ //获取链接 conn = JDBCUtil.getConn(); //准备sql语句 String sql="SELECT *FROM student WHERE id=?;"; //预编译sql语句 stmt = conn.prepareStatement(sql); //设置参数 stmt.setInt(1, 1); //执行sql语句 rs = stmt.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id")+"--"+rs.getString("name"));//1--薛之谦 } }catch(Exception e){ e.printStackTrace(); }finally{ //释放资源 JDBCUtil.close(conn, stmt, rs); } }
结果在代码中显示
Statement和PreparedStatement的区别
一、语法结构不同
1)Statment执行静态sql语句,且sql可以拼接。
2)PreparedStatement可以先执行预编译的sql语句,在预编译sql语句中使用?进行参数占位,后面再进行参数赋值
二、原理不同
1)Statement不能进行sql缓存
2)而PreparedStatement可以进行sql缓存,执行效率会比Statement快!!!
三、安全性不同
1)Statement存在sql注入的风险(使用登录注册讲解sql注入)
2)而PreparedStatement可以有效防止用户注入。
CallableStatement接口:用于执行 SQL 存储过程的接口(是PreparedStatement的子接口)
ResultSet executeQuery() 执行存储过程的sql语句
package com.jdbc.d_callablestatement;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import com.jdbc.Util.JDBCUtil;public class Stu { public static void main(String[] args) { testIn(); //testOut(); } private static void testOut() { Connection conn=null; CallableStatement stmt=null; ResultSet rs=null; try{ conn = JDBCUtil.getConn(); String sql="CALL pro_testOut(?);"; stmt =conn.prepareCall(sql); stmt.registerOutParameter(1, java.sql.Types.VARCHAR); stmt.executeQuery(); System.out.println(stmt.getString(1)); //我是输出参数 }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.close(conn, stmt, rs); } } private static void testIn() { Connection conn=null; PreparedStatement stmt=null; ResultSet rs=null; try{ conn = JDBCUtil.getConn(); String sql="CALL pro_testIn(?);"; stmt = conn.prepareStatement(sql); stmt.setInt(1, 2); rs = stmt.executeQuery(); if (rs.next()) { System.out.println(rs.getInt("id")+"--"+rs.getString("name")); //2--方大同 } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.close(conn, stmt, rs); } }}
相关运行结果在代码中注释
- java jdbc 连接 数据库
- Java jdbc 连接数据库
- java JDBC 连接数据库
- java-------连接数据库(jdbc)
- java连接数据库(jdbc)
- java连接jdbc数据库
- java.jdbc 连接数据库
- Java连接JDBC数据库
- Java JDBC连接数据库
- java JDBC连接数据库
- java JDBC连接数据库
- Java:JDBC连接数据库
- Java连接数据库JDBC
- java 连接数据库 jdbc
- Java,JDBC连接数据库
- Java--JDBC连接数据库
- java jdbc连接数据库
- Java连接数据库 <JDBC>
- Yii错误处理
- Dockerfile
- try中return语句与finally语句执行顺序
- [Codeforces 235E/236B] Number Challenge 莫比乌斯反演
- java之yield(),sleep(),wait()区别详解-备忘笔记
- JDBC-Java连接数据库
- ios UIView 转 UIImage,解决模糊失真问题
- Cordova 4.0+ CordovaWebView问题
- MySQL中concat_ws函数应用实例
- 【数据结构与算法】计数排序
- 程序设计语言范型
- leetcode.136.Single Number
- A/B测试终极指南(翻译)
- 负载均衡的配置