2023年8月3日发(作者:)
使⽤JDBC,以及执⾏SQL语句⽂章⽬录⼀.通过Java代码如何操作Mysql通过Java代码如何操作Mysql C/S 客户端服务器模型JDBC(Java DataBase Connectivity)是Java和数据库之间的⼀个桥梁,是⼀个规范⽽不是⼀个实现。各种不同类型的数据库都依这种规范有相应的实现,都是由java类和接⼝组成。⼆.使⽤JDBC的步骤:<1>导⼊jdbc的Mysql实现依赖导⼊依赖<2>参数配置jdbcUrl :唯⼀确定数据库 以及编码形式 中⽂jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaijdbc:mysql :和mysql建⽴连接时使⽤的协议127.0.0.1:3306 :mysql服务器所在的ip地址和端⼝号ip地址:唯⼀的确定mysql服务器运⾏的主机 127.0.0.1 当前主机端⼝号:能够确定mysql服务器是这台主机的哪⼀个进程 3306 mysql默认端⼝IP 和 端⼝号帮助我们确定mysql服务器的位置。school : 要操作的数据库的名字。<3>加载驱动登录名称:root;登录密码:123456加载驱动:private String url = "jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";private String userName = "root";private String password = "123456";private String jdbcDriver = ""; //jdbc
驱动private Connection connection;<4>建⽴连接 connection = nection(url, userName, password);getConnection:就是jdbc提供给我们建⽴连接的⽅法 登录到mysql服务器的过程<5>创建操作数据库对象创建操作对象:public void createConnection() { try { e(jdbcDriver); try { connection = nection(url, userName, password); if (!ed()) { n("连接建⽴成功"); } else { n("连接建⽴失败"); } } catch (SQLException e) { tackTrace(); } } catch (ClassNotFoundException e) { tackTrace(); }}<6>使⽤statement /PreparedStatement对象,执⾏sql语句(1)使⽤statement对象,执⾏sql语句在第⼀步定义对象private Statement statement;根据数据库中的表 添加数据,删除数据,改变数据,查询数据://添加数据public void insertTest() {
String insertSql = "insert into test values(2,'⼩明')"; try { eUpdate(insertSql); //executeUpdate所有会对数据库内容造成修改的sql语句都是调⽤这个⽅法执⾏的 } catch (SQLException e) { tackTrace(); }}//删除数据public void deleteTest(){ String deleteSql = "delete from test where id =200"; try { eUpdate(deleteSql); } catch (SQLException e) { tackTrace(); }}//改变数据的值public void updateTest(){ String updateSql = "update test set name = '⼩张' where id = 1"; try { eUpdate(updateSql); } catch (SQLException e) { tackTrace(); }}//查询数据public void selectTest() { String selectSql = "select * from student"; try { ResultSet resultSet = eQuery(selectSql); //resultSet
查询到的结果集的集合 //executeQuery:执⾏查询数据的SQL语句专⽤ while (()) {//()
判断集合是否有数据 n("SID " + ing(1) + " Sname " + ing(2) + " Sage " + ing(3) + " Ssex " + ing(4) ); } } catch (SQLException e) { tackTrace(); }}(2)使⽤PreparedStatement对象,执⾏sql语句PrepareStatement对象的使⽤来执⾏语句://添加数据public void insertTest() {
String insertSql = "insert into test values(?,?)"; //定义⽆参的sql语句 PreparedStatement pre = null; try { pre = eStatement(insertSql);//将⽆参数的sql语句提交给mysql //给⽆参数的sql语句提交参数 (1, 201); ing(2, "⼩红"); eUpdate(); //执⾏这条sql (1, 202); ing(2, "⼩李"); eUpdate(); } catch (SQLException e) { tackTrace(); } finally { try { (); } catch (SQLException e) { tackTrace(); } }}//查询数据public void selectTest() { String selectSql = "select Sname,Ssex from student where SID > ?"; try { PreparedStatement pre = eStatement(selectSql); ing(1, "2"); n(pre); ResultSet resultSet = eQuery(); while (()) {//()
判断集合是否有数据 n( "Sname " + ing(1) + " Ssex " + ing(2) ); } n("-----------------------------------------------------"); ing(1, "3"); n(pre); ResultSet resultSet1 = eQuery(); while (()) {//()
判断集合是否有数据 n( "Sname " + ing(1) + " Ssex " + ing(2) ); } } catch (SQLException e) { tackTrace(); }}//删除数据public void deleteTest(){String deleteSql = "delete from student where Sid = ?"; try { PreparedStatement pre = eStatement(deleteSql); (1,4); eUpdate(); } catch (SQLException e) { tackTrace(); }}//改变数据public void updateTest(){ String updateSql = "update student set Sname = '王明' where Sid = ?"; try { PreparedStatement pre = eStatement(updateSql); (1,1); eUpdate(); } catch (SQLException e) { tackTrace(); }}(3)使⽤statement /PreparedStatement对象的区别1.结构完全相同,仅仅只是参数值不同edStatement 当执⾏多条同结构的sql语句时,PreparedStatement对象会先提交⼀个⽆参数的sql语句进进⾏编译。3.同结构的sql语句执⾏多次,PreparedStatement对象的执⾏效率要⽐statment对象⾼的多。原因:PreparedStatement对象对于同结构的sql只编译⼀次。⽽statment对象有⼏条sql就需要执⾏⼏次4.⼀个结构的sql语句只执⾏⼀次,statment对象更好。原因是:statment对象执⾏sql时编译和执⾏⼀次就完成。⽽PreparedStatement对象先编译⽆参数的sql,再提交参数然后再执⾏。综上:只有同结构的sql语句执⾏多次PreparedStatement对象的执⾏效率⽐statment对象⾼,如果执⾏⼀次statment对象更好。(4)sql注⼊异常结构化查询语⾔(SQL)是⼀种⽤来和数据库交互的⽂本语⾔。SQL Injection 就是利⽤⾮法的SQL拼接,从⽽达到⼊侵数据库的⽬的。 它的产⽣主要是由于程序对⽤户输⼊的数据没有进⾏严格的过滤,导致⾮法的数据库SQL操作语句的执⾏。SQL 注⼊(SQL Injection)攻击具有很⼤的危害,攻击者可以利⽤它读取、修改或者删除数据库内的数据,获取数据库中的⽤户名和密码等敏感信息,甚⾄可以获得数据库管理员的权限,⽽且SQL Injection 也很难防范,⼀般的防⽕墙也⽆法拦截 SQL Injection 攻击。PreparedStatement对象 能够有效的防⽌sql注⼊的攻击。<7>关闭连接使⽤过后关闭连接,避免资源浪费public void closeConnection() { try { (); //当不在使⽤mysql时关闭mysql连接
⽅式资源浪费 } catch (SQLException e) { tackTrace(); }}
2023年8月3日发(作者:)
使⽤JDBC,以及执⾏SQL语句⽂章⽬录⼀.通过Java代码如何操作Mysql通过Java代码如何操作Mysql C/S 客户端服务器模型JDBC(Java DataBase Connectivity)是Java和数据库之间的⼀个桥梁,是⼀个规范⽽不是⼀个实现。各种不同类型的数据库都依这种规范有相应的实现,都是由java类和接⼝组成。⼆.使⽤JDBC的步骤:<1>导⼊jdbc的Mysql实现依赖导⼊依赖<2>参数配置jdbcUrl :唯⼀确定数据库 以及编码形式 中⽂jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghaijdbc:mysql :和mysql建⽴连接时使⽤的协议127.0.0.1:3306 :mysql服务器所在的ip地址和端⼝号ip地址:唯⼀的确定mysql服务器运⾏的主机 127.0.0.1 当前主机端⼝号:能够确定mysql服务器是这台主机的哪⼀个进程 3306 mysql默认端⼝IP 和 端⼝号帮助我们确定mysql服务器的位置。school : 要操作的数据库的名字。<3>加载驱动登录名称:root;登录密码:123456加载驱动:private String url = "jdbc:mysql://127.0.0.1:3306/school?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";private String userName = "root";private String password = "123456";private String jdbcDriver = ""; //jdbc
驱动private Connection connection;<4>建⽴连接 connection = nection(url, userName, password);getConnection:就是jdbc提供给我们建⽴连接的⽅法 登录到mysql服务器的过程<5>创建操作数据库对象创建操作对象:public void createConnection() { try { e(jdbcDriver); try { connection = nection(url, userName, password); if (!ed()) { n("连接建⽴成功"); } else { n("连接建⽴失败"); } } catch (SQLException e) { tackTrace(); } } catch (ClassNotFoundException e) { tackTrace(); }}<6>使⽤statement /PreparedStatement对象,执⾏sql语句(1)使⽤statement对象,执⾏sql语句在第⼀步定义对象private Statement statement;根据数据库中的表 添加数据,删除数据,改变数据,查询数据://添加数据public void insertTest() {
String insertSql = "insert into test values(2,'⼩明')"; try { eUpdate(insertSql); //executeUpdate所有会对数据库内容造成修改的sql语句都是调⽤这个⽅法执⾏的 } catch (SQLException e) { tackTrace(); }}//删除数据public void deleteTest(){ String deleteSql = "delete from test where id =200"; try { eUpdate(deleteSql); } catch (SQLException e) { tackTrace(); }}//改变数据的值public void updateTest(){ String updateSql = "update test set name = '⼩张' where id = 1"; try { eUpdate(updateSql); } catch (SQLException e) { tackTrace(); }}//查询数据public void selectTest() { String selectSql = "select * from student"; try { ResultSet resultSet = eQuery(selectSql); //resultSet
查询到的结果集的集合 //executeQuery:执⾏查询数据的SQL语句专⽤ while (()) {//()
判断集合是否有数据 n("SID " + ing(1) + " Sname " + ing(2) + " Sage " + ing(3) + " Ssex " + ing(4) ); } } catch (SQLException e) { tackTrace(); }}(2)使⽤PreparedStatement对象,执⾏sql语句PrepareStatement对象的使⽤来执⾏语句://添加数据public void insertTest() {
String insertSql = "insert into test values(?,?)"; //定义⽆参的sql语句 PreparedStatement pre = null; try { pre = eStatement(insertSql);//将⽆参数的sql语句提交给mysql //给⽆参数的sql语句提交参数 (1, 201); ing(2, "⼩红"); eUpdate(); //执⾏这条sql (1, 202); ing(2, "⼩李"); eUpdate(); } catch (SQLException e) { tackTrace(); } finally { try { (); } catch (SQLException e) { tackTrace(); } }}//查询数据public void selectTest() { String selectSql = "select Sname,Ssex from student where SID > ?"; try { PreparedStatement pre = eStatement(selectSql); ing(1, "2"); n(pre); ResultSet resultSet = eQuery(); while (()) {//()
判断集合是否有数据 n( "Sname " + ing(1) + " Ssex " + ing(2) ); } n("-----------------------------------------------------"); ing(1, "3"); n(pre); ResultSet resultSet1 = eQuery(); while (()) {//()
判断集合是否有数据 n( "Sname " + ing(1) + " Ssex " + ing(2) ); } } catch (SQLException e) { tackTrace(); }}//删除数据public void deleteTest(){String deleteSql = "delete from student where Sid = ?"; try { PreparedStatement pre = eStatement(deleteSql); (1,4); eUpdate(); } catch (SQLException e) { tackTrace(); }}//改变数据public void updateTest(){ String updateSql = "update student set Sname = '王明' where Sid = ?"; try { PreparedStatement pre = eStatement(updateSql); (1,1); eUpdate(); } catch (SQLException e) { tackTrace(); }}(3)使⽤statement /PreparedStatement对象的区别1.结构完全相同,仅仅只是参数值不同edStatement 当执⾏多条同结构的sql语句时,PreparedStatement对象会先提交⼀个⽆参数的sql语句进进⾏编译。3.同结构的sql语句执⾏多次,PreparedStatement对象的执⾏效率要⽐statment对象⾼的多。原因:PreparedStatement对象对于同结构的sql只编译⼀次。⽽statment对象有⼏条sql就需要执⾏⼏次4.⼀个结构的sql语句只执⾏⼀次,statment对象更好。原因是:statment对象执⾏sql时编译和执⾏⼀次就完成。⽽PreparedStatement对象先编译⽆参数的sql,再提交参数然后再执⾏。综上:只有同结构的sql语句执⾏多次PreparedStatement对象的执⾏效率⽐statment对象⾼,如果执⾏⼀次statment对象更好。(4)sql注⼊异常结构化查询语⾔(SQL)是⼀种⽤来和数据库交互的⽂本语⾔。SQL Injection 就是利⽤⾮法的SQL拼接,从⽽达到⼊侵数据库的⽬的。 它的产⽣主要是由于程序对⽤户输⼊的数据没有进⾏严格的过滤,导致⾮法的数据库SQL操作语句的执⾏。SQL 注⼊(SQL Injection)攻击具有很⼤的危害,攻击者可以利⽤它读取、修改或者删除数据库内的数据,获取数据库中的⽤户名和密码等敏感信息,甚⾄可以获得数据库管理员的权限,⽽且SQL Injection 也很难防范,⼀般的防⽕墙也⽆法拦截 SQL Injection 攻击。PreparedStatement对象 能够有效的防⽌sql注⼊的攻击。<7>关闭连接使⽤过后关闭连接,避免资源浪费public void closeConnection() { try { (); //当不在使⽤mysql时关闭mysql连接
⽅式资源浪费 } catch (SQLException e) { tackTrace(); }}
发布评论