公选课网页制作与网站建设,丹灶网站建设案例,合肥网站建设模板,wordpress get_pages认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称#xff0c;用于连接常用数据库。 Sun 公司提供了 JDBC API #xff0c;供程序员调用接口和类#xff0c;集成在 java.sql 和 javax.sql 包中。 Sun 公司还提供了 DriverManager 类用来管理各种不…认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称用于连接常用数据库。 Sun 公司提供了 JDBC API 供程序员调用接口和类集成在 java.sql 和 javax.sql 包中。 Sun 公司还提供了 DriverManager 类用来管理各种不同的JDBC驱动。 不同数据库厂商提供各自的JDBC驱动所以我们想要连接数据库除了要了解 JDBC API 还需要下载各数据库厂商的驱动 jar 包。 JDBC API JDBC API主要用于与数据库建立连接、执行SQL语句、处理结果其中核心类和接口如下 DriverManager依据数据库的不同管理JDBC驱动Connection负责连接数据库并担任传送数据的任务Statement由 Connection 产生、负责执行SQL语句ResultSet:负责保存 Statement 执行后所产生的查询结果JDBC 编码模板 1、与数据库建立连接并获取连接 Connection connectionDriverManager.getConnection(URL,数据库用户名,密码); 2、发送SQL语句得到执行结果 Statement stmtconnection.createStatement();
ResultSet rsstmt.executeQuery(SQL语句); 3、处理返回结果 while(rs.next()){int ars.getInt(a);String brs.getString(b);Date drs.getDate(d);……
} 4、释放资源 rs.close();
stmt.close();
connection.close(); 使用 JDBC 连接到 MySQL 数据库 本例适合已经会使用 MySQL 数据库的同学首先我们下载 JDBC 的驱动 jar 包。这个网址提供了 MySQL 各种语言连接数据库的驱动 https://www.mysql.com/products/connector/,MySQL Connector / J 8.0与从MySQL 5.5开始的所有MySQL版本兼容。8.0下载地址 下载完成后解压后将jar添加依赖到项目中。 连接到MySQL数据库 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class DemoConnectMySQL {public static void main(String[] args) {//连接MySQL的URLString urljdbc:mysql://localhost:3306/mysql?useUnicodetruecharacterEncodingutf8serverTimezoneUTCuseSSLfalse;//MySQL数据库用户名String userroot;//MySQL数据库的密码String password1234;Connection connectionnull;try {connectionDriverManager.getConnection(url, user, password);System.out.println(连接成功);} catch (SQLException e) {e.printStackTrace();}finally {try {connection.close();System.out.println(连接关闭);} catch (SQLException e) {e.printStackTrace();}}}
} url指定数据库的连接字符串格式为jdbc:数据库://ip或域名:端口号?参数参数…… 这里的参数 useUnicodetrue 使用Unicode字符characterEncodingutf8 设置编码防止中文乱码serverTimezoneUTC 设置时区useSSLfalse 不使用SSL jdbc4.0不需要加载驱动 PreparedStatement 增删改 PreparedStatement 继承了 Statement 接口表示预编译的 SQL 语句对象SQL 语句被预编译并存储在 PreparedStatement 对象中可以使用此对象多次高效地执行该语句。(还避免了 SQL 注入的隐患) 先准备好数据库 books 表 book 字段类型属性id整数主键,自增bName字符串非空price小数非空脚本也准备好了 #创建数据库
CREATE DATABASE books;
USE books;
#创建表
CREATE TABLE book ( id INT primary key auto_increment, bName VARCHAR ( 255 ) NOT NULL, price FLOAT NOT NULL
); PreparedStatement添加数据 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TestInsert {public static void main(String[] args) {Connection connectionnull;PreparedStatement pstmtnull;String urljdbc:mysql://localhost:3306/books?useUnicodetruecharacterEncodingutf8serverTimezoneUTCuseSSLfalse;String userroot;String password1234;try {connectionDriverManager.getConnection(url,user,password);//sql语句String sqlinsert into book(bName,price) values (?,?);pstmtconnection.prepareStatement(sql);//传入参数pstmt.setString(1, 《java入门到改行》);pstmt.setFloat(2, 11.11f);int resultpstmt.executeUpdate();System.out.println(受影响行数result);} catch (SQLException e) {e.printStackTrace();}finally {if (pstmt!null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (connection!null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
} 说明 1、连接字符串要修改数据库名字为 books String urljdbc:mysql://localhost:3306/books?useUnicodetruecharacterEncodingutf8serverTimezoneUTCuseSSLfalse; 2、插入数据库的数据不能拼接而是要用 ? 代替 String sqlinsert into book(bName,price) values (?,?); 3、? 代替的参数要通过 set类型(位置,值) 传入 pstmt.setString(1, 《java入门到改行》);
pstmt.setFloat(2, 11.11f); pstmt.setXxx()的位置从 1 开始 4、增删改的SQL语句都使用这个方法返回受影响行数 int resultpstmt.executeUpdate(); 删除数据 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TestDelete {public static void main(String[] args) {Connection connectionnull;PreparedStatement pstmtnull;String urljdbc:mysql://localhost:3306/books?useUnicodetruecharacterEncodingutf8serverTimezoneUTCuseSSLfalse;String userroot;String password1234;try {connectionDriverManager.getConnection(url,user,password);//sql语句String sqldelete from book where id?;pstmtconnection.prepareStatement(sql);//传入参数 要删除idpstmt.setInt(1, 1);int resultpstmt.executeUpdate();System.out.println(受影响行数result);} catch (SQLException e) {e.printStackTrace();}finally {if (pstmt!null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (connection!null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
} 修改数据 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class TestUpdate {public static void main(String[] args) {Connection connectionnull;PreparedStatement pstmtnull;String urljdbc:mysql://localhost:3306/books?useUnicodetruecharacterEncodingutf8serverTimezoneUTCuseSSLfalse;String userroot;String password1234;try {connectionDriverManager.getConnection(url,user,password);//sql语句String sqlupdate book set bName?,price? where id?;pstmtconnection.prepareStatement(sql);//传入参数 要删除idpstmt.setString(1, 《MySQL从删库到跑路》);pstmt.setFloat(2, 16.66f);pstmt.setInt(3, 2);int resultpstmt.executeUpdate();System.out.println(受影响行数result);} catch (SQLException e) {e.printStackTrace();}finally {if (pstmt!null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (connection!null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
} 增、删、改操作的写法都一样都调用 executeUpdate() 方法返回一个受影响行数唯一不同的 SQL语句。 PreparedStatement 查询数据 查询数据需要用到 ResultSet 类保存返回的结果集我们获取数据要操作 ResultSet 获取。 ResultSet 常用方法 方法名说明boolean next()将游标从当前位置向下移动一行void close()关闭 ResultSet 对象int getInt(int colIndex)以int形式获取结果集当前行指定列号值int getInt(String colLabel)以int形式获取结果集当前行指定列名值float getFloat(String colLabel)以float形式获取结果集当前行指定列名值String getString(String colLabel)以 String 形式获取结果集当前行指定列名值import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestSelect {public static void main(String[] args) {Connection connectionnull;PreparedStatement pstmtnull;ResultSet rsnull;String urljdbc:mysql://localhost:3306/books?useUnicodetruecharacterEncodingutf8serverTimezoneUTCuseSSLfalse;String userroot;String password1234;try {connectionDriverManager.getConnection(url,user,password);//sql语句String sqlselect bName,price,id from book where id?;pstmtconnection.prepareStatement(sql);//传入查询条件pstmt.setInt(1, 2);rspstmt.executeQuery();while(rs.next()) {//通过列名获取列的值int idrs.getInt(id);//通过位置获取列的值String bNamers.getString(1);float pricers.getFloat(price);System.out.println(id bName price);}} catch (SQLException e) {e.printStackTrace();}finally {if(rs!null) {try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (pstmt!null) {try {pstmt.close();} catch (SQLException e) {e.printStackTrace();}}if (connection!null) {try {connection.close();} catch (SQLException e) {e.printStackTrace();}}}}
} 关闭对象时注意关闭的顺序后使用的先关闭rs.close()-pstmt.close()-connection.close() ResultSet 对象存在一个光标光标所指行为当前行。想要获取列的数据需要先指向一行所以要先指定 next() 方法用于指向一行如果没有数据next()方法返回false有数据返回true。 使用 getXxx() 方法获取列的数据时建议写列名这样好识别 转载于:https://www.cnblogs.com/AIThink/p/9940542.html